From c85b31844b68504fd68b17c1a1305815297eebbe Mon Sep 17 00:00:00 2001 From: tama3 Date: Tue, 9 Dec 2008 07:49:44 +0000 Subject: [PATCH] update command line interface, and introduce command pattern in Main class git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/stigmata/trunk@347 acee48c3-7b26-0410-bdac-b3d0e5314bbc --- .../jp/sourceforge/stigmata/BirthmarkContext.java | 9 + .../sourceforge/stigmata/BirthmarkEnvironment.java | 2 +- src/main/java/jp/sourceforge/stigmata/Main.java | 254 +++------------------ .../java/jp/sourceforge/stigmata/Stigmata.java | 5 + .../jp/sourceforge/stigmata/StigmataCommand.java | 13 ++ .../AbstractBirthmarkExtractorService.java | 2 +- .../stigmata/command/AbstractStigmataCommand.java | 31 +++ .../stigmata/command/CompareCommand.java | 63 +++++ .../stigmata/command/ExportConfigCommand.java | 45 ++++ .../stigmata/command/ExtractCommand.java | 58 +++++ .../sourceforge/stigmata/command/GuiCommand.java | 40 ++++ .../sourceforge/stigmata/command/HelpCommand.java | 72 ++++++ .../stigmata/command/InstallCommand.java | 72 ++++++ .../stigmata/command/LicenseCommand.java | 40 ++++ .../stigmata/command/ListBirthmarksCommand.java | 54 +++++ .../stigmata/command/StigmataCommandFactory.java | 47 ++++ .../stigmata/command/UninstallCommand.java | 95 ++++++++ .../stigmata/command/VersionCommand.java | 28 +++ src/main/resources/resources/options.properties | 7 +- src/main/resources/resources/options.xml | 42 ---- src/main/resources/resources/options_ja.source | 9 +- src/main/resources/resources/stigmata.xml | 4 + .../cvfv/CVFVBirthmarkExtractorTest.java | 16 +- 23 files changed, 727 insertions(+), 281 deletions(-) create mode 100644 src/main/java/jp/sourceforge/stigmata/StigmataCommand.java create mode 100644 src/main/java/jp/sourceforge/stigmata/command/AbstractStigmataCommand.java create mode 100644 src/main/java/jp/sourceforge/stigmata/command/CompareCommand.java create mode 100644 src/main/java/jp/sourceforge/stigmata/command/ExportConfigCommand.java create mode 100644 src/main/java/jp/sourceforge/stigmata/command/ExtractCommand.java create mode 100644 src/main/java/jp/sourceforge/stigmata/command/GuiCommand.java create mode 100644 src/main/java/jp/sourceforge/stigmata/command/HelpCommand.java create mode 100644 src/main/java/jp/sourceforge/stigmata/command/InstallCommand.java create mode 100644 src/main/java/jp/sourceforge/stigmata/command/LicenseCommand.java create mode 100644 src/main/java/jp/sourceforge/stigmata/command/ListBirthmarksCommand.java create mode 100644 src/main/java/jp/sourceforge/stigmata/command/StigmataCommandFactory.java create mode 100644 src/main/java/jp/sourceforge/stigmata/command/UninstallCommand.java create mode 100644 src/main/java/jp/sourceforge/stigmata/command/VersionCommand.java diff --git a/src/main/java/jp/sourceforge/stigmata/BirthmarkContext.java b/src/main/java/jp/sourceforge/stigmata/BirthmarkContext.java index d178825..ffacb95 100755 --- a/src/main/java/jp/sourceforge/stigmata/BirthmarkContext.java +++ b/src/main/java/jp/sourceforge/stigmata/BirthmarkContext.java @@ -27,6 +27,7 @@ public class BirthmarkContext{ private List birthmarkTypes = new ArrayList(); private List filterTypes = new ArrayList(); private Map nameMappings = new HashMap(); + private String format; /** * properties which available on a session. */ @@ -105,6 +106,14 @@ public class BirthmarkContext{ birthmarkTypes.remove(type); } + public String getFormat(){ + return format; + } + + public void setFormat(String format){ + this.format = format; + } + public synchronized String[] getBirthmarkTypes(){ return birthmarkTypes.toArray(new String[getBirthmarkTypeSize()]); } diff --git a/src/main/java/jp/sourceforge/stigmata/BirthmarkEnvironment.java b/src/main/java/jp/sourceforge/stigmata/BirthmarkEnvironment.java index 4287d2b..41a81c4 100644 --- a/src/main/java/jp/sourceforge/stigmata/BirthmarkEnvironment.java +++ b/src/main/java/jp/sourceforge/stigmata/BirthmarkEnvironment.java @@ -323,7 +323,7 @@ public class BirthmarkEnvironment{ private List getServiceList(){ List list = new ArrayList(); if(parent != null){ - for(BirthmarkSpi spi : parent.getServices()){ + for(BirthmarkSpi spi: parent.getServices()){ list.add(spi); } } diff --git a/src/main/java/jp/sourceforge/stigmata/Main.java b/src/main/java/jp/sourceforge/stigmata/Main.java index 49198fa..c03c019 100644 --- a/src/main/java/jp/sourceforge/stigmata/Main.java +++ b/src/main/java/jp/sourceforge/stigmata/Main.java @@ -4,42 +4,25 @@ package jp.sourceforge.stigmata; * $Id$ */ -import java.io.BufferedReader; import java.io.File; -import java.io.FileWriter; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.PrintWriter; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; -import java.util.ResourceBundle; +import jp.sourceforge.stigmata.command.HelpCommand; +import jp.sourceforge.stigmata.command.StigmataCommandFactory; import jp.sourceforge.stigmata.digger.ClasspathContext; -import jp.sourceforge.stigmata.event.BirthmarkEngineAdapter; -import jp.sourceforge.stigmata.event.BirthmarkEngineEvent; -import jp.sourceforge.stigmata.event.WarningMessages; import jp.sourceforge.stigmata.hook.Phase; import jp.sourceforge.stigmata.hook.StigmataHookManager; -import jp.sourceforge.stigmata.printer.BirthmarkServicePrinter; -import jp.sourceforge.stigmata.printer.ComparisonResultSetPrinter; -import jp.sourceforge.stigmata.printer.ExtractionResultSetPrinter; -import jp.sourceforge.stigmata.printer.PrinterManager; import jp.sourceforge.stigmata.spi.BirthmarkSpi; -import jp.sourceforge.stigmata.spi.ResultPrinterSpi; -import jp.sourceforge.stigmata.ui.swing.StigmataFrame; -import jp.sourceforge.stigmata.utils.ConfigFileExporter; import jp.sourceforge.talisman.xmlcli.CommandLinePlus; import jp.sourceforge.talisman.xmlcli.OptionsBuilder; -import jp.sourceforge.talisman.xmlcli.ResourceHelpFormatter; import jp.sourceforge.talisman.xmlcli.XmlCliConfigurationException; import jp.sourceforge.talisman.xmlcli.builder.OptionsBuilderFactory; import org.apache.commons.cli.CommandLineParser; -import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.apache.commons.cli.PosixParser; @@ -52,8 +35,6 @@ import org.w3c.dom.DOMException; * @version $Revision$ */ public final class Main{ - private PrinterManager manager = PrinterManager.getInstance(); - /** * main process. * @throws org.apache.commons.cli.ParseException @@ -67,127 +48,43 @@ public final class Main{ stigmata.configuration(commandLine.getOptionValue("config-file"), commandLine.hasOption("reset-config")); String[] arguments = commandLine.getArgs(); + String commandString = "gui"; - String mode = commandLine.getOptionValue("mode"); - String format = commandLine.getOptionValue("format"); - - if(format == null){ - format = "xml"; - } - if(mode == null){ - mode = "gui"; + if(arguments.length > 0){ + commandString = arguments[0]; } - BirthmarkContext context = stigmata.createContext(); - updateContext(context, commandLine); - boolean exitFlag = executeOption(context.getEnvironment(), commandLine, options); + arguments = shiftArray(arguments); - if(!exitFlag){ - if(!("gui".equals(mode) || "list".equals(mode)) && (arguments == null || arguments.length == 0)){ + BirthmarkContext context = stigmata.createContext(); + updateContext(context, commandLine); - printHelp(context.getEnvironment(), options); - return; - } - StigmataHookManager.getInstance().runHook(Phase.SETUP, context.getEnvironment()); + StigmataCommandFactory factory = StigmataCommandFactory.getInstance(); + factory.registerCommand("help", new HelpCommand(options)); - if(mode.equals("list")){ - listBirthmarks(context, format); - } - else if(mode.equals("extract")){ - extractBirthmarks(stigmata, arguments, format, context); - } - else if(mode.equals("compare")){ - compareBirthmarks(stigmata, arguments, format, context); - } - else if(mode.equals("gui")){ - StigmataFrame frame = new StigmataFrame(stigmata, context.getEnvironment()); - frame.setVisible(true); - } - - if(!mode.equals("gui")){ - StigmataHookManager.getInstance().runHook(Phase.TEAR_DOWN, context.getEnvironment()); - } - else{ - final BirthmarkEnvironment env = context.getEnvironment(); - Runtime.getRuntime().addShutdownHook(new Thread(){ - public void run(){ - StigmataHookManager.getInstance().runHook( - Phase.TEAR_DOWN, env - ); - } - }); - } + StigmataCommand command = factory.getCommand(commandString); + if(!command.isAvailableArguments(arguments)){ + command = factory.getCommand("help"); } - } - /** - * extract birthmarks. - */ - private void extractBirthmarks(Stigmata stigmata, String[] args, String format, - BirthmarkContext context){ - try{ - context.setComparisonMethod(ComparisonMethod.ROUND_ROBIN_SAME_PAIR); - BirthmarkEngine engine = new BirthmarkEngine(context.getEnvironment()); + StigmataHookManager.getInstance().runHook(Phase.SETUP, context.getEnvironment()); - engine.addBirthmarkEngineListener(new BirthmarkEngineAdapter(){ - public void operationDone(BirthmarkEngineEvent e){ - WarningMessages warnings = e.getMessage(); - for(Iterator i = warnings.exceptions(); i.hasNext(); ){ - i.next().printStackTrace(); - } - } - }); - ExtractionResultSet ers = engine.extract(args, context); - - ResultPrinterSpi spi = manager.getService(format); - ExtractionResultSetPrinter formatter = spi.getExtractionResultSetPrinter(); - formatter.printResult(new PrintWriter(System.out), ers); - }catch(Exception ex){ - ex.printStackTrace(); - } + command.setUp(context.getEnvironment()); + command.perform(stigmata, context, arguments); + command.tearDown(context.getEnvironment()); } /** - * + * shift right given array. + * @param args */ - private void compareBirthmarks(Stigmata stigmata, String[] args, String format, - BirthmarkContext context){ - try{ - BirthmarkEngine engine = new BirthmarkEngine(context.getEnvironment()); - context.setComparisonMethod(ComparisonMethod.ROUND_ROBIN_SAME_PAIR); - engine.addBirthmarkEngineListener(new BirthmarkEngineAdapter(){ - public void operationDone(BirthmarkEngineEvent e){ - WarningMessages warnings = e.getMessage(); - for(Iterator i = warnings.exceptions(); i.hasNext(); ){ - i.next().printStackTrace(); - } - } - }); - - ExtractionResultSet rs = engine.extract(args, context); - ComparisonResultSet resultset = engine.compare(rs); - if(context.hasFilter()){ - resultset = engine.filter(resultset); - } - - ResultPrinterSpi spi = manager.getService(format); - ComparisonResultSetPrinter formatter = spi.getComparisonResultSetPrinter(); - formatter.printResult(new PrintWriter(System.out), resultset); - }catch(Exception e){ - e.printStackTrace(); - } - } - - private void listBirthmarks(BirthmarkContext context, String format){ - try{ - BirthmarkSpi[] spis = context.getEnvironment().findServices(); - ResultPrinterSpi spi = manager.getService(format); - BirthmarkServicePrinter formatter = spi.getBirthmarkServicePrinter(); - - formatter.printResult(new PrintWriter(System.out), spis); - }catch(IOException e){ - e.printStackTrace(); + private String[] shiftArray(String[] args){ + if(args.length > 0){ + String[] arguments = new String[args.length - 1]; + System.arraycopy(args, 1, arguments, 0, arguments.length); + args = arguments; } + return args; } private void updateContext(BirthmarkContext context, CommandLinePlus cl){ @@ -215,6 +112,12 @@ public final class Main{ ExtractionUnit unit = ExtractionUnit.valueOf(cl.getOptionValue("extraction-unit")); context.setExtractionUnit(unit); } + if(cl.hasOption("format")){ + context.setFormat(cl.getOptionValue("format")); + } + else{ + context.setFormat("xml"); + } addClasspath(env.getClasspathContext(), cl); } @@ -249,27 +152,6 @@ public final class Main{ } } - private boolean executeOption(BirthmarkEnvironment env, CommandLinePlus commandLine, Options options){ - boolean exitFlag = false; - if(commandLine.hasOption("help")){ - printHelp(env, options); - exitFlag = true; - } - if(commandLine.hasOption("version")){ - printVersion(); - exitFlag = true; - } - if(commandLine.hasOption("license")){ - printLicense(); - exitFlag = true; - } - if(commandLine.hasOption("export-config")){ - exportConfiguration(env, commandLine.getOptionValue("export-config")); - exitFlag = true; - } - return exitFlag; - } - private Options buildOptions(){ try{ OptionsBuilderFactory factory = OptionsBuilderFactory.getInstance(); @@ -288,80 +170,6 @@ public final class Main{ return null; } - public void exportConfiguration(BirthmarkEnvironment env, String file){ - try{ - PrintWriter out; - if(file == null){ - out = new PrintWriter(System.out); - } - else{ - if(!file.endsWith(".xml")){ - file = file + ".xml"; - } - out = new PrintWriter(new FileWriter(file)); - } - - new ConfigFileExporter(env).export(out); - out.close(); - }catch(IOException e){ - } - } - - public void printHelp(BirthmarkEnvironment env, Options options){ - Package p = getClass().getPackage(); - ResourceBundle helpResource = ResourceBundle.getBundle("resources.options"); - HelpFormatter formatter = new ResourceHelpFormatter(helpResource); - formatter.printHelp( - String.format( - helpResource.getString("cli.interface"), - p.getImplementationVersion() - ), - options - ); - System.out.println(); - System.out.println(helpResource.getString("cli.interface.birthmarks")); - for(BirthmarkSpi service: env.getServices()){ - if(!service.isExpert()){ - System.out.printf(" %-5s (%s): %s%n", service.getType(), - service.getDisplayType(), service.getDescription()); - } - } - System.out.println(); - System.out.println(helpResource.getString("cli.interface.filters")); - for(ComparisonPairFilterSet filterset: env.getFilterManager().getFilterSets()){ - String matchString = helpResource.getString("cli.interface.filter.matchall"); - if(filterset.isMatchAny()) matchString = helpResource.getString("cli.interface.filter.matchany"); - System.out.printf(" %s (%s)%n", filterset.getName(), matchString); - for(ComparisonPairFilter filter: filterset){ - System.out.printf(" %s%n", filter); - } - } - System.out.println(); - System.out.println(helpResource.getString("cli.interface.copyright")); - System.out.println(helpResource.getString("cli.interface.mailto")); - } - - public void printLicense(){ - try{ - InputStream in = getClass().getResourceAsStream("/META-INF/license.txt"); - BufferedReader reader = new BufferedReader(new InputStreamReader(in)); - String line; - - while((line = reader.readLine()) != null){ - System.out.println(line); - } - reader.close(); - }catch(IOException ex){ - ex.printStackTrace(); - } - } - - public void printVersion(){ - ResourceBundle helpResource = ResourceBundle.getBundle("resources.options"); - Package p = getClass().getPackage(); - System.out.printf("%s %s%n", helpResource.getString("cli.version.header"), p.getImplementationVersion()); - } - public static void main(String[] args) throws Exception{ new Main(args); } diff --git a/src/main/java/jp/sourceforge/stigmata/Stigmata.java b/src/main/java/jp/sourceforge/stigmata/Stigmata.java index a01b25c..9d662ce 100755 --- a/src/main/java/jp/sourceforge/stigmata/Stigmata.java +++ b/src/main/java/jp/sourceforge/stigmata/Stigmata.java @@ -35,6 +35,7 @@ public class Stigmata{ * instance. singleton pattern. */ private static Stigmata stigmata; + private PrinterManager manager = PrinterManager.getInstance(); private BirthmarkEnvironment defaultEnvironment; private List listeners = new ArrayList(); @@ -87,6 +88,10 @@ public class Stigmata{ return engine; } + public PrinterManager getPrinterManager(){ + return manager; + } + public void addBirthmarkEngineListener(BirthmarkEngineListener listener){ listeners.add(listener); } diff --git a/src/main/java/jp/sourceforge/stigmata/StigmataCommand.java b/src/main/java/jp/sourceforge/stigmata/StigmataCommand.java new file mode 100644 index 0000000..321d28d --- /dev/null +++ b/src/main/java/jp/sourceforge/stigmata/StigmataCommand.java @@ -0,0 +1,13 @@ +package jp.sourceforge.stigmata; + +public interface StigmataCommand{ + public boolean isAvailableArguments(String[] args); + + public void perform(Stigmata stigmata, BirthmarkContext context, String[] args); + + public void setUp(BirthmarkEnvironment env); + + public void tearDown(BirthmarkEnvironment env); + + public String getCommandString(); +} diff --git a/src/main/java/jp/sourceforge/stigmata/birthmarks/extractors/AbstractBirthmarkExtractorService.java b/src/main/java/jp/sourceforge/stigmata/birthmarks/extractors/AbstractBirthmarkExtractorService.java index 95fd59c..20306c7 100644 --- a/src/main/java/jp/sourceforge/stigmata/birthmarks/extractors/AbstractBirthmarkExtractorService.java +++ b/src/main/java/jp/sourceforge/stigmata/birthmarks/extractors/AbstractBirthmarkExtractorService.java @@ -20,7 +20,7 @@ import jp.sourceforge.stigmata.utils.LocalizedDescriptionManager; * @author Haruaki TAMADA * @version $Revision$ */ -abstract class AbstractBirthmarkExtractorService extends AbstractServiceProvider implements BirthmarkExtractorSpi{ +public abstract class AbstractBirthmarkExtractorService extends AbstractServiceProvider implements BirthmarkExtractorSpi{ /** * returns a type of the birthmark this service provides. */ diff --git a/src/main/java/jp/sourceforge/stigmata/command/AbstractStigmataCommand.java b/src/main/java/jp/sourceforge/stigmata/command/AbstractStigmataCommand.java new file mode 100644 index 0000000..fd2a4dd --- /dev/null +++ b/src/main/java/jp/sourceforge/stigmata/command/AbstractStigmataCommand.java @@ -0,0 +1,31 @@ +package jp.sourceforge.stigmata.command; + +/* + * $Id$ + */ + +import jp.sourceforge.stigmata.BirthmarkEnvironment; +import jp.sourceforge.stigmata.StigmataCommand; +import jp.sourceforge.stigmata.hook.Phase; +import jp.sourceforge.stigmata.hook.StigmataHookManager; + +/** + * + * @author Haruaki Tamada + * @version $Revision$ + */ +public abstract class AbstractStigmataCommand implements StigmataCommand{ + public boolean isAvailableArguments(String[] args){ + return true; + } + + public void setUp(BirthmarkEnvironment env){ + StigmataHookManager.getInstance().runHook(Phase.SETUP, env); + } + + public void tearDown(BirthmarkEnvironment env){ + StigmataHookManager.getInstance().runHook(Phase.TEAR_DOWN, env); + } + + public abstract String getCommandString(); +} diff --git a/src/main/java/jp/sourceforge/stigmata/command/CompareCommand.java b/src/main/java/jp/sourceforge/stigmata/command/CompareCommand.java new file mode 100644 index 0000000..fffa601 --- /dev/null +++ b/src/main/java/jp/sourceforge/stigmata/command/CompareCommand.java @@ -0,0 +1,63 @@ +package jp.sourceforge.stigmata.command; + +/* + * $Id$ + */ + +import java.io.PrintWriter; +import java.util.Iterator; + +import jp.sourceforge.stigmata.BirthmarkContext; +import jp.sourceforge.stigmata.BirthmarkEngine; +import jp.sourceforge.stigmata.ComparisonMethod; +import jp.sourceforge.stigmata.ComparisonResultSet; +import jp.sourceforge.stigmata.ExtractionResultSet; +import jp.sourceforge.stigmata.Stigmata; +import jp.sourceforge.stigmata.event.BirthmarkEngineAdapter; +import jp.sourceforge.stigmata.event.BirthmarkEngineEvent; +import jp.sourceforge.stigmata.event.WarningMessages; +import jp.sourceforge.stigmata.printer.ComparisonResultSetPrinter; +import jp.sourceforge.stigmata.spi.ResultPrinterSpi; + +/** + * + * @author Haruaki Tamada + * @version $Revision$ + */ +public class CompareCommand extends AbstractStigmataCommand{ + public boolean isAvailableArguments(String[] args){ + return args.length > 0; + } + + @Override + public String getCommandString(){ + return "compare"; + } + + public void perform(Stigmata stigmata, BirthmarkContext context, String[] args){ + try{ + BirthmarkEngine engine = new BirthmarkEngine(context.getEnvironment()); + context.setComparisonMethod(ComparisonMethod.ROUND_ROBIN_SAME_PAIR); + engine.addBirthmarkEngineListener(new BirthmarkEngineAdapter(){ + public void operationDone(BirthmarkEngineEvent e){ + WarningMessages warnings = e.getMessage(); + for(Iterator i = warnings.exceptions(); i.hasNext(); ){ + i.next().printStackTrace(); + } + } + }); + + ExtractionResultSet rs = engine.extract(args, context); + ComparisonResultSet resultset = engine.compare(rs); + if(context.hasFilter()){ + resultset = engine.filter(resultset); + } + + ResultPrinterSpi spi = stigmata.getPrinterManager().getService(context.getFormat()); + ComparisonResultSetPrinter formatter = spi.getComparisonResultSetPrinter(); + formatter.printResult(new PrintWriter(System.out), resultset); + }catch(Exception e){ + e.printStackTrace(); + } + } +} diff --git a/src/main/java/jp/sourceforge/stigmata/command/ExportConfigCommand.java b/src/main/java/jp/sourceforge/stigmata/command/ExportConfigCommand.java new file mode 100644 index 0000000..60a577b --- /dev/null +++ b/src/main/java/jp/sourceforge/stigmata/command/ExportConfigCommand.java @@ -0,0 +1,45 @@ +package jp.sourceforge.stigmata.command; + +/* + * $Id$ + */ + +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; + +import jp.sourceforge.stigmata.BirthmarkContext; +import jp.sourceforge.stigmata.Stigmata; +import jp.sourceforge.stigmata.utils.ConfigFileExporter; + +/** + * + * @author Haruaki Tamada + * @version $Revision$ + */ +public class ExportConfigCommand extends AbstractStigmataCommand{ + + @Override + public String getCommandString(){ + return "export-config"; + } + + public void perform(Stigmata stigmata, BirthmarkContext context, String[] args){ + try{ + PrintWriter out; + if(args == null || args.length == 0){ + out = new PrintWriter(System.out); + } + else{ + if(!args[0].endsWith(".xml")){ + args[0] = args[0] + ".xml"; + } + out = new PrintWriter(new FileWriter(args[0])); + } + + new ConfigFileExporter(context.getEnvironment()).export(out); + out.close(); + }catch(IOException e){ + } + } +} diff --git a/src/main/java/jp/sourceforge/stigmata/command/ExtractCommand.java b/src/main/java/jp/sourceforge/stigmata/command/ExtractCommand.java new file mode 100644 index 0000000..0e10523 --- /dev/null +++ b/src/main/java/jp/sourceforge/stigmata/command/ExtractCommand.java @@ -0,0 +1,58 @@ +package jp.sourceforge.stigmata.command; + +/* + * $Id$ + */ + +import java.io.PrintWriter; +import java.util.Iterator; + +import jp.sourceforge.stigmata.BirthmarkContext; +import jp.sourceforge.stigmata.BirthmarkEngine; +import jp.sourceforge.stigmata.ComparisonMethod; +import jp.sourceforge.stigmata.ExtractionResultSet; +import jp.sourceforge.stigmata.Stigmata; +import jp.sourceforge.stigmata.event.BirthmarkEngineAdapter; +import jp.sourceforge.stigmata.event.BirthmarkEngineEvent; +import jp.sourceforge.stigmata.event.WarningMessages; +import jp.sourceforge.stigmata.printer.ExtractionResultSetPrinter; +import jp.sourceforge.stigmata.spi.ResultPrinterSpi; + +/** + * + * @author Haruaki Tamada + * @version $Revision$ + */ +public class ExtractCommand extends AbstractStigmataCommand{ + public boolean isAvailableArguments(String[] args){ + return args.length > 0; + } + + @Override + public String getCommandString(){ + return "extract"; + } + + public void perform(Stigmata stigmata, BirthmarkContext context, String[] args){ + try{ + context.setComparisonMethod(ComparisonMethod.ROUND_ROBIN_SAME_PAIR); + BirthmarkEngine engine = new BirthmarkEngine(context.getEnvironment()); + + engine.addBirthmarkEngineListener(new BirthmarkEngineAdapter(){ + public void operationDone(BirthmarkEngineEvent e){ + WarningMessages warnings = e.getMessage(); + for(Iterator i = warnings.exceptions(); i.hasNext(); ){ + i.next().printStackTrace(); + } + } + }); + ExtractionResultSet ers = engine.extract(args, context); + + ResultPrinterSpi spi = stigmata.getPrinterManager().getService(context.getFormat()); + ExtractionResultSetPrinter formatter = spi.getExtractionResultSetPrinter(); + formatter.printResult(new PrintWriter(System.out), ers); + }catch(Exception ex){ + ex.printStackTrace(); + } + } +} diff --git a/src/main/java/jp/sourceforge/stigmata/command/GuiCommand.java b/src/main/java/jp/sourceforge/stigmata/command/GuiCommand.java new file mode 100644 index 0000000..753f6a8 --- /dev/null +++ b/src/main/java/jp/sourceforge/stigmata/command/GuiCommand.java @@ -0,0 +1,40 @@ +package jp.sourceforge.stigmata.command; + +/* + * $Id$ + */ + +import jp.sourceforge.stigmata.BirthmarkContext; +import jp.sourceforge.stigmata.BirthmarkEnvironment; +import jp.sourceforge.stigmata.Stigmata; +import jp.sourceforge.stigmata.hook.Phase; +import jp.sourceforge.stigmata.hook.StigmataHookManager; +import jp.sourceforge.stigmata.ui.swing.StigmataFrame; + +/** + * + * @author Haruaki Tamada + * @version $Revision$ + */ +public class GuiCommand extends AbstractStigmataCommand{ + public void perform(Stigmata stigmata, BirthmarkContext context, String[] args){ + StigmataFrame frame = new StigmataFrame(stigmata, context.getEnvironment()); + frame.setVisible(true); + } + + @Override + public String getCommandString(){ + return "gui"; + } + + @Override + public void tearDown(final BirthmarkEnvironment env){ + Runtime.getRuntime().addShutdownHook(new Thread(){ + public void run(){ + StigmataHookManager.getInstance().runHook( + Phase.TEAR_DOWN, env + ); + } + }); + } +} diff --git a/src/main/java/jp/sourceforge/stigmata/command/HelpCommand.java b/src/main/java/jp/sourceforge/stigmata/command/HelpCommand.java new file mode 100644 index 0000000..f0280bc --- /dev/null +++ b/src/main/java/jp/sourceforge/stigmata/command/HelpCommand.java @@ -0,0 +1,72 @@ +package jp.sourceforge.stigmata.command; + +/* + * $Id$ + */ + +import java.util.ResourceBundle; + +import jp.sourceforge.stigmata.BirthmarkContext; +import jp.sourceforge.stigmata.BirthmarkEnvironment; +import jp.sourceforge.stigmata.ComparisonPairFilter; +import jp.sourceforge.stigmata.ComparisonPairFilterSet; +import jp.sourceforge.stigmata.Stigmata; +import jp.sourceforge.stigmata.spi.BirthmarkSpi; +import jp.sourceforge.talisman.xmlcli.ResourceHelpFormatter; + +import org.apache.commons.cli.HelpFormatter; +import org.apache.commons.cli.Options; + +/** + * + * @author Haruaki Tamada + * @version $Revision$ + */ +public class HelpCommand extends AbstractStigmataCommand{ + private Options options; + + public HelpCommand(Options options){ + this.options = options; + } + + @Override + public String getCommandString(){ + return "help"; + } + + public void perform(Stigmata stigmata, BirthmarkContext context, String[] args){ + BirthmarkEnvironment env = context.getEnvironment(); + Package p = getClass().getPackage(); + + ResourceBundle helpResource = ResourceBundle.getBundle("resources.options"); + HelpFormatter formatter = new ResourceHelpFormatter(helpResource); + formatter.printHelp( + String.format( + helpResource.getString("cli.interface"), + p.getImplementationVersion() + ), + options + ); + System.out.println(); + System.out.println(helpResource.getString("cli.interface.birthmarks")); + for(BirthmarkSpi service: env.getServices()){ + if(!service.isExpert()){ + System.out.printf(" %-5s (%s): %s%n", service.getType(), + service.getDisplayType(), service.getDescription()); + } + } + System.out.println(); + System.out.println(helpResource.getString("cli.interface.filters")); + for(ComparisonPairFilterSet filterset: env.getFilterManager().getFilterSets()){ + String matchString = helpResource.getString("cli.interface.filter.matchall"); + if(filterset.isMatchAny()) matchString = helpResource.getString("cli.interface.filter.matchany"); + System.out.printf(" %s (%s)%n", filterset.getName(), matchString); + for(ComparisonPairFilter filter: filterset){ + System.out.printf(" %s%n", filter); + } + } + System.out.println(); + System.out.println(helpResource.getString("cli.interface.copyright")); + System.out.println(helpResource.getString("cli.interface.mailto")); + } +} diff --git a/src/main/java/jp/sourceforge/stigmata/command/InstallCommand.java b/src/main/java/jp/sourceforge/stigmata/command/InstallCommand.java new file mode 100644 index 0000000..aa8ca7e --- /dev/null +++ b/src/main/java/jp/sourceforge/stigmata/command/InstallCommand.java @@ -0,0 +1,72 @@ +package jp.sourceforge.stigmata.command; + +/* + * $Id$ + */ + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import jp.sourceforge.stigmata.BirthmarkContext; +import jp.sourceforge.stigmata.BirthmarkEnvironment; +import jp.sourceforge.stigmata.Stigmata; + +/** + * + * @author Haruaki Tamada + * @version $Revision$ + */ +public class InstallCommand extends AbstractStigmataCommand{ + public boolean isAvailableArguments(String[] args){ + return args.length > 0; + } + + @Override + public String getCommandString(){ + return "install"; + } + + public void perform(Stigmata stigmata, BirthmarkContext context, String[] args){ + File pluginsDir = new File(BirthmarkEnvironment.getStigmataHome(), "plugins"); + BirthmarkEnvironment env = context.getEnvironment(); + + for(int i = 0; i < args.length; i++){ + File pluginSource = new File(args[i]); + File pluginDest = new File(pluginsDir, pluginSource.getName()); + + if(!pluginSource.getName().endsWith(".jar")){ + throw new IllegalArgumentException("plugin is allowed only jar archive: " + args[i]); + } + if(pluginDest.exists()){ + String override = env.getProperty("override.exists.plugin"); + if(override != null && (override.equalsIgnoreCase("true") || override.equalsIgnoreCase("yes"))){ + pluginDest.delete(); + } + else{ + File backupFile = new File(pluginDest.getParent(), pluginDest.getName() + ".back"); + if(backupFile.exists()) backupFile.delete(); + pluginDest.renameTo(backupFile); + } + } + + byte[] data = new byte[256]; + int read; + + try{ + InputStream in = new FileInputStream(pluginSource); + OutputStream out = new FileOutputStream(pluginDest); + + while((read = in.read(data)) != -1){ + out.write(data, 0, read); + } + in.close(); + out.close(); + } catch(IOException e){ + } + } + } +} diff --git a/src/main/java/jp/sourceforge/stigmata/command/LicenseCommand.java b/src/main/java/jp/sourceforge/stigmata/command/LicenseCommand.java new file mode 100644 index 0000000..a1f6912 --- /dev/null +++ b/src/main/java/jp/sourceforge/stigmata/command/LicenseCommand.java @@ -0,0 +1,40 @@ +package jp.sourceforge.stigmata.command; + +/* + * $Id$ + */ + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +import jp.sourceforge.stigmata.BirthmarkContext; +import jp.sourceforge.stigmata.Stigmata; + +/** + * + * @author Haruaki Tamada + * @version $Revision$ + */ +public class LicenseCommand extends AbstractStigmataCommand{ + @Override + public String getCommandString(){ + return "license"; + } + + public void perform(Stigmata stigmata, BirthmarkContext context, String[] args){ + try{ + InputStream in = getClass().getResourceAsStream("/META-INF/license.txt"); + BufferedReader reader = new BufferedReader(new InputStreamReader(in)); + String line; + + while((line = reader.readLine()) != null){ + System.out.println(line); + } + reader.close(); + }catch(IOException ex){ + ex.printStackTrace(); + } + } +} diff --git a/src/main/java/jp/sourceforge/stigmata/command/ListBirthmarksCommand.java b/src/main/java/jp/sourceforge/stigmata/command/ListBirthmarksCommand.java new file mode 100644 index 0000000..e71a522 --- /dev/null +++ b/src/main/java/jp/sourceforge/stigmata/command/ListBirthmarksCommand.java @@ -0,0 +1,54 @@ +package jp.sourceforge.stigmata.command; + +/* + * $Id$ + */ + +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; + +import jp.sourceforge.stigmata.BirthmarkContext; +import jp.sourceforge.stigmata.Stigmata; +import jp.sourceforge.stigmata.printer.BirthmarkServicePrinter; +import jp.sourceforge.stigmata.spi.BirthmarkSpi; +import jp.sourceforge.stigmata.spi.ResultPrinterSpi; + +/** + * + * @author Haruaki Tamada + * @version $Revision$ + */ +public class ListBirthmarksCommand extends AbstractStigmataCommand{ + @Override + public String getCommandString(){ + return "list-birthmarks"; + } + + public void perform(Stigmata stigmata, BirthmarkContext context, String[] args){ + BirthmarkSpi[] spis = context.getEnvironment().findServices(); + ResultPrinterSpi spi = stigmata.getPrinterManager().getService(context.getFormat()); + BirthmarkServicePrinter formatter = spi.getBirthmarkServicePrinter(); + + try{ + PrintWriter out; + if(args.length == 0){ + out = new PrintWriter(System.out); + } + else{ + String target = validateTarget(args[0], context.getFormat()); + out = new PrintWriter(new FileWriter(target)); + } + formatter.printResult(out, spis); + }catch(IOException e){ + e.printStackTrace(); + } + } + + private String validateTarget(String fileName, String format){ + if(!fileName.endsWith("." + format)){ + fileName = fileName + "." + format; + } + return fileName; + } +} diff --git a/src/main/java/jp/sourceforge/stigmata/command/StigmataCommandFactory.java b/src/main/java/jp/sourceforge/stigmata/command/StigmataCommandFactory.java new file mode 100644 index 0000000..63c6b61 --- /dev/null +++ b/src/main/java/jp/sourceforge/stigmata/command/StigmataCommandFactory.java @@ -0,0 +1,47 @@ +package jp.sourceforge.stigmata.command; + +/* + * $Id$ + */ + +import java.util.HashMap; +import java.util.Map; + +import jp.sourceforge.stigmata.StigmataCommand; + +/** + * + * @author Haruaki Tamada + * @version $Revision$ + */ +public class StigmataCommandFactory{ + private static final StigmataCommandFactory factory = new StigmataCommandFactory(); + private Map commands = new HashMap(); + + private StigmataCommandFactory(){ + commands.put("compare", new CompareCommand()); + commands.put("export-config", new ExportConfigCommand()); + commands.put("extract", new ExtractCommand()); + commands.put("gui", new GuiCommand()); + commands.put("install", new InstallCommand()); + commands.put("license", new LicenseCommand()); + commands.put("list-birthmarks", new ListBirthmarksCommand()); + /* this command is not supported in Windows OS. + * Deletion/Renaming is failed because plugin file is locked by system. + * commands.put("uninstall", new UninstallCommand()); + */ + commands.put("version", new VersionCommand()); + } + + public void registerCommand(String commandString, StigmataCommand command){ + commands.put(commandString, command); + } + + public static StigmataCommandFactory getInstance(){ + return factory; + } + + public StigmataCommand getCommand(String command){ + return commands.get(command); + } +} diff --git a/src/main/java/jp/sourceforge/stigmata/command/UninstallCommand.java b/src/main/java/jp/sourceforge/stigmata/command/UninstallCommand.java new file mode 100644 index 0000000..2b6246e --- /dev/null +++ b/src/main/java/jp/sourceforge/stigmata/command/UninstallCommand.java @@ -0,0 +1,95 @@ +package jp.sourceforge.stigmata.command; + +/* + * $Id$ + */ + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import jp.sourceforge.stigmata.BirthmarkContext; +import jp.sourceforge.stigmata.BirthmarkEnvironment; +import jp.sourceforge.stigmata.Stigmata; +import jp.sourceforge.stigmata.birthmarks.BirthmarkService; +import jp.sourceforge.stigmata.spi.BirthmarkSpi; +import jp.sourceforge.stigmata.utils.ConfigFileExporter; + +/** + * + * @author Haruaki Tamada + * @version $Revision$ + */ +@Deprecated +public class UninstallCommand extends AbstractStigmataCommand{ + + public boolean isAvailableArguments(String[] args){ + return args.length > 0; + } + + @Override + public String getCommandString(){ + return "uninstall"; + } + + public void perform(Stigmata stigmata, BirthmarkContext context, String[] args){ + File pluginsDir = new File(BirthmarkEnvironment.getStigmataHome(), "plugins"); + BirthmarkEnvironment env = context.getEnvironment(); + boolean removeServiceInConfigFile = false; + + for(int i = 0; i < args.length; i++){ + BirthmarkSpi service = env.getService(args[i]); + if(service instanceof BirthmarkService){ + env.removeService(args[i]); + removeServiceInConfigFile = true; + } + else{ + String fileName = getPluginFileNameOfService(context, service); + if(fileName != null){ + File pluginFile = new File(pluginsDir, fileName); + pluginFile.renameTo(new File(pluginFile.getParentFile(), pluginFile.getName() + ".back")); + } + } + } + if(removeServiceInConfigFile){ + updateConfigFile(env); + } + } + + private void updateConfigFile(BirthmarkEnvironment env){ + File configFile = new File(BirthmarkEnvironment.getStigmataHome(), "stigmata.xml"); + try{ + new ConfigFileExporter(env).export(new PrintWriter(new FileWriter(configFile))); + } catch(IOException e){ + e.printStackTrace(); + } + } + + private String getPluginFileNameOfService(BirthmarkContext context, BirthmarkSpi service){ + Class serviceClass = service.getClass(); + URL location = serviceClass.getResource("/" + serviceClass.getName().replace('.', '/') + ".class"); + + if(location != null){ + Pattern pattern = Pattern.compile("jar:(.*)/plugins/(.*.jar)!([a-zA-Z0-9$/.]+.class)"); + Matcher matcher = pattern.matcher(location.toString()); + + if(matcher.matches()){ + try{ + URL homeLocation = new File(BirthmarkEnvironment.getStigmataHome()).toURI().toURL(); + String matchedLocation = matcher.group(1) + "/"; + if(matchedLocation.equals(homeLocation.toString())){ + return matcher.group(2); + } + } catch(MalformedURLException e){ + e.printStackTrace(); + } + } + } + return null; + } +} diff --git a/src/main/java/jp/sourceforge/stigmata/command/VersionCommand.java b/src/main/java/jp/sourceforge/stigmata/command/VersionCommand.java new file mode 100644 index 0000000..3a657e2 --- /dev/null +++ b/src/main/java/jp/sourceforge/stigmata/command/VersionCommand.java @@ -0,0 +1,28 @@ +package jp.sourceforge.stigmata.command; + +/* + * $Id$ + */ + +import java.util.ResourceBundle; + +import jp.sourceforge.stigmata.BirthmarkContext; +import jp.sourceforge.stigmata.Stigmata; + +/** + * + * @author Haruaki Tamada + * @version $Revision$ + */ +public class VersionCommand extends AbstractStigmataCommand{ + @Override + public String getCommandString(){ + return "version"; + } + + public void perform(Stigmata stigmata, BirthmarkContext context, String[] args){ + ResourceBundle helpResource = ResourceBundle.getBundle("resources.options"); + Package p = getClass().getPackage(); + System.out.printf("%s %s%n", helpResource.getString("cli.version.header"), p.getImplementationVersion()); + } +} diff --git a/src/main/resources/resources/options.properties b/src/main/resources/resources/options.properties index 9203be5..46b7b26 100755 --- a/src/main/resources/resources/options.properties +++ b/src/main/resources/resources/options.properties @@ -1,9 +1,8 @@ cli.option.classpath=Append classpath. Separated with comma. cli.option.birthmark=Set target birthmarks separated with comma. If this option is not specified, following available birthmarks are specified. -cli.option.mode=Set running mode. Available values are `gui,' `list,' `extract,' `compare,' and `gui.' Default is `gui.' -cli.option.format=Set output report format. Available value is `csv' and `xml.' Default is `csv.' +cli.option.format=Set output report format. Available value is `csv' and `xml.' Default is `xml.' cli.option.filter=Filtering round robin result. This option is ignored when mode is not `compare.' -cli.option.config-file=Set configuration xml file. If you do not specified this option and you have `$HOME/.stimgata/birthmarks.xml,' this tool read it. +cli.option.config-file=Set configuration xml file. If this option was not specified, Stigmata read config file from `$STIGMATA_HOME/birthmarks.xml.' cli.option.reset-config=Reset configuration file. cli.option.export-config=Export configuration file to specified file or standard output. cli.option.help=Print this message. @@ -11,7 +10,7 @@ cli.option.license=Print license agreement. cli.option.version=Print version information. cli.option.extraction-unit=Extract birthmark from EXTRACT_UNIT. Available values are CLASS, PACKAGE, and ARCHIVE. Default is CLASS cli.option.store-target=This option represents how to store extracted birthmarks. Available values are MEMORY, and XMLFILE. -cli.interface=java -jar stigmata-%s.jar %nTARGETS is allowed as jar files, war files, class files, and classpath directory. +cli.interface=java -jar stigmata-%s.jar %nCOMMAND: available values are `install,' `export-config', `license,' `version,' `list-birthmarks,' `extract,' `compare,' and `gui.' Default is `gui.'%nTARGETS is allowed as jar files, war files, class files, and classpath directory. cli.interface.birthmarks=Available birthmarks: cli.interface.filters=Available filters: cli.interface.copyright=Copyright (C) by Haruaki Tamada, Ph.D. (Kyoto Sangyo University, Japan) diff --git a/src/main/resources/resources/options.xml b/src/main/resources/resources/options.xml index fd3a060..9f2883b 100755 --- a/src/main/resources/resources/options.xml +++ b/src/main/resources/resources/options.xml @@ -22,14 +22,6 @@ - - m - mode - $(cli.option.mode) - REQUIRED - MODE - - f format @@ -59,34 +51,6 @@ NONE - - export-config - $(cli.option.export-config) - OPTIONAL - FILE - - - - h - help - $(cli.option.help) - NONE - - - - l - license - $(cli.option.license) - NONE - - - - v - version - $(cli.option.version) - NONE - - e extraction-unit @@ -104,7 +68,6 @@ - @@ -113,11 +76,6 @@ - - - - - diff --git a/src/main/resources/resources/options_ja.source b/src/main/resources/resources/options_ja.source index 7dd1d13..9df651b 100755 --- a/src/main/resources/resources/options_ja.source +++ b/src/main/resources/resources/options_ja.source @@ -1,17 +1,16 @@ cli.option.classpath=‚±‚̃IƒvƒVƒ‡ƒ“‚̈ø”‚ðƒNƒ‰ƒXƒpƒX‚ɒljÁ‚µ‚Ü‚·D ˆø”‚̓Rƒ“ƒ}‚Å‹æØ‚è‚Ü‚·D cli.option.birthmark=’Šo‚·‚éƒo[ƒXƒ}[ƒN‚ðŽw’肵‚Ü‚·D -cli.option.mode=ŽÀsƒ‚[ƒh‚ðŽw’肵‚Ü‚·Dˆø”‚ɉ½‚àŽw’肵‚È‚¯‚ê‚Î `gui' ‚ªŽw’肳‚ꂽ‚Æ‚Ý‚È‚µC GUIƒ‚[ƒh‚Å—§‚¿ã‚ª‚è‚Ü‚·D —LŒø‚È’l‚Í `gui,' `list,' `extract,' `compare,' ‚Å‚·D -cli.option.format=ƒŒƒ|[ƒg‚̏o—ÍŒ`Ž®‚ðŽw’肵‚Ü‚·D `csv' ‚à‚µ‚­‚Í `xml' ‚Ì‚Ý‚ª—LŒø‚Å‚·D ‚±‚̃IƒvƒVƒ‡ƒ“‚ªŽw’肳‚ê‚È‚¢ê‡‚Í `csv' ‚ªŽw’肳‚ꂽ‚Æ‚Ý‚È‚µ‚Ü‚·D +cli.option.format=ƒŒƒ|[ƒg‚̏o—ÍŒ`Ž®‚ðŽw’肵‚Ü‚·D `csv' ‚à‚µ‚­‚Í `xml' ‚Ì‚Ý‚ª—LŒø‚Å‚·D ‚±‚̃IƒvƒVƒ‡ƒ“‚ªŽw’肳‚ê‚È‚¢ê‡‚Í `xml' ‚ªŽw’肳‚ꂽ‚Æ‚Ý‚È‚µ‚Ü‚·D cli.option.filter=‘“–‚½‚è”äŠrŒ‹‰Ê‚É‚©‚¯‚éƒtƒBƒ‹ƒ^‚ðŽw’肵‚Ü‚·D ‚±‚̃IƒvƒVƒ‡ƒ“‚ÍŽÀsƒ‚[ƒh‚ª `compare' ˆÈŠO‚Ì‚Æ‚«‚Í–³Ž‹‚³‚ê‚Ü‚·D -cli.option.config-file=‰ŠúÝ’èƒtƒ@ƒCƒ‹‚ðŽw’肵‚Ü‚·D ‚±‚̃IƒvƒVƒ‡ƒ“‚ªŽw’肳‚ê‚È‚¢ê‡‚̓z[ƒ€ƒfƒBƒŒƒNƒgƒŠã‚Ì `.stigmata/stigmata.xml' ‚ªŽw’肳‚ꂽ‚Æ‚Ý‚È‚µ‚Ü‚·D +cli.option.config-file=‰ŠúÝ’èƒtƒ@ƒCƒ‹‚ðŽw’肵‚Ü‚·D ‚±‚̃IƒvƒVƒ‡ƒ“‚ªŽw’肳‚ê‚È‚¢ê‡‚Í `$STIGMATA_HOME/stigmata.xml' ‚ªŽw’肳‚ꂽ‚Æ‚Ý‚È‚µ‚Ü‚·D cli.option.reset-config=Œ»Ý‚̐ݒèƒtƒ@ƒCƒ‹‚ð”jŠü‚µC ‰ŠúÝ’è‚É–ß‚µ‚Ü‚·D cli.option.export-config=Œ»Ý‚̐ݒè‚ð•W€o—͂ɏ‘‚«o‚µ‚Ü‚·D cli.option.help=‚±‚̃ƒbƒZ[ƒW‚ð•\Ž¦‚µ‚Ü‚·D cli.option.license=Stigmata‚̃‰ƒCƒZƒ“ƒX‚ð•\Ž¦‚µ‚Ü‚·D cli.option.version=Stigmata‚̃o[ƒWƒ‡ƒ“î•ñ‚ð•\Ž¦‚µ‚Ü‚·D -cli.option.extraction-unit=ƒo[ƒXƒ}[ƒN’Šo‚Ì’PˆÊ‚ðŽw’肵‚Ü‚·D ‚±‚̃IƒvƒVƒ‡ƒ“‚ªŽw’肳‚ê‚È‚¢ê‡C `CLASS' ‚ªŽw’肳‚ꂽ‚Æ‚Ý‚È‚µ‚Ü‚·D —LŒø‚È’l‚Í`CLASS,' `PACKAGE,' `ARCHIVE'‚Å‚·D +cli.option.extraction-unit=ƒo[ƒXƒ}[ƒN’Šo‚Ì’PˆÊ‚ðŽw’肵‚Ü‚·D ƒfƒtƒHƒ‹ƒg‚Í `CLASS' ‚Å‚·D —LŒø‚È’l‚Í`CLASS,' `PACKAGE,' `ARCHIVE'‚Å‚·D cli.option.store-target=ƒo[ƒXƒ}[ƒN‚ÌŠi”[•û–@‚ðŽw’肵‚Ü‚·D —LŒø‚È’l‚Í `MEMORY,' `XMLFILE'‚Å‚·D ‚±‚̃IƒvƒVƒ‡ƒ“‚͐ݒèƒtƒ@ƒCƒ‹‚Å‚àŽw’è‚·‚邱‚Æ‚ª‰Â”\‚Å‚·D -cli.interface=java -jar stigmata-%s.jar %nTARGETS‚É‚Íjarƒtƒ@ƒCƒ‹Cwarƒtƒ@ƒCƒ‹CƒNƒ‰ƒXƒtƒ@ƒCƒ‹‚âƒfƒBƒŒƒNƒgƒŠ‚ªŽw’è‰Â”\‚Å‚·D +cli.interface=java -jar stigmata-%s.jar %n—LŒø‚ȃRƒ}ƒ“ƒh: gui, list-birthmarks, install, extract, compare, export-config, help, license, version%nTARGETS‚É‚Íjarƒtƒ@ƒCƒ‹Cwarƒtƒ@ƒCƒ‹CƒNƒ‰ƒXƒtƒ@ƒCƒ‹‚âƒfƒBƒŒƒNƒgƒŠ‚ªŽw’è‰Â”\‚Å‚·D cli.interface.birthmarks=Žw’è‰Â”\‚ȃo[ƒXƒ}[ƒN: cli.interface.filters=Žw’è‰Â”\‚ȃtƒBƒ‹ƒ^: cli.interface.copyright=Copyright (C) by Haruaki Tamada, Ph.D. (Kyoto Sangyo University) diff --git a/src/main/resources/resources/stigmata.xml b/src/main/resources/resources/stigmata.xml index 55fecb5..187b056 100755 --- a/src/main/resources/resources/stigmata.xml +++ b/src/main/resources/resources/stigmata.xml @@ -238,6 +238,10 @@ $Id$ birthmark.store.target MEMORY + + override.exists.plugin + yes +