CLI-Tool for cleaning out orphaned terms
git-svn-id: https://svn.libreccm.org/ccm/trunk@4759 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
3684065289
commit
961b77511d
|
|
@ -0,0 +1,145 @@
|
||||||
|
package com.arsdigita.london.terms.cmd;
|
||||||
|
|
||||||
|
import com.arsdigita.domain.DomainCollection;
|
||||||
|
import com.arsdigita.london.terms.Domain;
|
||||||
|
import com.arsdigita.london.terms.Term;
|
||||||
|
import com.arsdigita.london.util.Transaction;
|
||||||
|
import com.arsdigita.persistence.DataCollection;
|
||||||
|
import com.arsdigita.persistence.SessionManager;
|
||||||
|
import com.arsdigita.util.cmd.Program;
|
||||||
|
|
||||||
|
import org.apache.commons.cli.CommandLine;
|
||||||
|
import org.apache.commons.cli.OptionBuilder;
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
public class TermsCleaner extends Program {
|
||||||
|
|
||||||
|
// public static final Logger LOGGER = Logger.getLogger(TermsCleaner.class);
|
||||||
|
|
||||||
|
public TermsCleaner() {
|
||||||
|
super("TermsCleaner",
|
||||||
|
"1.0.0",
|
||||||
|
"");
|
||||||
|
|
||||||
|
getOptions()
|
||||||
|
.addOption(
|
||||||
|
OptionBuilder
|
||||||
|
.hasArg(false)
|
||||||
|
.withLongOpt("clean-domains")
|
||||||
|
.withDescription(
|
||||||
|
"Cleanup empty domains after removing orphaned terms")
|
||||||
|
.create('c'));
|
||||||
|
|
||||||
|
getOptions()
|
||||||
|
.addOption(
|
||||||
|
OptionBuilder
|
||||||
|
.hasArg(false)
|
||||||
|
.withLongOpt("pretend")
|
||||||
|
.withDescription(
|
||||||
|
"Only print what would be done but don't remove any terms etc.")
|
||||||
|
.create('p'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(final String[] args) {
|
||||||
|
new TermsCleaner().run(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doRun(final CommandLine cmdLine) {
|
||||||
|
|
||||||
|
final boolean cleanDomains = cmdLine.hasOption('c');
|
||||||
|
final boolean pretend = cmdLine.hasOption('p');
|
||||||
|
|
||||||
|
if (pretend) {
|
||||||
|
System.err.println(
|
||||||
|
"Pretend option is set. Not action will be taken.");
|
||||||
|
}
|
||||||
|
|
||||||
|
final DataCollection domainsData = SessionManager
|
||||||
|
.getSession()
|
||||||
|
.retrieve(Domain.BASE_DATA_OBJECT_TYPE);
|
||||||
|
|
||||||
|
final DomainCollection domains = new DomainCollection(domainsData);
|
||||||
|
|
||||||
|
System.out.printf(String.format("Found %d domains.%n", domains.size()));
|
||||||
|
|
||||||
|
final Transaction txn = new Transaction() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doRun() {
|
||||||
|
while (domains.next()) {
|
||||||
|
removeOrphanedTerms((Domain) domains.getDomainObject(),
|
||||||
|
pretend);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cleanDomains) {
|
||||||
|
System.out.println("Removing domains with no terms...");
|
||||||
|
domains.reset();
|
||||||
|
|
||||||
|
while (domains.next()) {
|
||||||
|
removeEmptyDomain((Domain) domains.getDomainObject(),
|
||||||
|
pretend);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
txn.run();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
System.err.println("Failed to clean orphaned terms:");
|
||||||
|
ex.printStackTrace(System.err);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void removeOrphanedTerms(final Domain domain,
|
||||||
|
final boolean pretend) {
|
||||||
|
|
||||||
|
System.out.printf("Removing orphaned terms from Domain '%s'...%n",
|
||||||
|
domain.getKey());
|
||||||
|
|
||||||
|
final DomainCollection orphanedTerms = domain.getOrphanedTerms();
|
||||||
|
System.out.printf("Found %d orphaned terms.%n",
|
||||||
|
orphanedTerms.size());
|
||||||
|
|
||||||
|
while (orphanedTerms.next()) {
|
||||||
|
final Term orphanedTerm = (Term) orphanedTerms.getDomainObject();
|
||||||
|
|
||||||
|
if (pretend) {
|
||||||
|
System.out.printf("Would remove orphaned term '%s'...%n",
|
||||||
|
orphanedTerm.getName());
|
||||||
|
} else {
|
||||||
|
System.out.printf("Removing orphaned term '%s'...%n",
|
||||||
|
orphanedTerm.getName());
|
||||||
|
orphanedTerm.delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void removeEmptyDomain(final Domain domain,
|
||||||
|
final boolean pretend) {
|
||||||
|
|
||||||
|
final DomainCollection terms = domain.getTerms();
|
||||||
|
|
||||||
|
if (terms.isEmpty()) {
|
||||||
|
if (pretend) {
|
||||||
|
System.out.printf(
|
||||||
|
"Domain '%s' has no terms and would be removed if pretend "
|
||||||
|
+ "is not set.%n",
|
||||||
|
domain.getKey());
|
||||||
|
} else {
|
||||||
|
System.out.printf("Domain '%s' has not terms. "
|
||||||
|
+ "Removing domain...%n",
|
||||||
|
domain.getKey());
|
||||||
|
domain.delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue