<modelVersion>4.0.0</modelVersion>
<groupId>jp.naist.se</groupId>
<artifactId>stigmata</artifactId>
- <version>1.2.0-SNAPSHOT</version>
+ <version>1.2.0</version>
<name>stigmata</name>
<description>Java birthmark toolkit</description>
<url>http://stigmata.sourceforge.jp/</url>
\r
public static synchronized final String getStigmataHome(){\r
if(HOME_DIRECTORY_PATH == null){\r
- String stigmataHome = System.getenv("STIGMATA_HOME");\r
+ String stigmataHome = System.getProperty("stigmata.home");\r
+ if(stigmataHome == null){\r
+ stigmataHome = System.getenv("STIGMATA_HOME");\r
+ }\r
if(stigmataHome == null){\r
String parent = System.getenv("HOME");\r
if(parent == null){\r
if(parent == null){\r
parent = ".";\r
}\r
+ // for windows\r
if(parent.startsWith("C:\\Document and Settings\\")){\r
stigmataHome = parent + File.separator + "Application Data" + File.separator + "stigmata";\r
}\r
this.context = context;\r
}\r
\r
+ /**\r
+ * returns a birthmark environment.\r
+ */\r
public BirthmarkEnvironment getEnvironment(){\r
return context.getEnvironment();\r
}\r
\r
+ /**\r
+ * returns a birthmark context.\r
+ */\r
public BirthmarkContext getContext(){\r
return context;\r
}\r
\r
public abstract Iterator<BirthmarkSet> birthmarkSets(ExtractionTarget target);\r
\r
+ /**\r
+ * returns the sum of birthmark set size this instance has.\r
+ * <code>getBirthmarkSetSize(ExtractionTarget.TARGET_BOTH)</code>\r
+ */\r
public int getBirthmarkSetSize(){\r
return getBirthmarkSetSize(ExtractionTarget.TARGET_BOTH);\r
}\r
\r
+ /**\r
+ * returns an iterator.\r
+ * <code>birthmarkSets(ExtractionTarget.TARGET_BOTH)</code>\r
+ */\r
public Iterator<BirthmarkSet> iterator(){\r
return birthmarkSets(ExtractionTarget.TARGET_BOTH);\r
}\r
\r
+ /**\r
+ * returns a birthmark set related of given index.\r
+ * <code>getBirthmarkSet(ExtractionTarget.TARGET_BOTH, index)</code>\r
+ */\r
public BirthmarkSet getBirthmarkSet(int index){\r
return getBirthmarkSet(ExtractionTarget.TARGET_BOTH, index);\r
}\r
\r
+ /**\r
+ * returns a birthmark set related with given name.\r
+ * <code>getBirthmarkSet(ExtractionTarget.TARGET_BOTH, name)</code>\r
+ */\r
public BirthmarkSet getBirthmarkSet(String name){\r
return getBirthmarkSet(ExtractionTarget.TARGET_BOTH, name);\r
}\r
\r
+ /**\r
+ * returns all of birthmark sets.\r
+ * <code>getBirthmarkSets(ExtractionTarget.TARGET_BOTH)</code>\r
+ */\r
public BirthmarkSet[] getBirthmarkSets(){\r
return getBirthmarkSets(ExtractionTarget.TARGET_BOTH);\r
}\r
\r
+ /**\r
+ * remove specified birthmark set from this instance.\r
+ * <code>removeBirthmarkSet(ExtractionTarget.TARGET_BOTH, bs)</code>\r
+ */\r
public void removeBirthmarkSet(BirthmarkSet bs){\r
removeBirthmarkSet(ExtractionTarget.TARGET_BOTH, bs);\r
}\r
\r
+ /**\r
+ * remove all of birthmark sets.\r
+ * <code>removeBirthmarkSet(ExtractionTarget.TARGET_BOTH)</code>\r
+ */\r
public void removeAllBirthmarkSets(){\r
removeAllBirthmarkSets(ExtractionTarget.TARGET_BOTH);\r
}\r
\r
+ /**\r
+ * returns an array of extracted birthmark types.\r
+ */\r
public String[] getBirthmarkTypes(){\r
return context.getBirthmarkTypes();\r
}\r
\r
+ /**\r
+ * returns an unit of extraction from.\r
+ */\r
public ExtractionUnit getExtractionUnit(){\r
return context.getExtractionUnit();\r
}\r
\r
+ /**\r
+ * returns the birthmark set at the specified position in the specified target. \r
+ */\r
public BirthmarkSet getBirthmarkSet(ExtractionTarget target, int index){\r
int currentIndex = 0;\r
for(Iterator<BirthmarkSet> i = birthmarkSets(target); i.hasNext(); ){\r
return null;\r
}\r
\r
+ /**\r
+ * returns the birthmark set related with the specified name in the specified target.\r
+ */\r
public BirthmarkSet getBirthmarkSet(ExtractionTarget target, String setname){\r
for(Iterator<BirthmarkSet> i = birthmarkSets(target); i.hasNext(); ){\r
BirthmarkSet bs = i.next();\r
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventReader;
import jp.naist.se.stigmata.Stigmata;
import jp.naist.se.stigmata.printer.xml.ExtractionResultSetXmlPrinter;
import jp.naist.se.stigmata.spi.BirthmarkSpi;
+import jp.naist.se.stigmata.ui.swing.ExtensionFilter;
+import jp.naist.se.stigmata.utils.MultipleIterator;
/**
* This class manages extracted birthmarks as xml file.
* @version $Revision$ $Date$
*/
public class XmlFileExtractionResultSet extends AbstractExtractionResultSet{
- private List<URL> addList = new ArrayList<URL>();
private boolean addmode = true;
- private int size;
- private ExtractionResultSetXmlPrinter formatter;
- private File targetFile;
- private PrintWriter out;
-
- public XmlFileExtractionResultSet(BirthmarkContext context, boolean tableType){
- super(context, tableType);
-
- createTargetFile();
- }
+ private File baseDirectory;
+ private Map<ExtractionTarget, XmlFile> files = new HashMap<ExtractionTarget, XmlFile>();
public XmlFileExtractionResultSet(BirthmarkContext context){
super(context);
+ }
- createTargetFile();
+ public XmlFileExtractionResultSet(BirthmarkContext context, boolean tableType){
+ super(context, tableType);
}
- public XmlFileExtractionResultSet(File file){
+ public XmlFileExtractionResultSet(File directory){
super(Stigmata.getInstance().createContext());
+
addmode = false;
- addList = null;
- size = -1;
- targetFile = file;
+ baseDirectory = directory;
- getContext().setStoreTarget(BirthmarkStoreTarget.XMLFILE);
- getContext().setComparisonMethod(ComparisonMethod.ROUND_ROBIN_SAME_PAIR);
- }
+ BirthmarkContext context = getContext();
+ context.setStoreTarget(BirthmarkStoreTarget.XMLFILE);
+ if(files.containsKey(ExtractionTarget.TARGET_X)
+ && files.containsKey(ExtractionTarget.TARGET_Y)){
+ context.setComparisonMethod(ComparisonMethod.ROUND_ROBIN_XY);
+ }
+ else{
+ context.setComparisonMethod(ComparisonMethod.ROUND_ROBIN_SAME_PAIR);
+ }
- public BirthmarkStoreTarget getStoreTarget(){
- return BirthmarkStoreTarget.XMLFILE;
+ for(File file: baseDirectory.listFiles(new ExtensionFilter("xml"))){
+ String fileName = file.getName();
+ String name = fileName.substring(0, fileName.lastIndexOf('.'));
+ ExtractionTarget et = ExtractionTarget.valueOf(name);
+ if(et != null){
+ files.put(et, new XmlFile(file, context, false));
+ }
+ }
}
@Override
public void addBirthmarkSet(ExtractionTarget target, BirthmarkSet set) throws BirthmarkStoreException{
if(addmode){
- if(formatter == null){
- try{
- out = new PrintWriter(new FileWriter(targetFile));
- formatter = new ExtractionResultSetXmlPrinter();
- formatter.printHeader(out);
- }catch(IOException e){
- }
+ if(target == ExtractionTarget.TARGET_BOTH){
+ throw new IllegalArgumentException("unknown target: " + target);
}
- if(out == null || formatter == null){
- throw new BirthmarkStoreException("destination is closed on some reason");
+ XmlFile xml = files.get(target);
+ if(xml == null){
+ xml = new XmlFile(new File(getBaseDirectory(), target.name() + ".xml"), getContext());
+ files.put(target, xml);
}
- size++;
- addList.add(set.getLocation());
- formatter.printBirthmarkSet(out, set);
+ xml.addBirthmarkSet(set);
}
else{
throw new BirthmarkStoreException("destination is already closed.");
@Override
public Iterator<BirthmarkSet> birthmarkSets(ExtractionTarget target){
- checkMode();
+ closeAllStream();
+
+ XmlFile xml = files.get(target);
+ Iterator<BirthmarkSet> iterator;
+ if(xml != null){
+ iterator = xml.birthmarkSets();
+ }
+ else if(target == ExtractionTarget.TARGET_BOTH){
+ MultipleIterator<BirthmarkSet> mi = new MultipleIterator<BirthmarkSet>();
+ boolean addflag = false;
+ if(files.containsKey(ExtractionTarget.TARGET_X)){
+ addflag = true;
+ mi.add(files.get(ExtractionTarget.TARGET_X).birthmarkSets());
+ }
+ if(files.containsKey(ExtractionTarget.TARGET_Y)){
+ addflag = true;
+ mi.add(files.get(ExtractionTarget.TARGET_Y).birthmarkSets());
+ }
+ if(!addflag && files.containsKey(ExtractionTarget.TARGET_XY)){
+ mi.add(files.get(ExtractionTarget.TARGET_XY).birthmarkSets());
+ }
+ iterator = mi;
+ }
+ else{
+ iterator = null;
+ }
- return new BirthmarkSetStAXIterator(targetFile, addList, getContext());
+ return iterator;
}
@Override
public int getBirthmarkSetSize(ExtractionTarget target){
+ int size = 0;
+ XmlFile xml = files.get(target);
+ if(xml != null){
+ size = xml.getBirthmarkSetSize();
+ }
+ else if(target == ExtractionTarget.TARGET_BOTH){
+ if(files.containsKey(ExtractionTarget.TARGET_X)){
+ size += files.get(ExtractionTarget.TARGET_X).getBirthmarkSetSize();
+ }
+ if(files.containsKey(ExtractionTarget.TARGET_Y)){
+ size += files.get(ExtractionTarget.TARGET_Y).getBirthmarkSetSize();
+ }
+ if(size == 0 && files.containsKey(ExtractionTarget.TARGET_XY)){
+ size += files.get(ExtractionTarget.TARGET_XY).getBirthmarkSetSize();
+ }
+ }
return size;
}
+ public BirthmarkStoreTarget getStoreTarget(){
+ return BirthmarkStoreTarget.XMLFILE;
+ }
+
@Override
public void removeAllBirthmarkSets(ExtractionTarget target){
- targetFile.delete();
- size = 0;
- addList.clear();
+ XmlFile xml = files.get(target);
+ if(xml != null){
+ xml.removeAllBirthmarkSets();
+ }
+ else if(target == ExtractionTarget.TARGET_BOTH){
+ for(XmlFile file: files.values()){
+ file.removeAllBirthmarkSets();
+ }
+ }
}
@Override
public void removeBirthmarkSet(ExtractionTarget target, BirthmarkSet set){
- boolean removeFlag = addList.remove(set.getLocation());
- if(removeFlag){
- size--;
+ XmlFile xml = files.get(target);
+ if(xml != null){
+ xml.removeBirthmarkSet(set);
+ }
+ else if(target == ExtractionTarget.TARGET_BOTH){
+ throw new IllegalArgumentException("unknown target: " + target);
}
}
- private void createTargetFile(){
- targetFile = new File(BirthmarkEnvironment.getStigmataHome(), "extracted_birthmarks/" + generateId() + ".xml");
- if(!targetFile.getParentFile().exists()){
- targetFile.getParentFile().mkdirs();
+ private File getBaseDirectory(){
+ if(baseDirectory == null){
+ baseDirectory = new File(BirthmarkEnvironment.getStigmataHome(), "extracted_birthmarks/" + generateId());
+ if(!baseDirectory.exists()){
+ baseDirectory.mkdirs();
+ }
}
+ return baseDirectory;
}
- private synchronized void checkMode(){
+ private void closeAllStream(){
if(addmode){
addmode = false;
- formatter.printFooter(out);
- out.close();
- out = null;
- formatter = null;
+ for(XmlFile file: files.values()){
+ file.closeStream();
+ }
}
}
+ /**
+ * Iterator class for reading birthmark xml file by StAX.
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
private static class BirthmarkSetStAXIterator implements Iterator<BirthmarkSet>{
private XMLEventReader reader = null;
private BirthmarkSet nextObject;
}
private BirthmarkSet findNext() throws XMLStreamException{
+ BirthmarkSet nextObject = null;
+ do{
+ nextObject = findNextImpl();
+ } while(nextObject != null && validItems != null && !validItems.contains(nextObject.getLocation()));
+ return nextObject;
+ }
+
+ private BirthmarkSet findNextImpl() throws XMLStreamException{
String className = null;
BirthmarkSet bs = null;
Birthmark birthmark = null;
}
try{
URL url = new URL(location);
- if(validItems == null || !validItems.contains(url)){
- while(reader.hasNext()){
- XMLEvent xmlevent = reader.nextTag();
- if(xmlevent.isEndElement() &&
- xmlevent.asEndElement().getName().getLocalPart().equals("extracted-birthmark")){
- break;
- }
- }
- continue;
- }
bs = new BirthmarkSet(className, url);
} catch(MalformedURLException e){
e.printStackTrace();
return bs;
}
}
+
+ /**
+ * This class represents a xml file about XmlFileExtractionResultSet.
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+ private static class XmlFile{
+ private ExtractionResultSetXmlPrinter formatter;
+ private BirthmarkContext context;
+ private List<URL> addList = new ArrayList<URL>();
+ private int size;
+ private File file;
+ private PrintWriter out;
+
+ public XmlFile(File file, BirthmarkContext context){
+ this.file = file;
+ this.context = context;
+ }
+
+ public XmlFile(File file, BirthmarkContext context, boolean addflag){
+ this.file = file;
+ this.context = context;
+ if(!addflag){
+ addList = null;
+ }
+ }
+
+ public void addBirthmarkSet(BirthmarkSet bs) throws BirthmarkStoreException{
+ if(formatter == null){
+ try{
+ out = new PrintWriter(new FileWriter(file));
+ formatter = new ExtractionResultSetXmlPrinter();
+ formatter.printHeader(out);
+ out.printf(" <unit>%s</unit>%n", context.getExtractionUnit());
+ out.printf(" <birthmark-types>%n");
+ for(String type: context.getBirthmarkTypes()){
+ out.printf(" <birthmark-type>%s</birthmark-type>%n", type);
+ }
+ out.printf(" </birthmark-types>%n");
+
+ }catch(IOException e){
+ }
+ }
+ if(out == null || formatter == null){
+ throw new BirthmarkStoreException("destination is closed on some reason");
+ }
+ size++;
+ addList.add(bs.getLocation());
+ formatter.printBirthmarkSet(out, bs);
+ }
+
+ public Iterator<BirthmarkSet> birthmarkSets(){
+ return new BirthmarkSetStAXIterator(file, addList, context);
+ }
+
+ public void closeStream(){
+ if(formatter != null){
+ formatter.printFooter(out);
+ out.close();
+ out = null;
+ formatter = null;
+ }
+ }
+
+ public int getBirthmarkSetSize(){
+ if(size == 0){
+ int s = 0;
+ for(Iterator<BirthmarkSet> i = birthmarkSets(); i.hasNext(); ){
+ i.next();
+ s++;
+ }
+ size = s;
+ }
+ return size;
+ }
+
+ public void removeAllBirthmarkSets(){
+ file.delete();
+ size = 0;
+ addList.clear();
+ }
+
+ public void removeBirthmarkSet(BirthmarkSet set){
+ boolean removeFlag = addList.remove(set.getLocation());
+ if(removeFlag){
+ size--;
+ }
+ }
+ }
}
--- /dev/null
+package jp.naist.se.stigmata.result.history;
+
+/*
+ * $Id$
+ */
+
+import java.util.Iterator;
+
+import jp.naist.se.stigmata.ExtractionResultSet;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public interface ExtractedBirthmarkHistory extends Iterable<String>{
+ /**
+ * returns a list of histor ids as iterator.
+ */
+ public Iterator<String> iterator();
+
+ /**
+ * returns an array of history ids.
+ */
+ public String[] getIds();
+
+ /**
+ * returns an extraction result set corresponding id.
+ */
+ public ExtractionResultSet getExtractionResultSet(String id);
+
+ /**
+ * deletes all histories this instance is managed.
+ */
+ public void deleteAll();
+
+ /**
+ * deletes an extraction result set corresponding id.
+ */
+ public void delete(String id);
+
+ /**
+ * refreshes histories.
+ */
+ public void refresh();
+}
--- /dev/null
+package jp.naist.se.stigmata.result.history;
+
+/*
+ * $Id$
+ */
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import jp.naist.se.stigmata.BirthmarkEnvironment;
+import jp.naist.se.stigmata.BirthmarkStoreTarget;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class ExtractedBirthmarkHistoryManager{
+ private static Map<BirthmarkStoreTarget, Class<? extends ExtractedBirthmarkHistory>> TARGETS = new HashMap<BirthmarkStoreTarget, Class<? extends ExtractedBirthmarkHistory>>();
+ private BirthmarkEnvironment env;
+
+ static{
+ TARGETS.put(BirthmarkStoreTarget.XMLFILE, XmlFileExtractedBirthmarkHistory.class);
+ }
+
+ public ExtractedBirthmarkHistoryManager(BirthmarkEnvironment env){
+ this.env = env;
+ }
+
+ public ExtractedBirthmarkHistory getHistory(String id){
+ int index = id.indexOf(":");
+ String type = id.substring(0, index);
+ BirthmarkStoreTarget bst = BirthmarkStoreTarget.valueOf(type);
+ String path = id.substring(index + 1);
+
+ try{
+ Class<? extends ExtractedBirthmarkHistory> historyClass = TARGETS.get(bst);
+ Constructor<? extends ExtractedBirthmarkHistory> constructor = historyClass.getConstructor(String.class);
+ return constructor.newInstance(path);
+ } catch(IllegalArgumentException e){
+ } catch(InstantiationException e){
+ } catch(IllegalAccessException e){
+ } catch(InvocationTargetException e){
+ } catch(SecurityException e){
+ } catch(NoSuchMethodException e){
+ }
+ return null;
+ }
+
+ public synchronized String[] getHistoryIds(){
+ List<String> values = new ArrayList<String>();
+ addValuesFromProperty(values);
+ addValuesFromSystemFile(values);
+
+ char separator = File.separatorChar;
+ values.add(
+ "XMLFILE:" + BirthmarkEnvironment.getStigmataHome()
+ + separator + "extracted_birthmarks"
+ );
+ return values.toArray(new String[values.size()]);
+ }
+
+ private void addValuesFromSystemFile(List<String> values){
+ File file = new File(BirthmarkEnvironment.getStigmataHome(), "storelocations.txt");
+ if(file.exists()){
+ try{
+ BufferedReader in = new BufferedReader(new FileReader(file));
+ String line;
+ while((line = in.readLine()) != null){
+ values.add(line);
+ }
+ } catch(IOException e){
+ }
+ }
+ }
+
+ private void addValuesFromProperty(List<String> values){
+ String path = env.getProperty("extracted.birthmark.store.locations");
+ if(path != null){
+ addValuesFromProperty(values);
+ String[] paths = path.split(", *");
+ for(String p: paths){
+ values.add(p);
+ }
+ }
+ }
+}
--- /dev/null
+package jp.naist.se.stigmata.result.history;
+
+/*
+ * $Id$
+ */
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import jp.naist.se.stigmata.BirthmarkEnvironment;
+import jp.naist.se.stigmata.ExtractionResultSet;
+import jp.naist.se.stigmata.result.XmlFileExtractionResultSet;
+import jp.naist.se.stigmata.utils.Utility;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class XmlFileExtractedBirthmarkHistory implements ExtractedBirthmarkHistory{
+ private File parent;
+ private Map<String, File> files = new LinkedHashMap<String, File>();
+
+ public XmlFileExtractedBirthmarkHistory(){
+ this(new File(BirthmarkEnvironment.getStigmataHome(), "extracted_birthmarks"));
+ }
+
+ public XmlFileExtractedBirthmarkHistory(String path){
+ this(new File(path));
+ }
+
+ public XmlFileExtractedBirthmarkHistory(File parent){
+ this.parent = parent;
+
+ refresh();
+ }
+
+ public void refresh(){
+ files.clear();
+
+ for(File file: parent.listFiles()){
+ if(isTarget(file)){
+ files.put(file.getName(), file);
+ }
+ }
+ }
+
+ public void deleteAll(){
+ for(File file: parent.listFiles()){
+ if(isTarget(file)){
+ Utility.deleteDirectory(file);
+ }
+ }
+ }
+
+ public void delete(String id){
+ File file = files.get(id);
+ if(file != null){
+ if(file.isDirectory()){
+ Utility.deleteDirectory(file);
+ }
+ else{
+ file.delete();
+ }
+ }
+ }
+
+ public ExtractionResultSet getExtractionResultSet(String id){
+ File file = files.get(id);
+ if(file != null){
+ return new XmlFileExtractionResultSet(file);
+ }
+ return null;
+ }
+
+ public synchronized String[] getIds(){
+ return files.keySet().toArray(new String[files.size()]);
+ }
+
+ public Iterator<String> iterator(){
+ return files.keySet().iterator();
+ }
+
+ private boolean isTarget(File file){
+ return file.isDirectory()
+ && file.getName().matches("\\d\\d\\d\\d\\d\\d\\d\\d-\\d\\d\\d\\d\\d\\d.\\d\\d\\d");
+ }
+}
panel.add(information = new InformationPane(stigmata, this), BorderLayout.CENTER);\r
\r
Box buttonPanel = Box.createHorizontalBox();\r
- newService = Utility.createButton("newservice");\r
- removeService = Utility.createButton("removeservice");\r
+ newService = GUIUtility.createButton("newservice");\r
+ removeService = GUIUtility.createButton("removeservice");\r
buttonPanel.add(Box.createHorizontalGlue());\r
buttonPanel.add(newService);\r
buttonPanel.add(Box.createHorizontalGlue());\r
add(scroll);\r
add(Box.createVerticalGlue());\r
\r
- Utility.decorateJComponent(type, "define.type");\r
- Utility.decorateJComponent(displayType, "define.displaytype");\r
- Utility.decorateJComponent(scroll, "define.description");\r
- Utility.decorateJComponent(extractor, "define.extractor");\r
- Utility.decorateJComponent(comparator, "define.comparator");\r
- Utility.decorateJComponent(expert, "define.expert");\r
- Utility.decorateJComponent(userDefined, "define.userdef");\r
+ GUIUtility.decorateJComponent(type, "define.type");\r
+ GUIUtility.decorateJComponent(displayType, "define.displaytype");\r
+ GUIUtility.decorateJComponent(scroll, "define.description");\r
+ GUIUtility.decorateJComponent(extractor, "define.extractor");\r
+ GUIUtility.decorateJComponent(comparator, "define.comparator");\r
+ GUIUtility.decorateJComponent(expert, "define.expert");\r
+ GUIUtility.decorateJComponent(userDefined, "define.userdef");\r
\r
userDefined.setEnabled(false);\r
expert.setEnabled(false);\r
*/\r
\r
import java.awt.BorderLayout;\r
+import java.awt.event.ActionEvent;\r
import java.io.PrintWriter;\r
\r
+import javax.swing.AbstractAction;\r
+import javax.swing.Action;\r
import javax.swing.Box;\r
import javax.swing.JButton;\r
import javax.swing.JComponent;\r
import javax.swing.JPanel;\r
+import javax.swing.JPopupMenu;\r
import javax.swing.JScrollPane;\r
\r
import jp.naist.se.stigmata.ExtractionResultSet;\r
import jp.naist.se.stigmata.printer.ExtractionResultSetPrinter;\r
import jp.naist.se.stigmata.printer.PrinterManager;\r
import jp.naist.se.stigmata.spi.ResultPrinterSpi;\r
+import jp.naist.se.stigmata.ui.swing.actions.PopupShowAction;\r
import jp.naist.se.stigmata.ui.swing.actions.SaveAction;\r
import jp.naist.se.stigmata.utils.AsciiDataWritable;\r
\r
this.frame = stigmataFrame;\r
this.extraction = ers;\r
\r
- JComponent southPanel = Box.createHorizontalBox(); \r
- JButton saveButton = Utility.createButton("savebirthmark", new SaveAction(frame, new AsciiDataWritable(){\r
+ initLayouts();\r
+ }\r
+\r
+ private void initLayouts(){\r
+ JComponent southPanel = Box.createHorizontalBox();\r
+ Action saveAction = new SaveAction(frame, new AsciiDataWritable(){\r
public void writeAsciiData(PrintWriter out, String format){\r
ResultPrinterSpi service = PrinterManager.getInstance().getService(format);\r
if(service == null){\r
ExtractionResultSetPrinter list = service.getExtractionResultSetPrinter();\r
list.printResult(new PrintWriter(out), extraction);\r
}\r
- }));\r
- JScrollPane scroll = new JScrollPane();\r
+ });\r
+ Action compareAction = new AbstractAction(){\r
+ private static final long serialVersionUID = -1938101718384412339L;\r
+\r
+ public void actionPerformed(ActionEvent e){\r
+ frame.compareExtractionResult(extraction);\r
+ }\r
+ };\r
+ JButton saveButton = GUIUtility.createButton("savebirthmark", saveAction);\r
+ JButton compareButton = GUIUtility.createButton("comparebirthmark", compareAction);\r
\r
- scroll.setViewportView(new BirthmarkTree(ers.getBirthmarkSets(ExtractionTarget.TARGET_BOTH)));\r
+ JPopupMenu popup = new JPopupMenu();\r
+ popup.add(GUIUtility.createJMenuItem("savebirthmark", saveAction));\r
+ popup.add(GUIUtility.createJMenuItem("comparebirthmark", compareAction));\r
+\r
+ JScrollPane scroll = new JScrollPane();\r
+ scroll.setViewportView(new BirthmarkTree(extraction.getBirthmarkSets(ExtractionTarget.TARGET_BOTH)));\r
\r
setLayout(new BorderLayout());\r
+ add(popup);\r
add(scroll, BorderLayout.CENTER);\r
add(southPanel, BorderLayout.SOUTH);\r
southPanel.add(Box.createHorizontalGlue());\r
southPanel.add(saveButton);\r
southPanel.add(Box.createHorizontalGlue());\r
+ southPanel.add(compareButton);\r
+ southPanel.add(Box.createHorizontalGlue());\r
+\r
+ addMouseListener(new PopupShowAction(popup));\r
}\r
}\r
setLayout(new BorderLayout());\r
add(checks, BorderLayout.CENTER);\r
\r
- JButton checkAll = Utility.createButton("checkall");\r
- JButton uncheckAll = Utility.createButton("uncheckall");\r
+ JButton checkAll = GUIUtility.createButton("checkall");\r
+ JButton uncheckAll = GUIUtility.createButton("uncheckall");\r
\r
Box box = Box.createHorizontalBox();\r
box.add(Box.createHorizontalGlue());\r
add(scroll, BorderLayout.CENTER);\r
list.setCellRenderer(new Renderer());\r
list.setVisibleRowCount(5);\r
- JButton checkAll = Utility.createButton("checkall");\r
- JButton uncheckAll = Utility.createButton("uncheckall");\r
+ JButton checkAll = GUIUtility.createButton("checkall");\r
+ JButton uncheckAll = GUIUtility.createButton("uncheckall");\r
\r
Box box = Box.createHorizontalBox();\r
box.add(Box.createHorizontalGlue());\r
classpath = new TargetSelectionPane(stigmata);\r
bootClasspath = new TargetSelectionPane(stigmata);\r
JComponent south = Box.createHorizontalBox();\r
- final JButton findButton = Utility.createButton("findclass");\r
+ final JButton findButton = GUIUtility.createButton("findclass");\r
final JTextField text = new JTextField();\r
final JLabel label = new JLabel();\r
\r
\r
south.setBorder(new TitledBorder(Messages.getString("classpathchecker.border")));\r
\r
- label.setIcon(Utility.getIcon("classpathchecker.default.icon"));\r
+ label.setIcon(GUIUtility.getIcon("classpathchecker.default.icon"));\r
label.setToolTipText(Messages.getString("classpathchecker.default.tooltip"));\r
\r
setLayout(new BorderLayout());\r
boolean flag = findClass(t);\r
String message = Messages.getString("classpathchecker.found.tooltip");\r
if(flag){\r
- label.setIcon(Utility.getIcon("classpathchecker.found.icon"));\r
+ label.setIcon(GUIUtility.getIcon("classpathchecker.found.icon"));\r
}\r
else{\r
- label.setIcon(Utility.getIcon("classpathchecker.notfound.icon"));\r
+ label.setIcon(GUIUtility.getIcon("classpathchecker.notfound.icon"));\r
message = Messages.getString("classpathchecker.notfound.tooltip");\r
}\r
label.setToolTipText(message);\r
import java.io.IOException;\r
import java.io.PrintWriter;\r
import java.util.HashMap;\r
-import java.util.HashSet;\r
import java.util.Map;\r
-import java.util.Set;\r
\r
import javax.swing.Box;\r
import javax.swing.BoxLayout;\r
private BirthmarkDefinitionPane definition;\r
private PropertyEditPane properties;\r
private FilterManagementPane filters;\r
+ private ExtractedHistoryPane history;\r
private JTabbedPane controlTab;\r
private JButton compareButton;\r
private JButton extractButton;\r
wellknownClassses = new WellknownClassesSettingsPane(stigmata);\r
classpath = new ClasspathSettingsPane(stigmata);\r
filters = new FilterManagementPane(stigmata);\r
+ history = new ExtractedHistoryPane(stigmata);\r
initComponents();\r
\r
- Utility.addNewTab("targets", controlTab, control);\r
- Utility.addNewTab("wellknown", controlTab, wellknownClassses);\r
- Utility.addNewTab("classpath", controlTab, classpath);\r
- Utility.addNewTab("property", controlTab, properties);\r
+ GUIUtility.addNewTab("targets", controlTab, control);\r
+ GUIUtility.addNewTab("wellknown", controlTab, wellknownClassses);\r
+ GUIUtility.addNewTab("classpath", controlTab, classpath);\r
+ GUIUtility.addNewTab("property", controlTab, properties);\r
reset();\r
}\r
\r
stigmata.setExpertMode(expertmode);\r
\r
if(expertmode){\r
- Utility.addNewTab("definition", controlTab, definition);\r
- Utility.addNewTab("filter", controlTab, filters);\r
+ GUIUtility.addNewTab("definition", controlTab, definition);\r
+ GUIUtility.addNewTab("filter", controlTab, filters);\r
+ GUIUtility.addNewTab("history", controlTab, history);\r
}\r
else{\r
removeTabByName(Messages.getString("definition.tab.label"));\r
removeTabByName(Messages.getString("filter.tab.label"));\r
+ removeTabByName(Messages.getString("history.tab.label"));\r
}\r
updateEnable();\r
}\r
\r
private void extractButtonActionPerformed(ActionEvent e){\r
BirthmarkContext context = generateContext();\r
+ context.setComparisonMethod(ComparisonMethod.ROUND_ROBIN_XY);\r
\r
String[] fileX = targetX.getValues();\r
String[] fileY = targetY.getValues();\r
- Set<String> targets = new HashSet<String>();\r
- if(fileX != null && fileX.length > 0){\r
- for(String file: fileX){\r
- targets.add(file);\r
- }\r
- }\r
- if(fileY != null && fileY.length > 0){\r
- for(String file: fileY){\r
- targets.add(file);\r
- }\r
- }\r
\r
- stigmata.extract(targets.toArray(new String[targets.size()]), context);\r
+ stigmata.extract(fileX, fileY, context);\r
}\r
\r
private void compareRoundRobinWithFiltering(){\r
\r
private void initComponents(){\r
controlTab = new JTabbedPane();\r
- resetButton = Utility.createButton("reset");\r
- extractButton = Utility.createButton("extract");\r
- compareButton = Utility.createButton("roundrobin");\r
+ resetButton = GUIUtility.createButton("reset");\r
+ extractButton = GUIUtility.createButton("extract");\r
+ compareButton = GUIUtility.createButton("roundrobin");\r
comparePopup = new PopupButton(compareButton);\r
unitBox = new JComboBox();\r
\r
\r
String[] comparisonMethods = Messages.getStringArray("comparison.methods");\r
for(int i = 1; i < comparisonMethods.length; i++){\r
- JMenuItem item = Utility.createJMenuItem(comparisonMethods[i]);\r
+ JMenuItem item = GUIUtility.createJMenuItem(comparisonMethods[i]);\r
comparePopup.addMenuItem(item);\r
item.addActionListener(compareListener);\r
}\r
--- /dev/null
+package jp.naist.se.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.Box;
+import javax.swing.DefaultListModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import jp.naist.se.stigmata.ExtractionResultSet;
+import jp.naist.se.stigmata.result.history.ExtractedBirthmarkHistory;
+import jp.naist.se.stigmata.result.history.ExtractedBirthmarkHistoryManager;
+import jp.naist.se.stigmata.ui.swing.actions.PopupShowAction;
+
+/**
+ * Birthmark extraction history viewer.
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class ExtractedHistoryPane extends JPanel{
+ private static final long serialVersionUID = 4070750464486981964L;
+
+ private StigmataFrame stigmata;
+ private JComboBox combo;
+ private JList list;
+ private DefaultListModel model;
+ private ExtractedBirthmarkHistoryManager historyManager;
+ private ExtractedBirthmarkHistory currentHistory;
+
+ public ExtractedHistoryPane(StigmataFrame stigmata){
+ this.stigmata = stigmata;
+
+ initLayouts();
+ initData();
+ }
+
+ private void updateList(){
+ String historyId = (String)combo.getSelectedItem();
+ currentHistory = historyManager.getHistory(historyId);
+ model.clear();
+
+ for(String id: currentHistory){
+ model.addElement(id);
+ }
+ }
+
+ private void initData(){
+ historyManager = new ExtractedBirthmarkHistoryManager(stigmata.getEnvironment());
+
+ for(String id: historyManager.getHistoryIds()){
+ combo.addItem(id);
+ }
+ }
+
+ private void showAction(String id){
+ ExtractionResultSet ers = currentHistory.getExtractionResultSet(id);
+ stigmata.showExtractionResult(ers);
+ }
+
+ private void initLayouts(){
+ setLayout(new BorderLayout());
+
+ final Action showAction = new AbstractAction(){
+ private static final long serialVersionUID = 2156350514762218963L;
+
+ public void actionPerformed(ActionEvent e){
+ showAction((String)model.get(list.getSelectedIndex()));
+ }
+ };
+ final Action refreshAction = new AbstractAction(){
+ private static final long serialVersionUID = 214765021455345371L;
+
+ public void actionPerformed(ActionEvent e){
+ updateList();
+ }
+ };
+ final Action deleteAction = new AbstractAction(){
+ private static final long serialVersionUID = 8145188292702648924L;
+
+ public void actionPerformed(ActionEvent e){
+ int[] indeces = list.getSelectedIndices();
+ for(int i = indeces.length - 1; i >= 0; i--){
+ String id = (String)model.get(indeces[i]);
+ currentHistory.delete(id);
+ model.remove(indeces[i]);
+ }
+ list.clearSelection();
+ }
+ };
+ model = new DefaultListModel();
+ list = new JList(model);
+ combo = new JComboBox();
+ list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+ GUIUtility.decorateJComponent(list, "historylist");
+ GUIUtility.decorateJComponent(combo, "historylocation");
+
+ JButton showButton = GUIUtility.createButton("showhistory", showAction);
+ JButton refreshButton = GUIUtility.createButton("refreshhistory", refreshAction);
+ JButton deleteButton = GUIUtility.createButton("deletehistory", deleteAction);
+ deleteAction.setEnabled(false);
+
+ list.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
+ public void valueChanged(ListSelectionEvent e){
+ int[] indeces = list.getSelectedIndices();
+ showAction.setEnabled(currentHistory != null && indeces.length == 1);
+ deleteAction.setEnabled(currentHistory != null && indeces.length > 0);
+ }
+ });
+ list.addMouseListener(new MouseAdapter(){
+ @Override
+ public void mouseClicked(MouseEvent e){
+ int index = list.locationToIndex(e.getPoint());
+ if(index >= 0 && e.getClickCount() == 2){
+ showAction((String)model.get(index));
+ }
+ }
+ });
+ combo.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ updateList();
+ }
+ });
+ JScrollPane scroll = new JScrollPane();
+ scroll.setViewportView(list);
+
+ Box south = Box.createHorizontalBox();
+ south.add(Box.createHorizontalGlue());
+ south.add(showButton);
+ south.add(Box.createHorizontalGlue());
+ south.add(refreshButton);
+ south.add(Box.createHorizontalGlue());
+ south.add(deleteButton);
+ south.add(Box.createHorizontalGlue());
+
+ add(combo, BorderLayout.NORTH);
+ add(scroll, BorderLayout.CENTER);
+ add(south, BorderLayout.SOUTH);
+
+ JPopupMenu popup = new JPopupMenu();
+ popup.add(GUIUtility.createJMenuItem("showhistory"), showAction);
+ popup.add(GUIUtility.createJMenuItem("refreshhistory"), refreshAction);
+ popup.add(GUIUtility.createJMenuItem("deletehistory"), deleteAction);
+ list.addMouseListener(new PopupShowAction(popup));
+ }
+}
filterPane.addComparisonPairFilterListener(definition);\r
JComponent filtersetlist = createFilterSetPane();\r
\r
- Utility.decorateJComponent(filtersetlist, "filtersetlist.pane");\r
- Utility.decorateJComponent(definition, "filterdefinition.pane");\r
- Utility.decorateJComponent(filterPane, "filter.pane");\r
+ GUIUtility.decorateJComponent(filtersetlist, "filtersetlist.pane");\r
+ GUIUtility.decorateJComponent(definition, "filterdefinition.pane");\r
+ GUIUtility.decorateJComponent(filterPane, "filter.pane");\r
\r
setLayout(new GridLayout(1, 3));\r
add(filtersetlist);\r
model = new DefaultListModel();\r
list = new JList(model);\r
\r
- final JButton upButton = Utility.createButton("moveup");\r
- final JButton downButton = Utility.createButton("movedown");\r
+ final JButton upButton = GUIUtility.createButton("moveup");\r
+ final JButton downButton = GUIUtility.createButton("movedown");\r
\r
Box south = Box.createHorizontalBox();\r
south.add(Box.createHorizontalGlue());\r
* @author Haruaki TAMADA\r
* @version $Revision$ $Date$\r
*/\r
-public class Utility{\r
+public class GUIUtility{\r
private static final String iconPath = Messages.getString("icon.directory");\r
\r
- private Utility(){\r
+ private GUIUtility(){\r
}\r
\r
public static void decorateJComponent(JComponent component, String label){\r
if(resourcePathPrefix != null){\r
resourcePath = resourcePathPrefix + resourcePath;\r
}\r
- return Utility.class.getResource(resourcePath);\r
+ return GUIUtility.class.getResource(resourcePath);\r
}\r
return null;\r
}\r
return null;\r
}\r
\r
- public static String array2String(String[] values){\r
- StringBuilder builder = new StringBuilder();\r
- for(int i = 0; i < values.length; i++){\r
- if(i != 0)\r
- builder.append(", ");\r
- builder.append(values[i]);\r
- }\r
- return new String(builder);\r
- }\r
-\r
public static void addNewTab(String key, JTabbedPane tabPane, Component comp){\r
addNewTab(key, tabPane, comp, null, null);\r
}\r
panel.add(similarityPanel);\r
\r
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));\r
- JButton saveButton = Utility.createButton(\r
+ JButton saveButton = GUIUtility.createButton(\r
"savecomparison", new SaveAction(frame, new AsciiDataWritable(){\r
public void writeAsciiData(PrintWriter out, String format) throws IOException{\r
ResultPrinterSpi service = PrinterManager.getInstance().getService(format);\r
JComponent buttonPanel = Box.createHorizontalBox();\r
JPanel similarityPane = new JPanel(new GridLayout(1, 3));\r
JComponent southPanel = Box.createVerticalBox();\r
- JButton saveButton = Utility.createButton(\r
+ JButton saveButton = GUIUtility.createButton(\r
"savecomparison", new SaveAction(frame, new AsciiDataWritable(){\r
public void writeAsciiData(PrintWriter out, String format) throws IOException{\r
ResultPrinterSpi service = PrinterManager.getInstance().getService(format);\r
}\r
})\r
);\r
- JButton updateColorButton = Utility.createButton(\r
+ JButton updateColorButton = GUIUtility.createButton(\r
"updatecellcolor", new UpdateBirthmarkCellColorAction(this, comparison.getEnvironment())\r
);\r
- JButton obfuscateButton = Utility.createButton("obfuscate");\r
+ JButton obfuscateButton = GUIUtility.createButton("obfuscate");\r
JScrollPane scroll = new JScrollPane();\r
averageLabel = new JLabel(Double.toString(average), JLabel.RIGHT);\r
maximumLabel = new JLabel(Double.toString(maximum), JLabel.RIGHT);\r
addNewProperty(table.getSelectedRow());\r
}\r
};\r
- JButton addButton = Utility.createButton("propertyadd", addAction);\r
- JButton changeButton = Utility.createButton("propertychange", changeAction);\r
- JButton removeButton = Utility.createButton("propertyremove", removeAction);\r
+ JButton addButton = GUIUtility.createButton("propertyadd", addAction);\r
+ JButton changeButton = GUIUtility.createButton("propertychange", changeAction);\r
+ JButton removeButton = GUIUtility.createButton("propertyremove", removeAction);\r
\r
final JPopupMenu popup = new JPopupMenu();\r
- popup.add(Utility.createJMenuItem("propertyadd", addAction));\r
- popup.add(Utility.createJMenuItem("propertychange", changeAction));\r
- popup.add(Utility.createJMenuItem("propertyremove", removeAction));\r
+ popup.add(GUIUtility.createJMenuItem("propertyadd", addAction));\r
+ popup.add(GUIUtility.createJMenuItem("propertychange", changeAction));\r
+ popup.add(GUIUtility.createJMenuItem("propertyremove", removeAction));\r
\r
setLayout(new BorderLayout());\r
JScrollPane scroll = new JScrollPane(table);\r
private static final long serialVersionUID = 2134574576543623L;\r
\r
private ExtractionResultSet extraction;\r
- // private List<BirthmarkSet> birthmarksX;\r
- // private List<BirthmarkSet> birthmarksY;\r
private JTable table;\r
private DefaultTableModel model;\r
private JLabel classCount, comparisonCount, distinctionRatio;\r
private JLabel average, minimum, maximum;\r
private StigmataFrame stigmataFrame;\r
- // private BirthmarkEnvironment environment;\r
\r
public RoundRobinComparisonResultPane(StigmataFrame stigmata, ExtractionResultSet resultset){\r
this.stigmataFrame = stigmata;\r
compare(model);\r
}\r
\r
- @Deprecated\r
- public RoundRobinComparisonResultPane(StigmataFrame stigmata, BirthmarkEnvironment environment,\r
- BirthmarkSet[] birthmarksX, BirthmarkSet[] birthmarksY){\r
- this.stigmataFrame = stigmata;\r
-\r
- initialize();\r
- compare(model);\r
- }\r
-\r
private void compare(DefaultTableModel model){\r
- int countX = extraction.getBirthmarkSetSize(ExtractionTarget.TARGET_X);\r
- int countY = extraction.getBirthmarkSetSize(ExtractionTarget.TARGET_Y);\r
+ ExtractionTarget targetX = ExtractionTarget.TARGET_X;\r
+ ExtractionTarget targetY = ExtractionTarget.TARGET_Y;\r
+ int countX = extraction.getBirthmarkSetSize(targetX);\r
+ int countY = extraction.getBirthmarkSetSize(targetY);\r
int comparisonCount = countX * countY;\r
+ if(countX == 0 && countY == 0){\r
+ targetX = ExtractionTarget.TARGET_XY;\r
+ targetY = ExtractionTarget.TARGET_XY;\r
+ countX = extraction.getBirthmarkSetSize(targetX);\r
+ countY = extraction.getBirthmarkSetSize(targetY);\r
+ comparisonCount = countX * (countY - 1) / 2;\r
+ }\r
+ else if(countX == 0 || countY == 0){\r
+ targetX = ExtractionTarget.TARGET_BOTH;\r
+ targetY = ExtractionTarget.TARGET_BOTH;\r
+ countX = extraction.getBirthmarkSetSize(targetX);\r
+ countY = extraction.getBirthmarkSetSize(targetY);\r
+ comparisonCount = countX * (countY - 1) / 2;\r
+ }\r
\r
classCount.setText(Integer.toString(countX + countY));\r
this.comparisonCount.setText(Integer.toString(comparisonCount));\r
double max = 0d;\r
double min = 100d;\r
model.addColumn("");\r
- for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_X); i.hasNext(); ){\r
+ for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(targetX); i.hasNext(); ){\r
BirthmarkSet x = i.next();\r
model.addColumn(x.getName());\r
}\r
- int sizeX = extraction.getBirthmarkSetSize(ExtractionTarget.TARGET_X);\r
- for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_Y); i.hasNext(); ){\r
+ int sizeX = extraction.getBirthmarkSetSize(targetX);\r
+ for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(targetY); i.hasNext(); ){\r
Object[] rows = new Object[sizeX + 1];\r
BirthmarkSet setY = i.next();\r
rows[0] = setY.getName();\r
\r
int index = 0;\r
- for(Iterator<BirthmarkSet> j = extraction.birthmarkSets(ExtractionTarget.TARGET_X); j.hasNext(); ){\r
+ for(Iterator<BirthmarkSet> j = extraction.birthmarkSets(targetX); j.hasNext(); ){\r
BirthmarkSet setX = j.next();\r
double similarity = compare(setX, setY, extraction.getEnvironment());\r
rows[index + 1] = new Double(similarity);\r
}\r
\r
private void initialize(){\r
- JButton save = Utility.createButton(\r
+ JButton save = GUIUtility.createButton(\r
"savecomparison", new SaveAction(stigmataFrame, new AsciiDataWritable(){\r
public void writeAsciiData(PrintWriter out, String format){\r
ResultPrinterSpi service = PrinterManager.getInstance().getService(format);\r
}\r
}\r
));\r
- JButton graph = Utility.createButton("showgraph");\r
- JButton obfuscate = Utility.createButton("obfuscate");\r
- JButton compare = Utility.createButton("guessedpair");\r
- JButton updateColor = Utility.createButton(\r
+ JButton graph = GUIUtility.createButton("showgraph");\r
+ JButton obfuscate = GUIUtility.createButton("obfuscate");\r
+ JButton compare = GUIUtility.createButton("guessedpair");\r
+ JButton updateColor = GUIUtility.createButton(\r
"updatecellcolor", new UpdateBirthmarkCellColorAction(this, extraction.getEnvironment())\r
);\r
- JMenuItem mdsMenu = Utility.createJMenuItem("mdsmap");\r
+ JMenuItem mdsMenu = GUIUtility.createJMenuItem("mdsmap");\r
\r
PopupButton comparePopup = new PopupButton(compare);\r
PopupButton graphPopup = new PopupButton(graph);\r
compare.addActionListener(compareListener);\r
String[] comparisonMethods = Messages.getStringArray("comparison.methods.inroundrobinresult");\r
for(int i = 1; i < comparisonMethods.length; i++){\r
- JMenuItem item = Utility.createJMenuItem(comparisonMethods[i]);\r
+ JMenuItem item = GUIUtility.createJMenuItem(comparisonMethods[i]);\r
comparePopup.addMenuItem(item);\r
item.addActionListener(compareListener);\r
}\r
import jp.naist.se.stigmata.ui.swing.graph.SimilarityDistributionGraphPane;\r
import jp.naist.se.stigmata.ui.swing.mds.MDSGraphPanel;\r
import jp.naist.se.stigmata.ui.swing.tab.EditableTabbedPane;\r
+import jp.naist.se.stigmata.utils.Utility;\r
\r
import org.apache.commons.cli.ParseException;\r
\r
this.stigmata = stigmata;\r
this.environment = environment;\r
this.fileio = new FileIOManager(this, environment);\r
- Image iconImage = Utility.getImage("stigmata.icon");\r
+ Image iconImage = GUIUtility.getImage("stigmata.icon");\r
if(iconImage != null){\r
setIconImage(iconImage);\r
}\r
);\r
int compareDetail = getNextCount("compare_detail");\r
\r
- Utility.addNewTab("comparedetail", tabPane, detail,\r
+ GUIUtility.addNewTab("comparedetail", tabPane, detail,\r
new Object[] { new Integer(compareDetail), },\r
new Object[] {\r
Utility.array2String(target1.getBirthmarkTypes()),\r
\r
RoundRobinComparisonResultPane compare = new RoundRobinComparisonResultPane(this, ers);\r
int compareCount = getNextCount("compare");\r
- Utility.addNewTab(\r
+ GUIUtility.addNewTab(\r
"compare", tabPane, compare,\r
new Object[] { new Integer(compareCount), },\r
new Object[] {\r
resultset = engine.filter(resultset);\r
}\r
int compareCount = getNextCount("compare");\r
- Utility.addNewTab(\r
+ GUIUtility.addNewTab(\r
"compare", tabPane, new PairComparisonResultSetPane(this, resultset),\r
new Object[] { new Integer(compareCount), },\r
new Object[] {\r
int comparePair = getNextCount("compare_pair");\r
\r
ComparisonResultSet resultset = new CertainPairComparisonResultSet(extraction);\r
- Utility.addNewTab("comparepair", tabPane,\r
+ GUIUtility.addNewTab("comparepair", tabPane,\r
new PairComparisonResultSetPane(this, resultset),\r
new Object[] { new Integer(comparePair), },\r
new Object[] {\r
ComparisonResultSet crs = engine.compare(targetX, targetY, context);\r
int comparePair = getNextCount("compare_pair");\r
\r
- Utility.addNewTab(\r
+ GUIUtility.addNewTab(\r
"comparepair", tabPane,\r
new PairComparisonResultSetPane(this, crs),\r
new Object[] { new Integer(comparePair), },\r
\r
public void showComparisonResultSet(ComparisonResultSet resultset){\r
int comparePair = getNextCount("compare_pair");\r
- Utility.addNewTab(\r
+ GUIUtility.addNewTab(\r
"comparisonresultset", tabPane,\r
new PairComparisonResultSetPane(this, resultset),\r
new Object[] { new Integer(comparePair), }, null\r
try{\r
MDSGraphPanel panel = new MDSGraphPanel(this, set, context);\r
int mappingGraphCount = getNextCount("mds_graph");\r
- Utility.addNewTab("mappinggraph", tabPane, panel, new Object[] { new Integer(mappingGraphCount), }, null);\r
+ GUIUtility.addNewTab("mappinggraph", tabPane, panel, new Object[] { new Integer(mappingGraphCount), }, null);\r
tabPane.setSelectedIndex(tabPane.getTabCount() - 1);\r
} catch(Exception e){\r
showExceptionMessage(e);\r
SimilarityDistributionGraphPane graph = new SimilarityDistributionGraphPane(this, distributions);\r
\r
int similarityGraphCount = getNextCount("similarity_graph");\r
- Utility.addNewTab("similaritygraph", tabPane, graph, new Object[] { new Integer(similarityGraphCount), }, null);\r
+ GUIUtility.addNewTab("similaritygraph", tabPane, graph, new Object[] { new Integer(similarityGraphCount), }, null);\r
+ tabPane.setSelectedIndex(tabPane.getTabCount() - 1);\r
+ }\r
+\r
+ public void compareExtractionResult(ExtractionResultSet ers){\r
+ RoundRobinComparisonResultPane compare = new RoundRobinComparisonResultPane(this, ers);\r
+ int compareCount = getNextCount("compare");\r
+ GUIUtility.addNewTab(\r
+ "compare", tabPane, compare,\r
+ new Object[] { new Integer(compareCount), },\r
+ new Object[] {\r
+ Utility.array2String(ers.getBirthmarkTypes()),\r
+ Utility.array2String(new String[0]),\r
+ Utility.array2String(new String[0]),\r
+ }\r
+ );\r
tabPane.setSelectedIndex(tabPane.getTabCount() - 1);\r
}\r
\r
public void showExtractionResult(ExtractionResultSet ers){\r
int extractCount = getNextCount("extract");\r
BirthmarkExtractionResultPane viewer = new BirthmarkExtractionResultPane(this, ers);\r
- Utility.addNewTab(\r
+ GUIUtility.addNewTab(\r
"extract", tabPane, viewer,\r
new Object[] { new Integer(extractCount), },\r
new Object[] { Utility.array2String(ers.getBirthmarkTypes()), }\r
\r
}\r
\r
- public void extract(String[] targets, BirthmarkContext context){\r
+ public void extract(String[] targetX, String[] targetY, BirthmarkContext context){\r
try{\r
BirthmarkEngine engine = getStigmata().createEngine(context.getEnvironment());\r
- ExtractionResultSet ers = engine.extract(targets, context);\r
+ ExtractionResultSet ers = engine.extract(targetX, targetY, context);\r
showExtractionResult(ers);\r
}catch(Throwable e){\r
showExceptionMessage(e);\r
return mapping;\r
}\r
\r
- private static void deleteDirectory(File dir){\r
- File[] files = dir.listFiles();\r
- for(File file: files){\r
- if(file.isDirectory()){\r
- deleteDirectory(file);\r
- }\r
- else{\r
- file.delete();\r
- }\r
- }\r
- dir.delete();\r
- }\r
-\r
private void reloadSettings(String[] args){\r
try{\r
setVisible(false);\r
}\r
\r
private void clearSettings(){\r
- deleteDirectory(new File(BirthmarkEnvironment.getStigmataHome()));\r
+ Utility.deleteDirectory(new File(BirthmarkEnvironment.getStigmataHome()));\r
reloadSettings(new String[] { "--reset-config", "--mode", "gui", });\r
}\r
\r
setTitle(Messages.getString("stigmata.frame.title"));\r
initComponents();\r
\r
- Utility.addNewTab("control", tabPane, control = new ControlPane(this), null, null);\r
+ GUIUtility.addNewTab("control", tabPane, control = new ControlPane(this), null, null);\r
control.inititalize();\r
tabPane.setSelectedIndex(tabPane.getTabCount() - 1);\r
\r
}\r
\r
private JMenu createFileMenu(){\r
- JMenu fileMenu = Utility.createJMenu("fileMenu");\r
- JMenuItem newFrameMenu = Utility.createJMenuItem("newframe");\r
- JMenuItem saveMenu = Utility.createJMenuItem("savesetting");\r
- JMenuItem exportMenu = Utility.createJMenuItem("exportsetting");\r
- JMenuItem clearMenu = Utility.createJMenuItem("clearsetting");\r
- JMenuItem refreshMenu = Utility.createJMenuItem("refreshsetting");\r
- JMenuItem closeTabMenu = Utility.createJMenuItem("closetab");\r
- JMenuItem closeMenu = Utility.createJMenuItem("closeframe");\r
- JMenuItem exitMenu = Utility.createJMenuItem("exit");\r
+ JMenu fileMenu = GUIUtility.createJMenu("fileMenu");\r
+ JMenuItem newFrameMenu = GUIUtility.createJMenuItem("newframe");\r
+ JMenuItem saveMenu = GUIUtility.createJMenuItem("savesetting");\r
+ JMenuItem exportMenu = GUIUtility.createJMenuItem("exportsetting");\r
+ JMenuItem clearMenu = GUIUtility.createJMenuItem("clearsetting");\r
+ JMenuItem refreshMenu = GUIUtility.createJMenuItem("refreshsetting");\r
+ JMenuItem closeTabMenu = GUIUtility.createJMenuItem("closetab");\r
+ JMenuItem closeMenu = GUIUtility.createJMenuItem("closeframe");\r
+ JMenuItem exitMenu = GUIUtility.createJMenuItem("exit");\r
this.closeTabMenu = closeTabMenu;\r
this.saveMenu = saveMenu;\r
saveMenu.setEnabled(false);\r
}\r
\r
private JMenu createHelpMenu(){\r
- JMenu menu = Utility.createJMenu("helpmenu");\r
- JMenuItem about = Utility.createJMenuItem("about", new AboutAction(this));\r
- JMenuItem license = Utility.createJMenuItem("license", new LicenseAction(this));\r
- JMenuItem help = Utility.createJMenuItem("helpmenu");\r
- expertmodeMenu = Utility.createJCheckBoxMenuItem("expertmenu");\r
+ JMenu menu = GUIUtility.createJMenu("helpmenu");\r
+ JMenuItem about = GUIUtility.createJMenuItem("about", new AboutAction(this));\r
+ JMenuItem license = GUIUtility.createJMenuItem("license", new LicenseAction(this));\r
+ JMenuItem help = GUIUtility.createJMenuItem("helpmenu");\r
+ expertmodeMenu = GUIUtility.createJCheckBoxMenuItem("expertmenu");\r
\r
menu.add(about);\r
menu.add(license);\r
}\r
\r
private JMenu createLookAndFeelMenu(){\r
- JMenu laf = Utility.createJMenu("lookandfeel");\r
+ JMenu laf = GUIUtility.createJMenu("lookandfeel");\r
ButtonGroup bg = new ButtonGroup();\r
UIManager.LookAndFeelInfo[] info = UIManager.getInstalledLookAndFeels();\r
LookAndFeel lookfeel = UIManager.getLookAndFeel();\r
}\r
};\r
\r
- JButton addButton = Utility.createButton("addpackage", addAction);\r
- JButton removeButton = Utility.createButton("removepackage", removeAction);\r
+ JButton addButton = GUIUtility.createButton("addpackage", addAction);\r
+ JButton removeButton = GUIUtility.createButton("removepackage", removeAction);\r
removeAction.setEnabled(false);\r
\r
final JPopupMenu popup = new JPopupMenu();\r
- popup.add(Utility.createJMenuItem("addpackage", addAction));\r
- popup.add(Utility.createJMenuItem("removepackage", removeAction));\r
+ popup.add(GUIUtility.createJMenuItem("addpackage", addAction));\r
+ popup.add(GUIUtility.createJMenuItem("removepackage", removeAction));\r
\r
setLayout(new BorderLayout());\r
\r
\r
private JComponent createCheckPane(){\r
final JTextField text = new JTextField();\r
- final JButton checkButton = Utility.createButton("checkwellknown");\r
- final JLabel label = new JLabel(Utility.getIcon("wellknownclasschecker.default.icon"));\r
+ final JButton checkButton = GUIUtility.createButton("checkwellknown");\r
+ final JLabel label = new JLabel(GUIUtility.getIcon("wellknownclasschecker.default.icon"));\r
checkButton.setEnabled(false);\r
\r
ActionListener listener = new ActionListener(){\r
if(t.length() > 0){\r
String message = Messages.getString("wellknownclasschecker.wellknown.tooltip");\r
if(isWellknownClass(t)){\r
- label.setIcon(Utility.getIcon("wellknownclasschecker.wellknown.icon"));\r
+ label.setIcon(GUIUtility.getIcon("wellknownclasschecker.wellknown.icon"));\r
}\r
else{\r
- label.setIcon(Utility.getIcon("wellknownclasschecker.notwellknown.icon"));\r
+ label.setIcon(GUIUtility.getIcon("wellknownclasschecker.notwellknown.icon"));\r
message = Messages.getString("wellknownclasschecker.notwellknown.tooltip");\r
}\r
label.setToolTipText(message);\r
editRule(list.getSelectedIndex());\r
}\r
};\r
- JButton addButton = Utility.createButton("addwellknown", addAction);\r
- JButton removeButton = Utility.createButton("removewellknown", removeAction);\r
- JButton updateButton = Utility.createButton("updatewellknown", updateAction);\r
+ JButton addButton = GUIUtility.createButton("addwellknown", addAction);\r
+ JButton removeButton = GUIUtility.createButton("removewellknown", removeAction);\r
+ JButton updateButton = GUIUtility.createButton("updatewellknown", updateAction);\r
removeAction.setEnabled(false);\r
updateAction.setEnabled(false);\r
\r
}\r
});\r
JPopupMenu popup = new JPopupMenu();\r
- popup.add(Utility.createJMenuItem("addwellknown", addAction));\r
- popup.add(Utility.createJMenuItem("updatewellknown", updateAction));\r
- popup.add(Utility.createJMenuItem("removewellknown", removeAction));\r
+ popup.add(GUIUtility.createJMenuItem("addwellknown", addAction));\r
+ popup.add(GUIUtility.createJMenuItem("updatewellknown", updateAction));\r
+ popup.add(GUIUtility.createJMenuItem("removewellknown", removeAction));\r
\r
list.addMouseListener(new PopupShowAction(popup));\r
list.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
private WellknownClassJudgeRule createOrUpdateRule(WellknownClassJudgeRule rule){\r
JTextField text = new JTextField();\r
text.setOpaque(true);\r
- Utility.decorateJComponent(text, "addwellknown.newrule.pattern");\r
+ GUIUtility.decorateJComponent(text, "addwellknown.newrule.pattern");\r
JCheckBox excludeCheck = new JCheckBox(Messages.getString("addwellknown.newrule.exclude.label"), false);\r
- Utility.decorateJComponent(excludeCheck, "addwellknown.newrule.exclude");\r
+ GUIUtility.decorateJComponent(excludeCheck, "addwellknown.newrule.exclude");\r
JComboBox matchTypeComboBox = new JComboBox();\r
for(Map.Entry<String, String> entry: matchTypeMap.entrySet()){\r
matchTypeComboBox.addItem(entry.getValue());\r
import javax.swing.JPanel;\r
\r
import jp.naist.se.stigmata.ui.swing.Messages;\r
-import jp.naist.se.stigmata.ui.swing.Utility;\r
+import jp.naist.se.stigmata.ui.swing.GUIUtility;\r
\r
/**\r
* \r
\r
@Override\r
public String getMessage(){\r
- String aboutMessage = loadStringFromFile(Utility.getResource("about.message.file"));\r
+ String aboutMessage = loadStringFromFile(GUIUtility.getResource("about.message.file"));\r
\r
Package p = getClass().getPackage();\r
aboutMessage = aboutMessage.replace("${implementation.version}", p.getImplementationVersion());\r
\r
@Override\r
protected void updatePanel(JPanel panel){\r
- JLabel logo = new JLabel(Utility.getIcon("stigmata.logo"));\r
+ JLabel logo = new JLabel(GUIUtility.getIcon("stigmata.logo"));\r
panel.add(logo, BorderLayout.NORTH);\r
}\r
}\r
import javax.swing.JDialog;\r
\r
import jp.naist.se.stigmata.ui.swing.Messages;\r
-import jp.naist.se.stigmata.ui.swing.Utility;\r
+import jp.naist.se.stigmata.ui.swing.GUIUtility;\r
\r
/**\r
* \r
\r
public ChangeColorAction(String label, Component component, \r
Color initialColor, ActionListener listener){\r
- super(Messages.getString(label + ".label"), Utility.getIcon(label + ".icon"));\r
+ super(Messages.getString(label + ".label"), GUIUtility.getIcon(label + ".icon"));\r
this.component = component;\r
this.listener = listener;\r
this.currentColor = initialColor;\r
import java.awt.Component;\r
\r
import jp.naist.se.stigmata.ui.swing.Messages;\r
-import jp.naist.se.stigmata.ui.swing.Utility;\r
+import jp.naist.se.stigmata.ui.swing.GUIUtility;\r
\r
/**\r
* @author Haruaki TAMADA\r
}\r
\r
public String getMessage(){\r
- return loadStringFromFile(Utility.getResource("license.file"));\r
+ return loadStringFromFile(GUIUtility.getResource("license.file"));\r
}\r
}\r
import jp.naist.se.stigmata.BirthmarkEnvironment;\r
import jp.naist.se.stigmata.ui.swing.CompareTableCellRenderer;\r
import jp.naist.se.stigmata.ui.swing.Messages;\r
-import jp.naist.se.stigmata.ui.swing.Utility;\r
+import jp.naist.se.stigmata.ui.swing.GUIUtility;\r
\r
public class UpdateBirthmarkCellColorAction extends AbstractAction{\r
private static final long serialVersionUID = 2390797591047570440L;\r
private void initLayouts(){\r
label = new JLabel(Messages.getString("rank_" + rank + ".label"));\r
label.setOpaque(true);\r
- JButton fore = Utility.createButton("updatecellfore");\r
- JButton back = Utility.createButton("updatecellback");\r
+ JButton fore = GUIUtility.createButton("updatecellfore");\r
+ JButton back = GUIUtility.createButton("updatecellback");\r
\r
ActionListener listener = new ActionListener(){\r
public void actionPerformed(ActionEvent e){\r
import jp.naist.se.stigmata.ui.swing.BirthmarkServiceListener;\r
import jp.naist.se.stigmata.ui.swing.Messages;\r
import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
-import jp.naist.se.stigmata.ui.swing.Utility;\r
+import jp.naist.se.stigmata.ui.swing.GUIUtility;\r
\r
/**\r
* \r
private void initLayouts(){\r
cardComponent = new JPanel();\r
combo = new JComboBox();\r
- addButton = Utility.createButton("newfilter");\r
- removeButton = Utility.createButton("removefilter");\r
- updateButton = Utility.createButton("updatefilter");\r
+ addButton = GUIUtility.createButton("newfilter");\r
+ removeButton = GUIUtility.createButton("removefilter");\r
+ updateButton = GUIUtility.createButton("updatefilter");\r
\r
combo.addItemListener(new ItemListener(){\r
public void itemStateChanged(ItemEvent e){\r
import jp.naist.se.stigmata.ComparisonPairFilter;\r
import jp.naist.se.stigmata.ComparisonPairFilterSet;\r
import jp.naist.se.stigmata.ui.swing.Messages;\r
-import jp.naist.se.stigmata.ui.swing.Utility;\r
+import jp.naist.se.stigmata.ui.swing.GUIUtility;\r
\r
/**\r
* \r
north.add(matchall);\r
north.add(matchany);\r
\r
- addfilter = Utility.createButton("newfilterset");\r
- updatefilter = Utility.createButton("updatefilterset");\r
- removefilter = Utility.createButton("removefilterset");\r
- upButton = Utility.createButton("moveup");\r
- downButton = Utility.createButton("movedown");\r
+ addfilter = GUIUtility.createButton("newfilterset");\r
+ updatefilter = GUIUtility.createButton("updatefilterset");\r
+ removefilter = GUIUtility.createButton("removefilterset");\r
+ upButton = GUIUtility.createButton("moveup");\r
+ downButton = GUIUtility.createButton("movedown");\r
\r
Box south = Box.createHorizontalBox();\r
south.add(Box.createHorizontalGlue());\r
add(south, BorderLayout.SOUTH);\r
}\r
\r
- Utility.decorateJComponent(name, "filtername");\r
- Utility.decorateJComponent(listpane, "filterorder");\r
+ GUIUtility.decorateJComponent(name, "filtername");\r
+ GUIUtility.decorateJComponent(listpane, "filterorder");\r
\r
setEnabled(buttonShown);\r
\r
\r
import jp.naist.se.stigmata.ui.swing.Messages;\r
import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
-import jp.naist.se.stigmata.ui.swing.Utility;\r
+import jp.naist.se.stigmata.ui.swing.GUIUtility;\r
import jp.naist.se.stigmata.ui.swing.actions.ChangeColorAction;\r
\r
/**\r
JPanel center = new JPanel(new FlowLayout(FlowLayout.CENTER));\r
iconLabel = new JLabel();\r
Box south = Box.createHorizontalBox();\r
- JButton storeImageButton = Utility.createButton("savegraph");\r
+ JButton storeImageButton = GUIUtility.createButton("savegraph");\r
JButton switchColorButton = new JButton(new ChangeColorAction(stigmata, new ActionListener(){\r
public void actionPerformed(ActionEvent e){\r
ChangeColorAction action = (ChangeColorAction)e.getSource();\r
import jp.naist.se.stigmata.ui.swing.Messages;\r
import jp.naist.se.stigmata.ui.swing.PopupButton;\r
import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
-import jp.naist.se.stigmata.ui.swing.Utility;\r
+import jp.naist.se.stigmata.ui.swing.GUIUtility;\r
import jp.naist.se.stigmata.ui.swing.actions.ChangeColorAction;\r
import jp.naist.se.stigmata.ui.swing.actions.SaveAction;\r
import jp.naist.se.stigmata.ui.swing.mds.mark.DrawerFactory;\r
saveCoordinate.setDescrpition(Messages.getString("savelocation.description"));\r
\r
PopupButton colorButton = new PopupButton(\r
- Utility.createButton("updatecolor", pointColorAction)\r
+ GUIUtility.createButton("updatecolor", pointColorAction)\r
);\r
- colorButton.addMenuItem(Utility.createJMenuItem("updateovercolor", overColorAction));\r
+ colorButton.addMenuItem(GUIUtility.createJMenuItem("updateovercolor", overColorAction));\r
PopupButton saveButton = new PopupButton(\r
- Utility.createButton("savemds", saveMDSAction)\r
+ GUIUtility.createButton("savemds", saveMDSAction)\r
);\r
- saveButton.addMenuItem(Utility.createJMenuItem("savelocation", saveCoordinate));\r
+ saveButton.addMenuItem(GUIUtility.createJMenuItem("savelocation", saveCoordinate));\r
\r
JLabel numberOfDotsLabel = new JLabel(String.valueOf(set.length));\r
- Utility.decorateJComponent(numberOfDotsLabel, "mdsgraph.count");\r
+ GUIUtility.decorateJComponent(numberOfDotsLabel, "mdsgraph.count");\r
// set the number of dots of each groups\r
JComboBox numberOfGroupsLabelCombo = new JComboBox();\r
GeometoryType[] types = GeometoryType.values();\r
numberOfGroupsLabelCombo.setEditable(false);\r
Dimension dim = new Dimension(100, numberOfGroupsLabelCombo.getPreferredSize().height);\r
numberOfGroupsLabelCombo.setRenderer(new ClippedLRListCellRenderer(dim, 50));\r
- Utility.decorateJComponent(numberOfGroupsLabelCombo, "mdsgraph.group");\r
+ GUIUtility.decorateJComponent(numberOfGroupsLabelCombo, "mdsgraph.group");\r
\r
JPanel north = new JPanel(new GridLayout(1, 2));\r
north.add(numberOfDotsLabel);\r
--- /dev/null
+package jp.naist.se.stigmata.utils;
+
+import java.io.File;
+
+public class Utility{
+ /**
+ * no instance is created
+ */
+ private Utility(){
+ }
+
+ public static void deleteDirectory(File dir){
+ File[] files = dir.listFiles();
+ for(File file: files){
+ if(file.isDirectory()){
+ deleteDirectory(file);
+ }
+ else{
+ file.delete();
+ }
+ }
+ dir.delete();
+ }
+
+ public static String array2String(String[] values){
+ StringBuilder builder = new StringBuilder();
+ for(int i = 0; i < values.length; i++){
+ if(i != 0)
+ builder.append(", ");
+ builder.append(values[i]);
+ }
+ return new String(builder);
+ }
+}
savebirthmark.button.tooltip=Save extracted birthmarks to a file.\r
savebirthmark.button.icon=disk.png\r
\r
+savebirthmark.menuitem.label=${savebirthmark.button.label}\r
+savebirthmark.menuitem.tooltip=${savebirthmark.button.tooltip}\r
+savebirthmark.menuitem.icon=${savebirthmark.button.icon}\r
+\r
+comparebirthmark.button.label=Compare Round Robin\r
+comparebirthmark.button.tooltip=Compare extracted birthmarks by round robin\r
+comparebirthmark.button.icon=arrow_right_left.png\r
+\r
+comparebirthmark.menuitem.label=${comparebirthmark.button.label}\r
+comparebirthmark.menuitem.tooltip=${comparebirthmark.button.tooltip}\r
+comparebirthmark.menuitem.icon=${comparebirthmark.button.icon}\r
+\r
birthmarktree.root.label=Birthmark\r
\r
################################################\r
target2.name.button.label=${target.TARGET2} class name\r
both.name.button.label=${target.BOTH} class name\r
\r
+############################################################\r
+# history pane\r
+############################################################\r
+\r
+history.tab.label=History\r
+history.tab.tooltip=Extracted birthmark history\r
+\r
+historylist.border=History List\r
+historylist.tooltip=Stored histories.\r
+\r
+historylocation.border=Histories Location\r
+historylocation.tooltip=Location list of storing histories\r
+\r
+showhistory.button.label=Show\r
+showhistory.button.tooltip=Show extracted birthmark history on tab.\r
+showhistory.button.icon=database_go.png\r
+\r
+deletehistory.button.label=Delete\r
+deletehistory.button.tooltip=Delete selected history from store target.\r
+deletehistory.button.icon=database_delete.png\r
+\r
+refreshhistory.button.label=Refresh\r
+refreshhistory.button.tooltip=Refresh birthmark history\r
+refreshhistory.button.icon=database_refresh.png\r
+\r
+showhistory.menuitem.label=${showhistory.button.label}\r
+showhistory.menuitem.tooltip=${showhistory.button.tooltip}\r
+showhistory.menuitem.icon=${showhistory.button.icon}\r
+\r
+deletehistory.menuitem.label=${deletehistory.button.label}\r
+deletehistory.menuitem.tooltip=${deletehistory.button.tooltip}\r
+deletehistory.menuitem.icon=${deletehistory.button.icon}\r
+\r
+refreshhistory.menuitem.label=${refreshhistory.button.label}\r
+refreshhistory.menuitem.tooltip=${refreshhistory.button.tooltip}\r
+refreshhistory.menuitem.icon=${refreshhistory.button.icon}\r
+\r
################################################\r
# update table cell color\r
################################################\r
savebirthmark.button.label=\95Û\91¶\r
savebirthmark.button.tooltip=\92\8a\8fo\82³\82ê\82½\83o\81[\83X\83}\81[\83N\82ð\95Û\91¶\82µ\82Ü\82·\81D\r
\r
-birthmarktree.root.label=\83o\81[\83X\83}\81[\83N\r
+comparebirthmark.button.label=\91\8d\93\96\82½\82è\82Å\94ä\8ar\r
+comparebirthmark.button.tooltip=\92\8a\8fo\82³\82ê\82½\83o\81[\83X\83}\81[\83N\82ð\91\8d\93\96\82½\82è\82Å\94ä\8ar\82µ\82Ü\82·\81D\r
\r
+birthmarktree.root.label=\83o\81[\83X\83}\81[\83N\r
\r
################################################\r
# graphpane\r
target2.name.button.label=${target.TARGET2}\83N\83\89\83X\96¼\r
both.name.button.label=${target.BOTH}\83N\83\89\83X\96¼\r
\r
+############################################################\r
+# history pane\r
+############################################################\r
+\r
+history.tab.label=\83o\81[\83X\83}\81[\83N\92\8a\8fo\97\9a\97ð\r
+history.tab.tooltip=\92\8a\8fo\82µ\82½\83o\81[\83X\83}\81[\83N\82Ì\97\9a\97ð\r
+\r
+historylist.border=\92\8a\8fo\97\9a\97ð\r
+historylist.tooltip=\8d¡\82Ü\82Å\82É\83o\81[\83X\83}\81[\83N\82ð\92\8a\8fo\82µ\82½\97\9a\97ð\82Ì\83\8a\83X\83g\r
+\r
+historylocation.border=\92\8a\8fo\97\9a\97ð\82Ì\95Û\91¶\8fê\8f\8a\r
+historylocation.tooltip=\92\8a\8fo\97\9a\97ð\82Ì\95Û\91¶\8fê\8f\8a\82Ì\83\8a\83X\83g\r
+\r
+showhistory.button.label=\97\9a\97ð\82Ì\95\\8e¦\r
+showhistory.button.tooltip=\92\8a\8fo\82µ\82½\97\9a\97ð\82ð\95\\8e¦\82µ\82Ü\82·\81D\r
+\r
+refreshhistory.button.label=\83\8a\83t\83\8c\83b\83V\83\85\r
+refreshhistory.button.tooltip=\97\9a\97ð\82ð\8c\9f\8dõ\82µ\82È\82¨\82µ\82Ü\82·\81D\r
+\r
+deletehistory.button.label=\8dí\8f\9c\r
+deletehistory.button.tooltip=\91I\91ð\82³\82ê\82½\97\9a\97ð\82ð\8dí\8f\9c\82µ\82Ü\82·\81i\97\9a\97ð\83t\83@\83C\83\8b\82ð\8dí\8f\9c\82µ\82Ü\82·\81j\81D\r
+\r
################################################\r
# update table cell color\r
################################################\r