* Author
Name: Haruaki TAMADA, Ph.D.
- Affiliation: Software Engineering Laboratory, Graduate School of
- Information and Science, Nara Institute of Science and
- Technology
- E-mail: harua-t[ at ]is.naist.jp
- Web Page: http://se.naist.jp/~harua-t/
+ Affiliation: Department of Computer Science, Faculty of Computer
+ Science and Engineering, Kyoto Sangyo University
+ E-mail: tama3[ at ]users.sourceforge.jp
+ Web Page: http://stigmata.sourceforge.jp/
Please notify us some bugs and requests to
mailto:stigmata-info[ at ]lists.sourceforge.jp
<?xml version="1.0" encoding="UTF-8"?>\r
<project>
<modelVersion>4.0.0</modelVersion>
- <groupId>jp.naist.se</groupId>
+ <groupId>jp.sourceforge</groupId>
<artifactId>stigmata</artifactId>
<version>1.2.0</version>
<name>stigmata</name>
<developer>
<id>tama</id>
<name>Haruaki TAMADA</name>
- <email>harua-t[ at ]is.naist.jp</email>
- <organization>NAIST, Software Engineering Lab.</organization>
- <organizationUrl>http://se.naist.jp/</organizationUrl>
+ <email>tama3[ at ]users.sourceforge.jp</email>
+ <organization>sourceforge.jp</organization>
+ <organizationUrl>http://sourceforge.jp/</organizationUrl>
<timezone>-9</timezone>
</developer>
</developers>
<organization>
- <name>Software Engineering Lab., NAIST</name>
- <url>http://se.naist.jp/</url>
+ <name>Kyoto Sangyo University, Japan</name>
+ <url>http://www.kyoto-su.ac.jp/</url>
</organization>
<dependencies>
<configuration>
<archive>
<manifest>
- <mainClass>jp.naist.se.stigmata.Main</mainClass>
+ <mainClass>jp.sourceforge.stigmata.Main</mainClass>
<addClasspath>true</addClasspath>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
\r
VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "Stigmata"\r
VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "Stigmata: Java birthmark toolkit"\r
-VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "Software Engineering Lab., NAIST, Japan"\r
+VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "Kyoto Sangyo University, Japan"\r
VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductVersion" "${VERSION}"\r
-VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "Copyright (C) 2004-2007 by Haruaki Tamada"\r
+VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "Copyright (C) 2004-2008 by Haruaki Tamada"\r
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Java birthmark toolkit"\r
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${VERSION}"\r
\r
File "..\..\target\commons-logging-1.0.3.jar"\r
File "..\..\target\BrowserLauncher2-1.3.jar"\r
File "..\..\target\Jama-1.0.2.jar"\r
- File "..\..\target\xmlcli-1.2.2.jar"\r
File "..\..\target\asm-all-2.2.3.jar"\r
File "..\..\target\stax-1.2.0.jar"\r
File "..\..\target\stax-api-1.0.1.jar"\r
+ File "..\..\target\xmlcli-1.2.2.jar"\r
+ File "..\..\target\mds-1.0.0.jar"\r
+ File "..\..\target\i18n-1.0.1.jar"\r
StrCpy $R0 '$R0 -Dexecution.directory="$EXEDIR" -jar "${JARFILE}" $R1'\r
\r
!ifdef SPLASH_IMAGE\r
\r
ExecWait "$R0"\r
Delete "$TEMP\${JARFILE}"\r
- Delete "$TEMP\target\commons-beanutils-1.7.0.jar"\r
- Delete "$TEMP\target\commons-cli-1.1.jar"\r
- Delete "$TEMP\target\commons-dbutils-1.1.jar"\r
- Delete "$TEMP\target\commons-logging-1.0.3.jar"\r
- Delete "$TEMP\target\BrowserLauncher2-1.3.jar"\r
- Delete "$TEMP\target\Jama-1.0.2.jar"\r
- Delete "$TEMP\target\xmlcli-1.2.2.jar"\r
- Delete "$TEMP\target\asm-all-2.2.3.jar"\r
- Delete "$TEMP\target\stax-1.2.0.jar"\r
- Delete "$TEMP\target\stax-api-1.0.1.jar"\r
+ Delete "$TEMP\commons-beanutils-1.7.0.jar"\r
+ Delete "$TEMP\commons-cli-1.1.jar"\r
+ Delete "$TEMP\commons-dbutils-1.1.jar"\r
+ Delete "$TEMP\commons-logging-1.0.3.jar"\r
+ Delete "$TEMP\BrowserLauncher2-1.3.jar"\r
+ Delete "$TEMP\Jama-1.0.2.jar"\r
+ Delete "$TEMP\asm-all-2.2.3.jar"\r
+ Delete "$TEMP\stax-1.2.0.jar"\r
+ Delete "$TEMP\stax-api-1.0.1.jar"\r
+ Delete "$TEMP\xmlcli-1.2.2.jar"\r
+ Delete "$TEMP\mds-1.0.0.jar"\r
+ Delete "$TEMP\i18n-1.0.1.jar"\r
\r
Quit\r
\r
Pop $R2\r
Pop $R1\r
Exch $R0\r
-FunctionEnd
\ No newline at end of file
+FunctionEnd\r
<key>Java</key>
<dict>
<key>MainClass</key>
- <string>jp.naist.se.stigmata.Main</string>
+ <string>jp.sourceforge.stigmata.Main</string>
<key>JVMVersion</key>
<string>1.5+</string>
<key>ClassPath</key>
<string>$JAVAROOT/BrowserLauncher2-1.3.jar</string>
<string>$JAVAROOT/Jama-1.0.2.jar</string>
<string>$JAVAROOT/xmlcli-1.2.2.jar</string>
+ <string>$JAVAROOT/mds-1.0.0.jar</string>
+ <string>$JAVAROOT/i18n-1.0.1.jar</string>
</array>
<key>Properties</key>
<dict>
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-/**\r
- * Thrown an application fails to launch in initialization.\r
- * This error causes invalid deployment. \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ApplicationInitializationError extends Error{\r
- private static final long serialVersionUID = 32097456654328L;\r
-\r
- public ApplicationInitializationError(){\r
- }\r
-\r
- public ApplicationInitializationError(String message){\r
- super(message);\r
- }\r
-\r
- public ApplicationInitializationError(String message, Throwable cause){\r
- super(message, cause);\r
- }\r
-\r
- public ApplicationInitializationError(Throwable cause){\r
- super(cause);\r
- }\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+/**
+ * Thrown an application fails to launch in initialization.
+ * This error causes invalid deployment.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ApplicationInitializationError extends Error{
+ private static final long serialVersionUID = 32097456654328L;
+
+ public ApplicationInitializationError(){
+ }
+
+ public ApplicationInitializationError(String message){
+ super(message);
+ }
+
+ public ApplicationInitializationError(String message, Throwable cause){
+ super(message, cause);
+ }
+
+ public ApplicationInitializationError(Throwable cause){
+ super(cause);
+ }
+}
-package jp.naist.se.stigmata;
+package jp.sourceforge.stigmata;
/*
* $Id$
-package jp.naist.se.stigmata;
+package jp.sourceforge.stigmata;
/*
* $Id$
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-/**\r
- * Thrown to indicate failed to compare two birthmarks. \r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkComparisonFailedException extends BirthmarkException{\r
- private static final long serialVersionUID = 3194872113405859851L;\r
-\r
- public BirthmarkComparisonFailedException(){\r
- }\r
-\r
- public BirthmarkComparisonFailedException(String message){\r
- super(message);\r
- }\r
-\r
- public BirthmarkComparisonFailedException(Throwable cause){\r
- super(cause);\r
- }\r
-\r
- public BirthmarkComparisonFailedException(String message, Throwable cause){\r
- super(message, cause);\r
- }\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+/**
+ * Thrown to indicate failed to compare two birthmarks.
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkComparisonFailedException extends BirthmarkException{
+ private static final long serialVersionUID = 3194872113405859851L;
+
+ public BirthmarkComparisonFailedException(){
+ }
+
+ public BirthmarkComparisonFailedException(String message){
+ super(message);
+ }
+
+ public BirthmarkComparisonFailedException(Throwable cause){
+ super(cause);
+ }
+
+ public BirthmarkComparisonFailedException(String message, Throwable cause){
+ super(message, cause);
+ }
+}
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collections;\r
-import java.util.HashMap;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-/**\r
- * Birthmark runtime context.\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkContext{\r
- private BirthmarkEnvironment environment;\r
-\r
- private ComparisonMethod method = ComparisonMethod.ROUND_ROBIN_SAME_PAIR;\r
- private ExtractionUnit unit = ExtractionUnit.CLASS;\r
- private BirthmarkStoreTarget store = BirthmarkStoreTarget.MEMORY;\r
-\r
- private List<String> birthmarkTypes = new ArrayList<String>();\r
- private List<String> filterTypes = new ArrayList<String>();\r
- private Map<String, String> nameMappings = new HashMap<String, String>();\r
-\r
- /**\r
- * self constructor.\r
- */\r
- public BirthmarkContext(BirthmarkContext context){\r
- this.environment = context.getEnvironment();\r
- this.method = context.getComparisonMethod();\r
- this.unit = context.getExtractionUnit();\r
- this.birthmarkTypes = new ArrayList<String>(context.birthmarkTypes);\r
- this.filterTypes = new ArrayList<String>(context.filterTypes);\r
- this.nameMappings = new HashMap<String, String>(context.nameMappings);\r
- }\r
-\r
- public BirthmarkContext(BirthmarkEnvironment environment){\r
- this.environment = environment;\r
- }\r
-\r
- public BirthmarkEnvironment getEnvironment(){\r
- return environment;\r
- }\r
-\r
- public boolean hasNameMapping(){\r
- return getNameMappingCount() > 0;\r
- }\r
-\r
- public int getNameMappingCount(){\r
- return nameMappings.size();\r
- }\r
-\r
- public String getNameMapping(String key){\r
- return nameMappings.get(key);\r
- }\r
-\r
- public void addNameMapping(String name1, String name2){\r
- nameMappings.put(name1, name2);\r
- }\r
-\r
- public void removeNameMapping(String name1){\r
- nameMappings.remove(name1);\r
- }\r
-\r
- public Map<String, String> getNameMappings(){\r
- return Collections.unmodifiableMap(nameMappings);\r
- }\r
-\r
- public Iterator<Map.Entry<String, String>> nameMappingEntries(){\r
- return getNameMappings().entrySet().iterator();\r
- }\r
-\r
- public void setNameMappings(Map<String, String> mappings){\r
- nameMappings.clear();\r
- for(Iterator<Map.Entry<String, String>> i = mappings.entrySet().iterator(); i.hasNext(); ){\r
- Map.Entry<String, String> entry = i.next();\r
- addNameMapping(entry.getKey(), entry.getValue());\r
- }\r
- }\r
-\r
- public void setBirthmarkTypes(String[] types){\r
- birthmarkTypes.clear();\r
- for(int i = 0; i < types.length; i++){\r
- addBirthmarkType(types[i]);\r
- }\r
- }\r
-\r
- public void addBirthmarkType(String type){\r
- if(!birthmarkTypes.contains(type)){\r
- birthmarkTypes.add(type);\r
- }\r
- }\r
-\r
- public void removeBirthmarkType(String type){\r
- birthmarkTypes.remove(type);\r
- }\r
-\r
- public synchronized String[] getBirthmarkTypes(){\r
- return birthmarkTypes.toArray(new String[getBirthmarkTypeSize()]);\r
- }\r
-\r
- public int getBirthmarkTypeSize(){\r
- return birthmarkTypes.size();\r
- }\r
-\r
- public ComparisonMethod getComparisonMethod(){\r
- return method;\r
- }\r
-\r
- public void setComparisonMethod(ComparisonMethod method){\r
- this.method = method;\r
- }\r
-\r
- public ExtractionUnit getExtractionUnit(){\r
- return unit;\r
- }\r
-\r
- public void setExtractionUnit(ExtractionUnit unit){\r
- this.unit = unit;\r
- }\r
-\r
- public BirthmarkStoreTarget getStoreTarget(){\r
- return store;\r
- }\r
-\r
- public void setStoreTarget(BirthmarkStoreTarget store){\r
- this.store = store;\r
- }\r
-\r
- public boolean hasFilter(){\r
- return filterTypes.size() > 0;\r
- }\r
-\r
- public void setFilterTypes(String[] filterTypes){\r
- if(filterTypes != null){\r
- for(int i = 0; i < filterTypes.length; i++){\r
- addFilterType(filterTypes[i]);\r
- }\r
- }\r
- }\r
-\r
- public void addFilterType(String filterType){\r
- if(filterType != null){\r
- filterTypes.add(filterType);\r
- }\r
- }\r
-\r
- public void removeFilterType(String filterType){\r
- filterTypes.remove(filterType);\r
- }\r
-\r
- public synchronized String[] getFilterTypes(){\r
- return filterTypes.toArray(new String[getFilterTypesCount()]);\r
- }\r
-\r
- public Iterator<String> filterTypes(){\r
- return filterTypes.iterator();\r
- }\r
-\r
- public int getFilterTypesCount(){\r
- return filterTypes.size();\r
- }\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Birthmark runtime context.
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkContext{
+ private BirthmarkEnvironment environment;
+
+ private ComparisonMethod method = ComparisonMethod.ROUND_ROBIN_SAME_PAIR;
+ private ExtractionUnit unit = ExtractionUnit.CLASS;
+ private BirthmarkStoreTarget store = BirthmarkStoreTarget.MEMORY;
+
+ private List<String> birthmarkTypes = new ArrayList<String>();
+ private List<String> filterTypes = new ArrayList<String>();
+ private Map<String, String> nameMappings = new HashMap<String, String>();
+
+ /**
+ * self constructor.
+ */
+ public BirthmarkContext(BirthmarkContext context){
+ this.environment = context.getEnvironment();
+ this.method = context.getComparisonMethod();
+ this.unit = context.getExtractionUnit();
+ this.birthmarkTypes = new ArrayList<String>(context.birthmarkTypes);
+ this.filterTypes = new ArrayList<String>(context.filterTypes);
+ this.nameMappings = new HashMap<String, String>(context.nameMappings);
+ }
+
+ public BirthmarkContext(BirthmarkEnvironment environment){
+ this.environment = environment;
+ }
+
+ public BirthmarkEnvironment getEnvironment(){
+ return environment;
+ }
+
+ public boolean hasNameMapping(){
+ return getNameMappingCount() > 0;
+ }
+
+ public int getNameMappingCount(){
+ return nameMappings.size();
+ }
+
+ public String getNameMapping(String key){
+ return nameMappings.get(key);
+ }
+
+ public void addNameMapping(String name1, String name2){
+ nameMappings.put(name1, name2);
+ }
+
+ public void removeNameMapping(String name1){
+ nameMappings.remove(name1);
+ }
+
+ public Map<String, String> getNameMappings(){
+ return Collections.unmodifiableMap(nameMappings);
+ }
+
+ public Iterator<Map.Entry<String, String>> nameMappingEntries(){
+ return getNameMappings().entrySet().iterator();
+ }
+
+ public void setNameMappings(Map<String, String> mappings){
+ nameMappings.clear();
+ for(Iterator<Map.Entry<String, String>> i = mappings.entrySet().iterator(); i.hasNext(); ){
+ Map.Entry<String, String> entry = i.next();
+ addNameMapping(entry.getKey(), entry.getValue());
+ }
+ }
+
+ public void setBirthmarkTypes(String[] types){
+ birthmarkTypes.clear();
+ for(int i = 0; i < types.length; i++){
+ addBirthmarkType(types[i]);
+ }
+ }
+
+ public void addBirthmarkType(String type){
+ if(!birthmarkTypes.contains(type)){
+ birthmarkTypes.add(type);
+ }
+ }
+
+ public void removeBirthmarkType(String type){
+ birthmarkTypes.remove(type);
+ }
+
+ public synchronized String[] getBirthmarkTypes(){
+ return birthmarkTypes.toArray(new String[getBirthmarkTypeSize()]);
+ }
+
+ public int getBirthmarkTypeSize(){
+ return birthmarkTypes.size();
+ }
+
+ public ComparisonMethod getComparisonMethod(){
+ return method;
+ }
+
+ public void setComparisonMethod(ComparisonMethod method){
+ this.method = method;
+ }
+
+ public ExtractionUnit getExtractionUnit(){
+ return unit;
+ }
+
+ public void setExtractionUnit(ExtractionUnit unit){
+ this.unit = unit;
+ }
+
+ public BirthmarkStoreTarget getStoreTarget(){
+ return store;
+ }
+
+ public void setStoreTarget(BirthmarkStoreTarget store){
+ this.store = store;
+ }
+
+ public boolean hasFilter(){
+ return filterTypes.size() > 0;
+ }
+
+ public void setFilterTypes(String[] filterTypes){
+ if(filterTypes != null){
+ for(int i = 0; i < filterTypes.length; i++){
+ addFilterType(filterTypes[i]);
+ }
+ }
+ }
+
+ public void addFilterType(String filterType){
+ if(filterType != null){
+ filterTypes.add(filterType);
+ }
+ }
+
+ public void removeFilterType(String filterType){
+ filterTypes.remove(filterType);
+ }
+
+ public synchronized String[] getFilterTypes(){
+ return filterTypes.toArray(new String[getFilterTypesCount()]);
+ }
+
+ public Iterator<String> filterTypes(){
+ return filterTypes.iterator();
+ }
+
+ public int getFilterTypesCount(){
+ return filterTypes.size();
+ }
+}
-package jp.naist.se.stigmata;
+package jp.sourceforge.stigmata;
/*
* $Id$
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-/**\r
- * Thrown if extracting birthmark is failed to find a class definition.\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkElementClassNotFoundException extends\r
- BirthmarkExtractionFailedException {\r
- private static final long serialVersionUID = 3256723476854L;\r
-\r
- /**\r
- * class name list, which names are failed to load.\r
- */\r
- private List<String> classnames = new ArrayList<String>();\r
-\r
- /**\r
- * \r
- */\r
- public void addClassName(String name){\r
- classnames.add(name);\r
- }\r
-\r
- @Override\r
- public boolean isFailed(){\r
- return super.isFailed() || classnames.size() > 0;\r
- }\r
-\r
- /**\r
- * returns an array of class names which are failed loading.\r
- */\r
- public synchronized String[] getClassNames(){\r
- return classnames.toArray(new String[classnames.size()]);\r
- }\r
-\r
- @Override\r
- public String getMessage(){\r
- StringBuffer sb = new StringBuffer();\r
- boolean first = true;\r
- for(String value: classnames){\r
- if(!first){\r
- sb.append(", ");\r
- }\r
- sb.append(value);\r
- }\r
- return new String(sb);\r
- }\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Thrown if extracting birthmark is failed to find a class definition.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkElementClassNotFoundException extends
+ BirthmarkExtractionFailedException {
+ private static final long serialVersionUID = 3256723476854L;
+
+ /**
+ * class name list, which names are failed to load.
+ */
+ private List<String> classnames = new ArrayList<String>();
+
+ /**
+ *
+ */
+ public void addClassName(String name){
+ classnames.add(name);
+ }
+
+ @Override
+ public boolean isFailed(){
+ return super.isFailed() || classnames.size() > 0;
+ }
+
+ /**
+ * returns an array of class names which are failed loading.
+ */
+ public synchronized String[] getClassNames(){
+ return classnames.toArray(new String[classnames.size()]);
+ }
+
+ @Override
+ public String getMessage(){
+ StringBuffer sb = new StringBuffer();
+ boolean first = true;
+ for(String value: classnames){
+ if(!first){
+ sb.append(", ");
+ }
+ sb.append(value);
+ }
+ return new String(sb);
+ }
}
\ No newline at end of file
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.ByteArrayInputStream;\r
-import java.io.ByteArrayOutputStream;\r
-import java.io.File;\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.net.MalformedURLException;\r
-import java.util.ArrayList;\r
-import java.util.HashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Stack;\r
-\r
-import jp.naist.se.stigmata.birthmarks.extractors.BirthmarkExtractorFactory;\r
-import jp.naist.se.stigmata.event.BirthmarkEngineEvent;\r
-import jp.naist.se.stigmata.event.BirthmarkEngineListener;\r
-import jp.naist.se.stigmata.event.OperationStage;\r
-import jp.naist.se.stigmata.event.OperationType;\r
-import jp.naist.se.stigmata.event.WarningMessages;\r
-import jp.naist.se.stigmata.filter.ComparisonPairFilterManager;\r
-import jp.naist.se.stigmata.filter.FilteredComparisonResultSet;\r
-import jp.naist.se.stigmata.hook.Phase;\r
-import jp.naist.se.stigmata.hook.StigmataHookManager;\r
-import jp.naist.se.stigmata.reader.ClassFileArchive;\r
-import jp.naist.se.stigmata.reader.ClassFileEntry;\r
-import jp.naist.se.stigmata.reader.ClasspathContext;\r
-import jp.naist.se.stigmata.reader.DefaultClassFileArchive;\r
-import jp.naist.se.stigmata.reader.JarClassFileArchive;\r
-import jp.naist.se.stigmata.reader.WarClassFileArchive;\r
-import jp.naist.se.stigmata.result.CertainPairComparisonResultSet;\r
-import jp.naist.se.stigmata.result.RoundRobinComparisonResultSet;\r
-\r
-/**\r
- * core engine for extracting/comparing/filtering birthmarks.\r
- * \r
- * This class is not thread safe.\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkEngine{\r
- private BirthmarkEnvironment environment;\r
- private List<BirthmarkEngineListener> listeners = new ArrayList<BirthmarkEngineListener>();\r
- private Stack<WarningMessages> stack = new Stack<WarningMessages>();\r
- private WarningMessages warnings;\r
- private OperationType latestOperationType;\r
- private OperationType targetType;\r
- private BirthmarkExtractorFactory factory;\r
-\r
- /**\r
- * constructor.\r
- */\r
- public BirthmarkEngine(BirthmarkEnvironment env){\r
- this.environment = env;\r
- factory = new BirthmarkExtractorFactory(env);\r
- }\r
-\r
- /**\r
- * returns an environment of this object.\r
- */\r
- public BirthmarkEnvironment getEnvironment(){\r
- return environment;\r
- }\r
-\r
- public void addBirthmarkEngineListener(BirthmarkEngineListener listener){\r
- listeners.add(listener);\r
- }\r
-\r
- public void removeBirthmarkEngineListener(BirthmarkEngineListener listener){\r
- listeners.remove(listener);\r
- }\r
-\r
- /**\r
- * filters comparison of birthmarks from target files.\r
- * @see #extract(String[], BirthmarkContext)\r
- * @see #compare(String[], BirthmarkContext)\r
- * @see #filter(ComparisonResultSet)\r
- * @see BirthmarkContext#getFilterTypes()\r
- */\r
- public synchronized ComparisonResultSet filter(String[] target, BirthmarkContext context) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException, BirthmarkStoreException{\r
- operationStart(OperationType.FILTER_BIRTHMARKS);\r
-\r
- ComparisonResultSet crs = compare(target, context);\r
- crs = filter(crs);\r
-\r
- operationDone(OperationType.FILTER_BIRTHMARKS);\r
-\r
- return crs;\r
- }\r
-\r
- /**\r
- * filters comparison of birthmarks from given two targets targetx, and targetY\r
- * @see #extract(String[], String[], BirthmarkContext)\r
- * @see #compare(String[], String[], BirthmarkContext)\r
- * @see #filter(ComparisonResultSet)\r
- * @see BirthmarkContext#getFilterTypes()\r
- */\r
- public synchronized ComparisonResultSet filter(String[] targetX, String[] targetY, BirthmarkContext context) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException, BirthmarkStoreException{\r
- operationStart(OperationType.FILTER_BIRTHMARKS);\r
-\r
- ComparisonResultSet crs = compare(targetX, targetY, context);\r
- crs = filter(crs);\r
-\r
- operationDone(OperationType.FILTER_BIRTHMARKS);\r
-\r
- return crs;\r
- }\r
-\r
- /**\r
- * filters comparison of birthmarks from given extraction result set.\r
- * @see #compare(ExtractionResultSet)\r
- * @see #filter(ComparisonResultSet)\r
- * @see ExtractionResultSet#getContext()\r
- * @see BirthmarkContext#getFilterTypes()\r
- */\r
- public synchronized ComparisonResultSet filter(ExtractionResultSet er) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException{\r
- operationStart(OperationType.FILTER_BIRTHMARKS);\r
-\r
- ComparisonResultSet crs = compare(er);\r
- crs = filter(crs);\r
-\r
- operationDone(OperationType.FILTER_BIRTHMARKS);\r
-\r
- return crs;\r
- }\r
-\r
- /**\r
- * filters comparison of birthmarks.\r
- * @see ExtractionResultSet#getContext()\r
- * @see BirthmarkContext#getFilterTypes()\r
- */\r
- public synchronized ComparisonResultSet filter(ComparisonResultSet crs) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException{\r
- operationStart(OperationType.FILTER_BIRTHMARKS);\r
- StigmataHookManager.getInstance().runHook(Phase.BEFORE_FILTERING, crs.getContext());\r
-\r
- String[] filterTypes = crs.getContext().getFilterTypes();\r
-\r
- if(filterTypes != null){\r
- List<ComparisonPairFilterSet> filterList = new ArrayList<ComparisonPairFilterSet>();\r
- ComparisonPairFilterManager manager = environment.getFilterManager();\r
- for(int i = 0; i < filterTypes.length; i++){\r
- ComparisonPairFilterSet fset = manager.getFilterSet(filterTypes[i]);\r
- if(fset != null){\r
- filterList.add(fset);\r
- }\r
- else{\r
- warnings.addMessage(new FilterNotFoundException("filter not found"), filterTypes[i]);\r
- }\r
- }\r
- ComparisonPairFilterSet[] cpfs = filterList.toArray(new ComparisonPairFilterSet[filterList.size()]);\r
-\r
- crs = new FilteredComparisonResultSet(crs, cpfs);\r
- }\r
-\r
- StigmataHookManager.getInstance().runHook(Phase.AFTER_FILTERING, crs.getContext());\r
- operationDone(OperationType.FILTER_BIRTHMARKS);\r
-\r
- return crs;\r
- }\r
-\r
- /**\r
- * compares two given birthmarks and returns comparison pair.\r
- */\r
- public synchronized ComparisonPair compareDetails(BirthmarkSet bs1, BirthmarkSet bs2, BirthmarkContext context) throws BirthmarkComparisonFailedException{\r
- return new ComparisonPair(bs1, bs2, context);\r
- }\r
-\r
- public synchronized ComparisonResultSet compare(String[] target, BirthmarkContext context) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException, BirthmarkStoreException{\r
- operationStart(OperationType.COMPARE_BIRTHMARKS);\r
-\r
- ExtractionResultSet er = extract(target, context);\r
- ComparisonResultSet crs = compare(er);\r
-\r
- operationDone(OperationType.COMPARE_BIRTHMARKS);\r
-\r
- return crs;\r
- }\r
-\r
- public synchronized ComparisonResultSet compare(String[] targetX, String[] targetY, BirthmarkContext context) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException, BirthmarkStoreException{\r
- operationStart(OperationType.COMPARE_BIRTHMARKS);\r
-\r
- ExtractionResultSet er = extract(targetX, targetY, context);\r
- ComparisonResultSet crs = compare(er);\r
-\r
- operationDone(OperationType.COMPARE_BIRTHMARKS);\r
-\r
- return crs;\r
- }\r
-\r
- public synchronized ComparisonResultSet compare(ExtractionResultSet er) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException{\r
- operationStart(OperationType.COMPARE_BIRTHMARKS);\r
- BirthmarkContext context = er.getContext();\r
-\r
- StigmataHookManager.getInstance().runHook(Phase.BEFORE_COMPARISON, context);\r
- ComparisonResultSet crs = null;\r
- switch(context.getComparisonMethod()){\r
- case ROUND_ROBIN_SAME_PAIR:\r
- crs = new RoundRobinComparisonResultSet(er, true);\r
- break;\r
- case ROUND_ROBIN_WITHOUT_SAME_PAIR:\r
- crs = new RoundRobinComparisonResultSet(er, false);\r
- break;\r
- case ROUND_ROBIN_XY:\r
- crs = new RoundRobinComparisonResultSet(er, true);\r
- case GUESSED_PAIR:\r
- crs = new CertainPairComparisonResultSet(er);\r
- break;\r
- case SPECIFIED_PAIR:\r
- crs = new CertainPairComparisonResultSet(er, context.getNameMappings());\r
- break;\r
- }\r
-\r
- StigmataHookManager.getInstance().runHook(Phase.AFTER_COMPARISON, context);\r
- operationDone(OperationType.COMPARE_BIRTHMARKS);\r
-\r
- return crs;\r
- }\r
-\r
- public synchronized ExtractionResultSet extract(String[] target, BirthmarkContext context) throws BirthmarkExtractionFailedException, BirthmarkStoreException{\r
- operationStart(OperationType.EXTRACT_BIRTHMARKS);\r
- ExtractionResultSet er = extract(target, null, context);\r
- operationDone(OperationType.EXTRACT_BIRTHMARKS);\r
- return er;\r
- }\r
-\r
- public synchronized ExtractionResultSet extract(String[] targetX, String[] targetY, BirthmarkContext context) throws BirthmarkExtractionFailedException, BirthmarkStoreException{\r
- operationStart(OperationType.EXTRACT_BIRTHMARKS);\r
- ExtractionResultSet er = context.getEnvironment().getHistoryManager().createDefaultResultSet(context);\r
-\r
- try{\r
- StigmataHookManager.getInstance().runHook(Phase.BEFORE_EXTRACTION, context);\r
-\r
- switch(context.getComparisonMethod()){\r
- case ROUND_ROBIN_SAME_PAIR:\r
- case ROUND_ROBIN_WITHOUT_SAME_PAIR:\r
- er.setTableType(false);\r
- String[] targetXY = mergeTarget(targetX, targetY);\r
- extractImpl(targetXY, er, ExtractionTarget.TARGET_XY);\r
- break;\r
- case GUESSED_PAIR:\r
- case SPECIFIED_PAIR:\r
- case ROUND_ROBIN_XY:\r
- default:\r
- if(targetX == null || targetY == null){\r
- throw new BirthmarkExtractionFailedException("targetX or targetY is null");\r
- }\r
- er.setTableType(true);\r
- extractImpl(targetX, er, ExtractionTarget.TARGET_X);\r
- extractImpl(targetY, er, ExtractionTarget.TARGET_Y);\r
- break;\r
- }\r
- return er;\r
- } catch(IOException e){\r
- throw new BirthmarkExtractionFailedException(e);\r
- } finally{\r
- StigmataHookManager.getInstance().runHook(Phase.AFTER_EXTRACTION, context);\r
- operationDone(OperationType.EXTRACT_BIRTHMARKS);\r
- }\r
- }\r
-\r
- private String[] mergeTarget(String[] t1, String[] t2){\r
- List<String> list = new ArrayList<String>();\r
- addToList(list, t1);\r
- addToList(list, t2);\r
-\r
- return list.toArray(new String[list.size()]);\r
- }\r
-\r
- private void addToList(List<String> list, String[] target){\r
- if(target != null){\r
- for(String s: target){\r
- list.add(s);\r
- }\r
- }\r
- }\r
-\r
- private BirthmarkSet[] extractImpl(String[] target, ExtractionResultSet er, ExtractionTarget et) throws BirthmarkExtractionFailedException, IOException, BirthmarkStoreException{\r
- ClassFileArchive[] archives = createArchives(target, environment);\r
- BirthmarkContext context = er.getContext();\r
- ExtractionUnit unit = context.getExtractionUnit();\r
-\r
- BirthmarkSet[] extractResult = null;\r
- if(unit == ExtractionUnit.CLASS){\r
- extractFromClass(archives, er, et);\r
- }\r
- else if(unit == ExtractionUnit.PACKAGE){\r
- extractFromPackage(archives, er, et);\r
- }\r
- else if(unit == ExtractionUnit.ARCHIVE){\r
- extractFromProduct(archives, er, et);\r
- }\r
-\r
- return extractResult;\r
- }\r
-\r
- private byte[] inputStreamToByteArray(InputStream in) throws IOException{\r
- ByteArrayOutputStream bout = new ByteArrayOutputStream();\r
- int read;\r
- byte[] dataBuffer = new byte[512];\r
- while((read = in.read(dataBuffer, 0, dataBuffer.length)) != -1){\r
- bout.write(dataBuffer, 0, read);\r
- }\r
- byte[] data = bout.toByteArray();\r
-\r
- bout.close();\r
- return data;\r
- }\r
-\r
- private void extractFromPackage(ClassFileArchive[] archives, ExtractionResultSet er, ExtractionTarget et) throws IOException, BirthmarkExtractionFailedException{\r
- Map<String, BirthmarkSet> map = new HashMap<String, BirthmarkSet>();\r
- BirthmarkContext context = er.getContext();\r
-\r
- for(ClassFileArchive archive: archives){\r
- for(ClassFileEntry entry: archive){\r
- try{\r
- String name = entry.getClassName();\r
- String packageName = parsePackageName(name);\r
- BirthmarkSet bs = map.get(packageName);\r
- if(bs == null){\r
- bs = new BirthmarkSet(packageName, archive.getLocation());\r
- map.put(packageName, bs);\r
- }\r
-\r
- byte[] data = inputStreamToByteArray(entry.getLocation().openStream());\r
- for(String birthmarkType: context.getBirthmarkTypes()){\r
- try{\r
- BirthmarkExtractor extractor = factory.getExtractor(birthmarkType);\r
- if(extractor.isAcceptable(ExtractionUnit.PACKAGE)){\r
- Birthmark b = bs.getBirthmark(extractor.getProvider().getType());\r
- if(b == null){\r
- b = extractor.createBirthmark();\r
- bs.addBirthmark(b);\r
- }\r
- extractor.extract(b, new ByteArrayInputStream(data), er.getEnvironment());\r
- }\r
- } catch(ExtractorNotFoundException e){\r
- warnings.addMessage(e, birthmarkType);\r
- }\r
- }\r
- } catch(IOException e){\r
- warnings.addMessage(e, archive.getName());\r
- }\r
- }\r
- }\r
- try{\r
- for(BirthmarkSet bs: map.values()){\r
- er.addBirthmarkSet(et, bs);\r
- }\r
- }catch(BirthmarkStoreException e){\r
- }\r
- }\r
-\r
- private String parsePackageName(String name){\r
- String n = name.replace('/', '.');\r
- int index = n.lastIndexOf('.');\r
- if(index > 0){\r
- n = n.substring(0, index - 1);\r
- }\r
-\r
- return n;\r
- }\r
-\r
- private void extractFromClass(ClassFileArchive[] archives, ExtractionResultSet er,\r
- ExtractionTarget et) throws IOException, BirthmarkExtractionFailedException, BirthmarkStoreException{\r
- BirthmarkContext context = er.getContext();\r
-\r
- for(ClassFileArchive archive: archives){\r
- for(ClassFileEntry entry: archive){\r
- try{\r
- BirthmarkSet birthmarkset = new BirthmarkSet(entry.getClassName(), entry.getLocation());\r
- byte[] data = inputStreamToByteArray(entry.getLocation().openStream());\r
-\r
- for(String birthmarkType: context.getBirthmarkTypes()){\r
- try{\r
- BirthmarkExtractor extractor = factory.getExtractor(birthmarkType);\r
- if(extractor.isAcceptable(ExtractionUnit.CLASS)){\r
- Birthmark b = extractor.extract(new ByteArrayInputStream(data), er.getEnvironment());\r
- birthmarkset.addBirthmark(b);\r
- }\r
- } catch(ExtractorNotFoundException e){\r
- warnings.addMessage(e, birthmarkType);\r
- }\r
- }\r
- er.addBirthmarkSet(et, birthmarkset);\r
- } catch(IOException e){\r
- warnings.addMessage(e, entry.getClassName());\r
- }\r
- }\r
- }\r
- }\r
-\r
- private void extractFromProduct(ClassFileArchive[] archives, ExtractionResultSet er, ExtractionTarget et) throws IOException, BirthmarkExtractionFailedException, BirthmarkStoreException{\r
- BirthmarkContext context = er.getContext();\r
-\r
- for(ClassFileArchive archive: archives){\r
- BirthmarkSet birthmarkset = new BirthmarkSet(archive.getName(), archive.getLocation());\r
-\r
- for(ClassFileEntry entry: archive){\r
- try{\r
- byte[] data = inputStreamToByteArray(entry.getLocation().openStream());\r
- for(String birthmarkType: context.getBirthmarkTypes()){\r
- try{\r
- BirthmarkExtractor extractor = factory.getExtractor(birthmarkType);\r
- if(extractor.isAcceptable(ExtractionUnit.ARCHIVE)){\r
- Birthmark b = birthmarkset.getBirthmark(birthmarkType);\r
- if(b == null){\r
- b = extractor.createBirthmark();\r
- birthmarkset.addBirthmark(b);\r
- }\r
- extractor.extract(b, new ByteArrayInputStream(data), er.getEnvironment());\r
- }\r
- } catch(ExtractorNotFoundException e){\r
- warnings.addMessage(e, birthmarkType);\r
- } \r
- }\r
- } catch(IOException e){\r
- warnings.addMessage(e, entry.getClassName());\r
- }\r
- }\r
- if(birthmarkset.getBirthmarksCount() != 0){\r
- er.addBirthmarkSet(et, birthmarkset);\r
- }\r
- }\r
- }\r
-\r
- private ClassFileArchive[] createArchives(String[] files, BirthmarkEnvironment environment) throws IOException, MalformedURLException{\r
- ClasspathContext bytecode = environment.getClasspathContext();\r
- List<ClassFileArchive> archives = new ArrayList<ClassFileArchive>();\r
- for(int i = 0; i < files.length; i++){\r
- try{\r
- if(files[i].endsWith(".class")){\r
- archives.add(new DefaultClassFileArchive(files[i]));\r
- }\r
- else if(files[i].endsWith(".jar") || files[i].endsWith(".zip")){\r
- archives.add(new JarClassFileArchive(files[i]));\r
- bytecode.addClasspath(new File(files[i]).toURI().toURL());\r
- }\r
- else if(files[i].endsWith(".war")){\r
- archives.add(new WarClassFileArchive(files[i]));\r
- }\r
- } catch(IOException e){\r
- warnings.addMessage(e, files[i]);\r
- }\r
- }\r
- return archives.toArray(new ClassFileArchive[archives.size()]);\r
- }\r
-\r
- private void operationStart(OperationType type){\r
- if(warnings == null){\r
- warnings = new WarningMessages(type);\r
- fireEvent(new BirthmarkEngineEvent(OperationStage.OPERATION_START, type, warnings));\r
- latestOperationType = type;\r
- targetType = type;\r
- }\r
- stack.push(warnings);\r
- /*\r
- * call subOperationStart method only once when some operation is occured.\r
- * Ex. extraction, comparison, filtering\r
- */\r
- if(latestOperationType != type){\r
- fireEvent(new BirthmarkEngineEvent(OperationStage.SUB_OPERATION_START, type, warnings));\r
- latestOperationType = type;\r
- }\r
- }\r
-\r
- private void operationDone(OperationType type){\r
- if(latestOperationType != type && targetType != type){\r
- fireEvent(new BirthmarkEngineEvent(OperationStage.SUB_OPERATION_DONE, type, warnings));\r
- latestOperationType = type;\r
- }\r
- stack.pop();\r
- if(stack.size() == 0){\r
- fireEvent(new BirthmarkEngineEvent(OperationStage.OPERATION_DONE, type, warnings));\r
- warnings = null;\r
- latestOperationType = null;\r
- }\r
- }\r
-\r
- private void fireEvent(BirthmarkEngineEvent e){\r
- for(BirthmarkEngineListener listener: listeners){\r
- switch(e.getStage()){\r
- case OPERATION_START:\r
- listener.operationStart(e);\r
- break;\r
- case SUB_OPERATION_START:\r
- listener.subOperationStart(e);\r
- break;\r
- case SUB_OPERATION_DONE:\r
- listener.subOperationDone(e);\r
- break;\r
- case OPERATION_DONE:\r
- listener.operationDone(e);\r
- break;\r
- default:\r
- throw new InternalError("unknown stage: " + e.getStage());\r
- }\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Stack;
+
+import jp.sourceforge.stigmata.birthmarks.extractors.BirthmarkExtractorFactory;
+import jp.sourceforge.stigmata.event.BirthmarkEngineEvent;
+import jp.sourceforge.stigmata.event.BirthmarkEngineListener;
+import jp.sourceforge.stigmata.event.OperationStage;
+import jp.sourceforge.stigmata.event.OperationType;
+import jp.sourceforge.stigmata.event.WarningMessages;
+import jp.sourceforge.stigmata.filter.ComparisonPairFilterManager;
+import jp.sourceforge.stigmata.filter.FilteredComparisonResultSet;
+import jp.sourceforge.stigmata.hook.Phase;
+import jp.sourceforge.stigmata.hook.StigmataHookManager;
+import jp.sourceforge.stigmata.reader.ClassFileArchive;
+import jp.sourceforge.stigmata.reader.ClassFileEntry;
+import jp.sourceforge.stigmata.reader.ClasspathContext;
+import jp.sourceforge.stigmata.reader.DefaultClassFileArchive;
+import jp.sourceforge.stigmata.reader.JarClassFileArchive;
+import jp.sourceforge.stigmata.reader.WarClassFileArchive;
+import jp.sourceforge.stigmata.result.CertainPairComparisonResultSet;
+import jp.sourceforge.stigmata.result.RoundRobinComparisonResultSet;
+
+/**
+ * core engine for extracting/comparing/filtering birthmarks.
+ *
+ * This class is not thread safe.
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkEngine{
+ private BirthmarkEnvironment environment;
+ private List<BirthmarkEngineListener> listeners = new ArrayList<BirthmarkEngineListener>();
+ private Stack<WarningMessages> stack = new Stack<WarningMessages>();
+ private WarningMessages warnings;
+ private OperationType latestOperationType;
+ private OperationType targetType;
+ private BirthmarkExtractorFactory factory;
+
+ /**
+ * constructor.
+ */
+ public BirthmarkEngine(BirthmarkEnvironment env){
+ this.environment = env;
+ factory = new BirthmarkExtractorFactory(env);
+ }
+
+ /**
+ * returns an environment of this object.
+ */
+ public BirthmarkEnvironment getEnvironment(){
+ return environment;
+ }
+
+ public void addBirthmarkEngineListener(BirthmarkEngineListener listener){
+ listeners.add(listener);
+ }
+
+ public void removeBirthmarkEngineListener(BirthmarkEngineListener listener){
+ listeners.remove(listener);
+ }
+
+ /**
+ * filters comparison of birthmarks from target files.
+ * @see #extract(String[], BirthmarkContext)
+ * @see #compare(String[], BirthmarkContext)
+ * @see #filter(ComparisonResultSet)
+ * @see BirthmarkContext#getFilterTypes()
+ */
+ public synchronized ComparisonResultSet filter(String[] target, BirthmarkContext context) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException, BirthmarkStoreException{
+ operationStart(OperationType.FILTER_BIRTHMARKS);
+
+ ComparisonResultSet crs = compare(target, context);
+ crs = filter(crs);
+
+ operationDone(OperationType.FILTER_BIRTHMARKS);
+
+ return crs;
+ }
+
+ /**
+ * filters comparison of birthmarks from given two targets targetx, and targetY
+ * @see #extract(String[], String[], BirthmarkContext)
+ * @see #compare(String[], String[], BirthmarkContext)
+ * @see #filter(ComparisonResultSet)
+ * @see BirthmarkContext#getFilterTypes()
+ */
+ public synchronized ComparisonResultSet filter(String[] targetX, String[] targetY, BirthmarkContext context) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException, BirthmarkStoreException{
+ operationStart(OperationType.FILTER_BIRTHMARKS);
+
+ ComparisonResultSet crs = compare(targetX, targetY, context);
+ crs = filter(crs);
+
+ operationDone(OperationType.FILTER_BIRTHMARKS);
+
+ return crs;
+ }
+
+ /**
+ * filters comparison of birthmarks from given extraction result set.
+ * @see #compare(ExtractionResultSet)
+ * @see #filter(ComparisonResultSet)
+ * @see ExtractionResultSet#getContext()
+ * @see BirthmarkContext#getFilterTypes()
+ */
+ public synchronized ComparisonResultSet filter(ExtractionResultSet er) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException{
+ operationStart(OperationType.FILTER_BIRTHMARKS);
+
+ ComparisonResultSet crs = compare(er);
+ crs = filter(crs);
+
+ operationDone(OperationType.FILTER_BIRTHMARKS);
+
+ return crs;
+ }
+
+ /**
+ * filters comparison of birthmarks.
+ * @see ExtractionResultSet#getContext()
+ * @see BirthmarkContext#getFilterTypes()
+ */
+ public synchronized ComparisonResultSet filter(ComparisonResultSet crs) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException{
+ operationStart(OperationType.FILTER_BIRTHMARKS);
+ StigmataHookManager.getInstance().runHook(Phase.BEFORE_FILTERING, crs.getContext());
+
+ String[] filterTypes = crs.getContext().getFilterTypes();
+
+ if(filterTypes != null){
+ List<ComparisonPairFilterSet> filterList = new ArrayList<ComparisonPairFilterSet>();
+ ComparisonPairFilterManager manager = environment.getFilterManager();
+ for(int i = 0; i < filterTypes.length; i++){
+ ComparisonPairFilterSet fset = manager.getFilterSet(filterTypes[i]);
+ if(fset != null){
+ filterList.add(fset);
+ }
+ else{
+ warnings.addMessage(new FilterNotFoundException("filter not found"), filterTypes[i]);
+ }
+ }
+ ComparisonPairFilterSet[] cpfs = filterList.toArray(new ComparisonPairFilterSet[filterList.size()]);
+
+ crs = new FilteredComparisonResultSet(crs, cpfs);
+ }
+
+ StigmataHookManager.getInstance().runHook(Phase.AFTER_FILTERING, crs.getContext());
+ operationDone(OperationType.FILTER_BIRTHMARKS);
+
+ return crs;
+ }
+
+ /**
+ * compares two given birthmarks and returns comparison pair.
+ */
+ public synchronized ComparisonPair compareDetails(BirthmarkSet bs1, BirthmarkSet bs2, BirthmarkContext context) throws BirthmarkComparisonFailedException{
+ return new ComparisonPair(bs1, bs2, context);
+ }
+
+ public synchronized ComparisonResultSet compare(String[] target, BirthmarkContext context) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException, BirthmarkStoreException{
+ operationStart(OperationType.COMPARE_BIRTHMARKS);
+
+ ExtractionResultSet er = extract(target, context);
+ ComparisonResultSet crs = compare(er);
+
+ operationDone(OperationType.COMPARE_BIRTHMARKS);
+
+ return crs;
+ }
+
+ public synchronized ComparisonResultSet compare(String[] targetX, String[] targetY, BirthmarkContext context) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException, BirthmarkStoreException{
+ operationStart(OperationType.COMPARE_BIRTHMARKS);
+
+ ExtractionResultSet er = extract(targetX, targetY, context);
+ ComparisonResultSet crs = compare(er);
+
+ operationDone(OperationType.COMPARE_BIRTHMARKS);
+
+ return crs;
+ }
+
+ public synchronized ComparisonResultSet compare(ExtractionResultSet er) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException{
+ operationStart(OperationType.COMPARE_BIRTHMARKS);
+ BirthmarkContext context = er.getContext();
+
+ StigmataHookManager.getInstance().runHook(Phase.BEFORE_COMPARISON, context);
+ ComparisonResultSet crs = null;
+ switch(context.getComparisonMethod()){
+ case ROUND_ROBIN_SAME_PAIR:
+ crs = new RoundRobinComparisonResultSet(er, true);
+ break;
+ case ROUND_ROBIN_WITHOUT_SAME_PAIR:
+ crs = new RoundRobinComparisonResultSet(er, false);
+ break;
+ case ROUND_ROBIN_XY:
+ crs = new RoundRobinComparisonResultSet(er, true);
+ case GUESSED_PAIR:
+ crs = new CertainPairComparisonResultSet(er);
+ break;
+ case SPECIFIED_PAIR:
+ crs = new CertainPairComparisonResultSet(er, context.getNameMappings());
+ break;
+ }
+
+ StigmataHookManager.getInstance().runHook(Phase.AFTER_COMPARISON, context);
+ operationDone(OperationType.COMPARE_BIRTHMARKS);
+
+ return crs;
+ }
+
+ public synchronized ExtractionResultSet extract(String[] target, BirthmarkContext context) throws BirthmarkExtractionFailedException, BirthmarkStoreException{
+ operationStart(OperationType.EXTRACT_BIRTHMARKS);
+ ExtractionResultSet er = extract(target, null, context);
+ operationDone(OperationType.EXTRACT_BIRTHMARKS);
+ return er;
+ }
+
+ public synchronized ExtractionResultSet extract(String[] targetX, String[] targetY, BirthmarkContext context) throws BirthmarkExtractionFailedException, BirthmarkStoreException{
+ operationStart(OperationType.EXTRACT_BIRTHMARKS);
+ ExtractionResultSet er = context.getEnvironment().getHistoryManager().createDefaultResultSet(context);
+
+ try{
+ StigmataHookManager.getInstance().runHook(Phase.BEFORE_EXTRACTION, context);
+
+ switch(context.getComparisonMethod()){
+ case ROUND_ROBIN_SAME_PAIR:
+ case ROUND_ROBIN_WITHOUT_SAME_PAIR:
+ er.setTableType(false);
+ String[] targetXY = mergeTarget(targetX, targetY);
+ extractImpl(targetXY, er, ExtractionTarget.TARGET_XY);
+ break;
+ case GUESSED_PAIR:
+ case SPECIFIED_PAIR:
+ case ROUND_ROBIN_XY:
+ default:
+ if(targetX == null || targetY == null){
+ throw new BirthmarkExtractionFailedException("targetX or targetY is null");
+ }
+ er.setTableType(true);
+ extractImpl(targetX, er, ExtractionTarget.TARGET_X);
+ extractImpl(targetY, er, ExtractionTarget.TARGET_Y);
+ break;
+ }
+ return er;
+ } catch(IOException e){
+ throw new BirthmarkExtractionFailedException(e);
+ } finally{
+ StigmataHookManager.getInstance().runHook(Phase.AFTER_EXTRACTION, context);
+ operationDone(OperationType.EXTRACT_BIRTHMARKS);
+ }
+ }
+
+ private String[] mergeTarget(String[] t1, String[] t2){
+ List<String> list = new ArrayList<String>();
+ addToList(list, t1);
+ addToList(list, t2);
+
+ return list.toArray(new String[list.size()]);
+ }
+
+ private void addToList(List<String> list, String[] target){
+ if(target != null){
+ for(String s: target){
+ list.add(s);
+ }
+ }
+ }
+
+ private BirthmarkSet[] extractImpl(String[] target, ExtractionResultSet er, ExtractionTarget et) throws BirthmarkExtractionFailedException, IOException, BirthmarkStoreException{
+ ClassFileArchive[] archives = createArchives(target, environment);
+ BirthmarkContext context = er.getContext();
+ ExtractionUnit unit = context.getExtractionUnit();
+
+ BirthmarkSet[] extractResult = null;
+ if(unit == ExtractionUnit.CLASS){
+ extractFromClass(archives, er, et);
+ }
+ else if(unit == ExtractionUnit.PACKAGE){
+ extractFromPackage(archives, er, et);
+ }
+ else if(unit == ExtractionUnit.ARCHIVE){
+ extractFromProduct(archives, er, et);
+ }
+
+ return extractResult;
+ }
+
+ private byte[] inputStreamToByteArray(InputStream in) throws IOException{
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ int read;
+ byte[] dataBuffer = new byte[512];
+ while((read = in.read(dataBuffer, 0, dataBuffer.length)) != -1){
+ bout.write(dataBuffer, 0, read);
+ }
+ byte[] data = bout.toByteArray();
+
+ bout.close();
+ return data;
+ }
+
+ private void extractFromPackage(ClassFileArchive[] archives, ExtractionResultSet er, ExtractionTarget et) throws IOException, BirthmarkExtractionFailedException{
+ Map<String, BirthmarkSet> map = new HashMap<String, BirthmarkSet>();
+ BirthmarkContext context = er.getContext();
+
+ for(ClassFileArchive archive: archives){
+ for(ClassFileEntry entry: archive){
+ try{
+ String name = entry.getClassName();
+ String packageName = parsePackageName(name);
+ BirthmarkSet bs = map.get(packageName);
+ if(bs == null){
+ bs = new BirthmarkSet(packageName, archive.getLocation());
+ map.put(packageName, bs);
+ }
+
+ byte[] data = inputStreamToByteArray(entry.getLocation().openStream());
+ for(String birthmarkType: context.getBirthmarkTypes()){
+ try{
+ BirthmarkExtractor extractor = factory.getExtractor(birthmarkType);
+ if(extractor.isAcceptable(ExtractionUnit.PACKAGE)){
+ Birthmark b = bs.getBirthmark(extractor.getProvider().getType());
+ if(b == null){
+ b = extractor.createBirthmark();
+ bs.addBirthmark(b);
+ }
+ extractor.extract(b, new ByteArrayInputStream(data), er.getEnvironment());
+ }
+ } catch(ExtractorNotFoundException e){
+ warnings.addMessage(e, birthmarkType);
+ }
+ }
+ } catch(IOException e){
+ warnings.addMessage(e, archive.getName());
+ }
+ }
+ }
+ try{
+ for(BirthmarkSet bs: map.values()){
+ er.addBirthmarkSet(et, bs);
+ }
+ }catch(BirthmarkStoreException e){
+ }
+ }
+
+ private String parsePackageName(String name){
+ String n = name.replace('/', '.');
+ int index = n.lastIndexOf('.');
+ if(index > 0){
+ n = n.substring(0, index - 1);
+ }
+
+ return n;
+ }
+
+ private void extractFromClass(ClassFileArchive[] archives, ExtractionResultSet er,
+ ExtractionTarget et) throws IOException, BirthmarkExtractionFailedException, BirthmarkStoreException{
+ BirthmarkContext context = er.getContext();
+
+ for(ClassFileArchive archive: archives){
+ for(ClassFileEntry entry: archive){
+ try{
+ BirthmarkSet birthmarkset = new BirthmarkSet(entry.getClassName(), entry.getLocation());
+ byte[] data = inputStreamToByteArray(entry.getLocation().openStream());
+
+ for(String birthmarkType: context.getBirthmarkTypes()){
+ try{
+ BirthmarkExtractor extractor = factory.getExtractor(birthmarkType);
+ if(extractor.isAcceptable(ExtractionUnit.CLASS)){
+ Birthmark b = extractor.extract(new ByteArrayInputStream(data), er.getEnvironment());
+ birthmarkset.addBirthmark(b);
+ }
+ } catch(ExtractorNotFoundException e){
+ warnings.addMessage(e, birthmarkType);
+ }
+ }
+ er.addBirthmarkSet(et, birthmarkset);
+ } catch(IOException e){
+ warnings.addMessage(e, entry.getClassName());
+ }
+ }
+ }
+ }
+
+ private void extractFromProduct(ClassFileArchive[] archives, ExtractionResultSet er, ExtractionTarget et) throws IOException, BirthmarkExtractionFailedException, BirthmarkStoreException{
+ BirthmarkContext context = er.getContext();
+
+ for(ClassFileArchive archive: archives){
+ BirthmarkSet birthmarkset = new BirthmarkSet(archive.getName(), archive.getLocation());
+
+ for(ClassFileEntry entry: archive){
+ try{
+ byte[] data = inputStreamToByteArray(entry.getLocation().openStream());
+ for(String birthmarkType: context.getBirthmarkTypes()){
+ try{
+ BirthmarkExtractor extractor = factory.getExtractor(birthmarkType);
+ if(extractor.isAcceptable(ExtractionUnit.ARCHIVE)){
+ Birthmark b = birthmarkset.getBirthmark(birthmarkType);
+ if(b == null){
+ b = extractor.createBirthmark();
+ birthmarkset.addBirthmark(b);
+ }
+ extractor.extract(b, new ByteArrayInputStream(data), er.getEnvironment());
+ }
+ } catch(ExtractorNotFoundException e){
+ warnings.addMessage(e, birthmarkType);
+ }
+ }
+ } catch(IOException e){
+ warnings.addMessage(e, entry.getClassName());
+ }
+ }
+ if(birthmarkset.getBirthmarksCount() != 0){
+ er.addBirthmarkSet(et, birthmarkset);
+ }
+ }
+ }
+
+ private ClassFileArchive[] createArchives(String[] files, BirthmarkEnvironment environment) throws IOException, MalformedURLException{
+ ClasspathContext bytecode = environment.getClasspathContext();
+ List<ClassFileArchive> archives = new ArrayList<ClassFileArchive>();
+ for(int i = 0; i < files.length; i++){
+ try{
+ if(files[i].endsWith(".class")){
+ archives.add(new DefaultClassFileArchive(files[i]));
+ }
+ else if(files[i].endsWith(".jar") || files[i].endsWith(".zip")){
+ archives.add(new JarClassFileArchive(files[i]));
+ bytecode.addClasspath(new File(files[i]).toURI().toURL());
+ }
+ else if(files[i].endsWith(".war")){
+ archives.add(new WarClassFileArchive(files[i]));
+ }
+ } catch(IOException e){
+ warnings.addMessage(e, files[i]);
+ }
+ }
+ return archives.toArray(new ClassFileArchive[archives.size()]);
+ }
+
+ private void operationStart(OperationType type){
+ if(warnings == null){
+ warnings = new WarningMessages(type);
+ fireEvent(new BirthmarkEngineEvent(OperationStage.OPERATION_START, type, warnings));
+ latestOperationType = type;
+ targetType = type;
+ }
+ stack.push(warnings);
+ /*
+ * call subOperationStart method only once when some operation is occured.
+ * Ex. extraction, comparison, filtering
+ */
+ if(latestOperationType != type){
+ fireEvent(new BirthmarkEngineEvent(OperationStage.SUB_OPERATION_START, type, warnings));
+ latestOperationType = type;
+ }
+ }
+
+ private void operationDone(OperationType type){
+ if(latestOperationType != type && targetType != type){
+ fireEvent(new BirthmarkEngineEvent(OperationStage.SUB_OPERATION_DONE, type, warnings));
+ latestOperationType = type;
+ }
+ stack.pop();
+ if(stack.size() == 0){
+ fireEvent(new BirthmarkEngineEvent(OperationStage.OPERATION_DONE, type, warnings));
+ warnings = null;
+ latestOperationType = null;
+ }
+ }
+
+ private void fireEvent(BirthmarkEngineEvent e){
+ for(BirthmarkEngineListener listener: listeners){
+ switch(e.getStage()){
+ case OPERATION_START:
+ listener.operationStart(e);
+ break;
+ case SUB_OPERATION_START:
+ listener.subOperationStart(e);
+ break;
+ case SUB_OPERATION_DONE:
+ listener.subOperationDone(e);
+ break;
+ case OPERATION_DONE:
+ listener.operationDone(e);
+ break;
+ default:
+ throw new InternalError("unknown stage: " + e.getStage());
+ }
+ }
+ }
+}
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.beans.PropertyChangeEvent;\r
-import java.beans.PropertyChangeListener;\r
-import java.io.File;\r
-import java.util.ArrayList;\r
-import java.util.Arrays;\r
-import java.util.HashMap;\r
-import java.util.HashSet;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Set;\r
-\r
-import javax.imageio.spi.ServiceRegistry;\r
-\r
-import jp.naist.se.stigmata.filter.ComparisonPairFilterManager;\r
-import jp.naist.se.stigmata.reader.ClasspathContext;\r
-import jp.naist.se.stigmata.result.history.ExtractedBirthmarkServiceManager;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-import jp.naist.se.stigmata.utils.WellknownClassManager;\r
-\r
-/**\r
- * This class represents the context for extracting/comparing birthmarks.\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkEnvironment{\r
- /**\r
- * Default environment. All instance of this class is based on default environment.\r
- */\r
- private static BirthmarkEnvironment DEFAULT_ENVIRONMENT = new BirthmarkEnvironment(true);\r
-\r
- /**\r
- * home directory path.\r
- */\r
- private static String HOME_DIRECTORY_PATH;\r
-\r
- /**\r
- * parent of this environment.\r
- */\r
- private BirthmarkEnvironment parent;\r
-\r
- /**\r
- * context for classpath.\r
- */\r
- private ClasspathContext classpathContext;\r
-\r
- /**\r
- * wellknown class manager. This object judge a class is user made class or\r
- * wellknown class.\r
- */\r
- private WellknownClassManager manager;\r
-\r
- /**\r
- * collection of services.\r
- */\r
- private Map<String, BirthmarkSpi> services = new HashMap<String, BirthmarkSpi>();\r
-\r
- /**\r
- * properties manager.\r
- */\r
- private Map<String, String> properties = new HashMap<String, String>();\r
-\r
- /**\r
- * listeners for updating properties.\r
- */\r
- private List<PropertyChangeListener> propertyListeners = new ArrayList<PropertyChangeListener>();\r
-\r
- /**\r
- * filter manager.\r
- */\r
- private ComparisonPairFilterManager filterManager;\r
-\r
- /**\r
- * history manager.\r
- */\r
- private ExtractedBirthmarkServiceManager historyManager;\r
-\r
- /**\r
- * \r
- */\r
- private ClassLoader loader;\r
-\r
- /**\r
- * constructor for root environment\r
- */\r
- private BirthmarkEnvironment(boolean flag){\r
- manager = new WellknownClassManager();\r
- classpathContext = new ClasspathContext();\r
- filterManager = new ComparisonPairFilterManager(this);\r
- historyManager = new ExtractedBirthmarkServiceManager(this);\r
- }\r
-\r
- /**\r
- * constructor for specifying parent environment.\r
- */\r
- public BirthmarkEnvironment(BirthmarkEnvironment parent){\r
- this.parent = parent;\r
- this.manager = new WellknownClassManager(parent.getWellknownClassManager());\r
- this.classpathContext = new ClasspathContext(parent.getClasspathContext());\r
- this.filterManager = new ComparisonPairFilterManager(this, parent.getFilterManager());\r
- this.historyManager = new ExtractedBirthmarkServiceManager(this, parent.getHistoryManager());\r
- }\r
-\r
- /**\r
- * returns the default birthmark environment.\r
- */\r
- public static final BirthmarkEnvironment getDefaultEnvironment(){\r
- return DEFAULT_ENVIRONMENT;\r
- }\r
-\r
- public static synchronized final String getStigmataHome(){\r
- if(HOME_DIRECTORY_PATH == null){\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.getProperty("user.home");\r
- if(parent == null){\r
- parent = System.getenv("HOME");\r
- }\r
- if(parent == null){\r
- parent = ".";\r
- }\r
- // for windows\r
- if(parent.startsWith("C:\\Documents and Settings\\")){\r
- stigmataHome = parent + File.separator + "Application Data" + File.separator + "stigmata";\r
- }\r
- else{\r
- stigmataHome = parent + File.separator + ".stigmata";\r
- }\r
- }\r
- HOME_DIRECTORY_PATH = stigmataHome;\r
- }\r
- return HOME_DIRECTORY_PATH;\r
- }\r
-\r
- static void resetSettings(){\r
- DEFAULT_ENVIRONMENT = new BirthmarkEnvironment(false);\r
- }\r
-\r
- public BirthmarkEnvironment getParent(){\r
- return parent;\r
- }\r
-\r
- /**\r
- * remove property mapped given key.\r
- */\r
- public void removeProperty(String key){\r
- String old = properties.get(key);\r
- properties.remove(key);\r
- firePropertyEvent(new PropertyChangeEvent(this, key, old, null));\r
- }\r
-\r
- /**\r
- * add given property.\r
- */\r
- public void addProperty(String key, String value){\r
- boolean contains = properties.containsKey(key);\r
- String old = getProperty(key);\r
- properties.put(key, value);\r
-\r
- // value is updated?\r
- if(!((old != null && old.equals(value)) ||\r
- (contains && old == null && value == null))){\r
- firePropertyEvent(new PropertyChangeEvent(this, key, old, value));\r
- }\r
- }\r
-\r
- /**\r
- * returns the property mapped given key\r
- */\r
- public String getProperty(String key){\r
- String value = properties.get(key);\r
- if(value == null && parent != null){\r
- value = parent.getProperty(key);\r
- }\r
- return value;\r
- }\r
-\r
- /**\r
- * fire property change event to listeners.\r
- * @param e Event object.\r
- */\r
- private void firePropertyEvent(PropertyChangeEvent e){\r
- for(PropertyChangeListener listener: propertyListeners){\r
- listener.propertyChange(e);\r
- }\r
- }\r
-\r
- /**\r
- * add listener for updating properties.\r
- */\r
- public void addPropertyListener(PropertyChangeListener listener){\r
- propertyListeners.add(listener);\r
- }\r
-\r
- /**\r
- * remove specified listener.\r
- */\r
- public void removePropertyListener(PropertyChangeListener listener){\r
- propertyListeners.remove(listener);\r
- }\r
-\r
- public void clearProperties(){\r
- properties.clear();\r
- }\r
-\r
- public Iterator<String> propertyKeys(){\r
- Set<String> set = new HashSet<String>();\r
- if(parent != null){\r
- for(Iterator<String> i = parent.propertyKeys(); i.hasNext(); ){\r
- set.add(i.next());\r
- }\r
- }\r
- set.addAll(properties.keySet());\r
- return set.iterator();\r
- }\r
-\r
- /**\r
- * returns the classpath context.\r
- */\r
- public ClasspathContext getClasspathContext(){\r
- return classpathContext;\r
- }\r
-\r
- /**\r
- * add given birthmark service to this environment.\r
- */\r
- public synchronized void addService(BirthmarkSpi service){\r
- if(parent == null || parent.getService(service.getType()) == null){\r
- services.put(service.getType(), service);\r
- }\r
- }\r
-\r
- /**\r
- * remove given birthmark service from this environment.\r
- */\r
- public void removeService(String type){\r
- services.remove(type);\r
- }\r
-\r
- /**\r
- * return birthmark service registered with given birthmark type.\r
- */\r
- public BirthmarkSpi getService(String type){\r
- BirthmarkSpi service = services.get(type);\r
- if(service == null && parent != null){\r
- service = parent.getService(type);\r
- }\r
- return service;\r
- }\r
-\r
- /**\r
- * return all birthmark services searching traverse to root environment.\r
- */\r
- public synchronized BirthmarkSpi[] getServices(){\r
- List<BirthmarkSpi> list = getServiceList();\r
- BirthmarkSpi[] services = list.toArray(new BirthmarkSpi[list.size()]);\r
- Arrays.sort(services, new BirthmarkSpiComparator());\r
-\r
- return services;\r
- }\r
-\r
- public <T> Iterator<T> lookupProviders(Class<T> providerClass){\r
- Iterator<T> iterator;\r
- if(loader != null){\r
- iterator = ServiceRegistry.lookupProviders(providerClass, loader);\r
- }\r
- else{\r
- iterator = ServiceRegistry.lookupProviders(providerClass);\r
- }\r
- return iterator;\r
- }\r
-\r
- /**\r
- * return birthmark services lookup from current class path.\r
- */\r
- public synchronized BirthmarkSpi[] findServices(){\r
- List<BirthmarkSpi> list = getServiceList();\r
-\r
- for(Iterator<BirthmarkSpi> i = lookupProviders(BirthmarkSpi.class); i.hasNext(); ){\r
- BirthmarkSpi spi = i.next();\r
- if(getService(spi.getType()) == null){\r
- list.add(spi);\r
- }\r
- }\r
- BirthmarkSpi[] services = list.toArray(new BirthmarkSpi[list.size()]);\r
- Arrays.sort(services, new BirthmarkSpiComparator());\r
-\r
- return services;\r
- }\r
-\r
- /**\r
- * return wellknown class manager.\r
- */\r
- public WellknownClassManager getWellknownClassManager(){\r
- return manager;\r
- }\r
-\r
- public ComparisonPairFilterManager getFilterManager(){\r
- return filterManager;\r
- }\r
-\r
- public ExtractedBirthmarkServiceManager getHistoryManager(){\r
- return historyManager;\r
- }\r
-\r
- void setClassLoader(ClassLoader loader){\r
- this.loader = loader;\r
- }\r
-\r
- /**\r
- * find the all birthmark services searching to root environment.\r
- */\r
- private List<BirthmarkSpi> getServiceList(){\r
- List<BirthmarkSpi> list = new ArrayList<BirthmarkSpi>();\r
- if(parent != null){\r
- for(BirthmarkSpi spi : parent.getServices()){\r
- list.add(spi);\r
- }\r
- }\r
- for(String key : services.keySet()){\r
- list.add(services.get(key));\r
- }\r
- return list;\r
- }\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.imageio.spi.ServiceRegistry;
+
+import jp.sourceforge.stigmata.filter.ComparisonPairFilterManager;
+import jp.sourceforge.stigmata.reader.ClasspathContext;
+import jp.sourceforge.stigmata.result.history.ExtractedBirthmarkServiceManager;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.utils.WellknownClassManager;
+
+/**
+ * This class represents the context for extracting/comparing birthmarks.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkEnvironment{
+ /**
+ * Default environment. All instance of this class is based on default environment.
+ */
+ private static BirthmarkEnvironment DEFAULT_ENVIRONMENT = new BirthmarkEnvironment(true);
+
+ /**
+ * home directory path.
+ */
+ private static String HOME_DIRECTORY_PATH;
+
+ /**
+ * parent of this environment.
+ */
+ private BirthmarkEnvironment parent;
+
+ /**
+ * context for classpath.
+ */
+ private ClasspathContext classpathContext;
+
+ /**
+ * wellknown class manager. This object judge a class is user made class or
+ * wellknown class.
+ */
+ private WellknownClassManager manager;
+
+ /**
+ * collection of services.
+ */
+ private Map<String, BirthmarkSpi> services = new HashMap<String, BirthmarkSpi>();
+
+ /**
+ * properties manager.
+ */
+ private Map<String, String> properties = new HashMap<String, String>();
+
+ /**
+ * listeners for updating properties.
+ */
+ private List<PropertyChangeListener> propertyListeners = new ArrayList<PropertyChangeListener>();
+
+ /**
+ * filter manager.
+ */
+ private ComparisonPairFilterManager filterManager;
+
+ /**
+ * history manager.
+ */
+ private ExtractedBirthmarkServiceManager historyManager;
+
+ /**
+ *
+ */
+ private ClassLoader loader;
+
+ /**
+ * constructor for root environment
+ */
+ private BirthmarkEnvironment(boolean flag){
+ manager = new WellknownClassManager();
+ classpathContext = new ClasspathContext();
+ filterManager = new ComparisonPairFilterManager(this);
+ historyManager = new ExtractedBirthmarkServiceManager(this);
+ }
+
+ /**
+ * constructor for specifying parent environment.
+ */
+ public BirthmarkEnvironment(BirthmarkEnvironment parent){
+ this.parent = parent;
+ this.manager = new WellknownClassManager(parent.getWellknownClassManager());
+ this.classpathContext = new ClasspathContext(parent.getClasspathContext());
+ this.filterManager = new ComparisonPairFilterManager(this, parent.getFilterManager());
+ this.historyManager = new ExtractedBirthmarkServiceManager(this, parent.getHistoryManager());
+ }
+
+ /**
+ * returns the default birthmark environment.
+ */
+ public static final BirthmarkEnvironment getDefaultEnvironment(){
+ return DEFAULT_ENVIRONMENT;
+ }
+
+ public static synchronized final String getStigmataHome(){
+ if(HOME_DIRECTORY_PATH == null){
+ String stigmataHome = System.getProperty("stigmata.home");
+ if(stigmataHome == null){
+ stigmataHome = System.getenv("STIGMATA_HOME");
+ }
+ if(stigmataHome == null){
+ String parent = System.getProperty("user.home");
+ if(parent == null){
+ parent = System.getenv("HOME");
+ }
+ if(parent == null){
+ parent = ".";
+ }
+ // for windows
+ if(parent.startsWith("C:\\Documents and Settings\\")){
+ stigmataHome = parent + File.separator + "Application Data" + File.separator + "stigmata";
+ }
+ else{
+ stigmataHome = parent + File.separator + ".stigmata";
+ }
+ }
+ HOME_DIRECTORY_PATH = stigmataHome;
+ }
+ return HOME_DIRECTORY_PATH;
+ }
+
+ static void resetSettings(){
+ DEFAULT_ENVIRONMENT = new BirthmarkEnvironment(false);
+ }
+
+ public BirthmarkEnvironment getParent(){
+ return parent;
+ }
+
+ /**
+ * remove property mapped given key.
+ */
+ public void removeProperty(String key){
+ String old = properties.get(key);
+ properties.remove(key);
+ firePropertyEvent(new PropertyChangeEvent(this, key, old, null));
+ }
+
+ /**
+ * add given property.
+ */
+ public void addProperty(String key, String value){
+ boolean contains = properties.containsKey(key);
+ String old = getProperty(key);
+ properties.put(key, value);
+
+ // value is updated?
+ if(!((old != null && old.equals(value)) ||
+ (contains && old == null && value == null))){
+ firePropertyEvent(new PropertyChangeEvent(this, key, old, value));
+ }
+ }
+
+ /**
+ * returns the property mapped given key
+ */
+ public String getProperty(String key){
+ String value = properties.get(key);
+ if(value == null && parent != null){
+ value = parent.getProperty(key);
+ }
+ return value;
+ }
+
+ /**
+ * fire property change event to listeners.
+ * @param e Event object.
+ */
+ private void firePropertyEvent(PropertyChangeEvent e){
+ for(PropertyChangeListener listener: propertyListeners){
+ listener.propertyChange(e);
+ }
+ }
+
+ /**
+ * add listener for updating properties.
+ */
+ public void addPropertyListener(PropertyChangeListener listener){
+ propertyListeners.add(listener);
+ }
+
+ /**
+ * remove specified listener.
+ */
+ public void removePropertyListener(PropertyChangeListener listener){
+ propertyListeners.remove(listener);
+ }
+
+ public void clearProperties(){
+ properties.clear();
+ }
+
+ public Iterator<String> propertyKeys(){
+ Set<String> set = new HashSet<String>();
+ if(parent != null){
+ for(Iterator<String> i = parent.propertyKeys(); i.hasNext(); ){
+ set.add(i.next());
+ }
+ }
+ set.addAll(properties.keySet());
+ return set.iterator();
+ }
+
+ /**
+ * returns the classpath context.
+ */
+ public ClasspathContext getClasspathContext(){
+ return classpathContext;
+ }
+
+ /**
+ * add given birthmark service to this environment.
+ */
+ public synchronized void addService(BirthmarkSpi service){
+ if(parent == null || parent.getService(service.getType()) == null){
+ services.put(service.getType(), service);
+ }
+ }
+
+ /**
+ * remove given birthmark service from this environment.
+ */
+ public void removeService(String type){
+ services.remove(type);
+ }
+
+ /**
+ * return birthmark service registered with given birthmark type.
+ */
+ public BirthmarkSpi getService(String type){
+ BirthmarkSpi service = services.get(type);
+ if(service == null && parent != null){
+ service = parent.getService(type);
+ }
+ return service;
+ }
+
+ /**
+ * return all birthmark services searching traverse to root environment.
+ */
+ public synchronized BirthmarkSpi[] getServices(){
+ List<BirthmarkSpi> list = getServiceList();
+ BirthmarkSpi[] services = list.toArray(new BirthmarkSpi[list.size()]);
+ Arrays.sort(services, new BirthmarkSpiComparator());
+
+ return services;
+ }
+
+ public <T> Iterator<T> lookupProviders(Class<T> providerClass){
+ Iterator<T> iterator;
+ if(loader != null){
+ iterator = ServiceRegistry.lookupProviders(providerClass, loader);
+ }
+ else{
+ iterator = ServiceRegistry.lookupProviders(providerClass);
+ }
+ return iterator;
+ }
+
+ /**
+ * return birthmark services lookup from current class path.
+ */
+ public synchronized BirthmarkSpi[] findServices(){
+ List<BirthmarkSpi> list = getServiceList();
+
+ for(Iterator<BirthmarkSpi> i = lookupProviders(BirthmarkSpi.class); i.hasNext(); ){
+ BirthmarkSpi spi = i.next();
+ if(getService(spi.getType()) == null){
+ list.add(spi);
+ }
+ }
+ BirthmarkSpi[] services = list.toArray(new BirthmarkSpi[list.size()]);
+ Arrays.sort(services, new BirthmarkSpiComparator());
+
+ return services;
+ }
+
+ /**
+ * return wellknown class manager.
+ */
+ public WellknownClassManager getWellknownClassManager(){
+ return manager;
+ }
+
+ public ComparisonPairFilterManager getFilterManager(){
+ return filterManager;
+ }
+
+ public ExtractedBirthmarkServiceManager getHistoryManager(){
+ return historyManager;
+ }
+
+ void setClassLoader(ClassLoader loader){
+ this.loader = loader;
+ }
+
+ /**
+ * find the all birthmark services searching to root environment.
+ */
+ private List<BirthmarkSpi> getServiceList(){
+ List<BirthmarkSpi> list = new ArrayList<BirthmarkSpi>();
+ if(parent != null){
+ for(BirthmarkSpi spi : parent.getServices()){
+ list.add(spi);
+ }
+ }
+ for(String key : services.keySet()){
+ list.add(services.get(key));
+ }
+ return list;
+ }
+}
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-/**\r
- * This exception represents occuring some exceptions caused birthmarking.\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkException extends Exception{\r
- private static final long serialVersionUID = -6422474631148213820L;\r
-\r
- public BirthmarkException(){\r
- super();\r
- }\r
-\r
- public BirthmarkException(String message, Throwable cause){\r
- super(message, cause);\r
- }\r
-\r
- public BirthmarkException(String message){\r
- super(message);\r
- }\r
-\r
- public BirthmarkException(Throwable cause){\r
- super(cause);\r
- }\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+/**
+ * This exception represents occuring some exceptions caused birthmarking.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkException extends Exception{
+ private static final long serialVersionUID = -6422474631148213820L;
+
+ public BirthmarkException(){
+ super();
+ }
+
+ public BirthmarkException(String message, Throwable cause){
+ super(message, cause);
+ }
+
+ public BirthmarkException(String message){
+ super(message);
+ }
+
+ public BirthmarkException(Throwable cause){
+ super(cause);
+ }
+}
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkExtractionFailedException extends BirthmarkException {\r
- private static final long serialVersionUID = 21932436457235L;\r
-\r
- private List<Throwable> causes = new ArrayList<Throwable>();\r
-\r
- public BirthmarkExtractionFailedException() {\r
- super();\r
- }\r
-\r
- public BirthmarkExtractionFailedException(String arg0, Throwable cause) {\r
- super(arg0, cause);\r
- }\r
-\r
- public BirthmarkExtractionFailedException(String arg0) {\r
- super(arg0);\r
- }\r
-\r
- public BirthmarkExtractionFailedException(Throwable cause) {\r
- super(cause);\r
- }\r
-\r
- public boolean isFailed(){\r
- return causes.size() != 0;\r
- }\r
-\r
- public void addCause(Throwable cause){\r
- causes.add(cause);\r
- }\r
-\r
- public void addCauses(Throwable[] causeList){\r
- for(Throwable throwable: causeList){\r
- causes.add(throwable);\r
- }\r
- }\r
-\r
- public Throwable[] getCauses(){\r
- return causes.toArray(new Throwable[causes.size()]);\r
- }\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkExtractionFailedException extends BirthmarkException {
+ private static final long serialVersionUID = 21932436457235L;
+
+ private List<Throwable> causes = new ArrayList<Throwable>();
+
+ public BirthmarkExtractionFailedException() {
+ super();
+ }
+
+ public BirthmarkExtractionFailedException(String arg0, Throwable cause) {
+ super(arg0, cause);
+ }
+
+ public BirthmarkExtractionFailedException(String arg0) {
+ super(arg0);
+ }
+
+ public BirthmarkExtractionFailedException(Throwable cause) {
+ super(cause);
+ }
+
+ public boolean isFailed(){
+ return causes.size() != 0;
+ }
+
+ public void addCause(Throwable cause){
+ causes.add(cause);
+ }
+
+ public void addCauses(Throwable[] causeList){
+ for(Throwable throwable: causeList){
+ causes.add(throwable);
+ }
+ }
+
+ public Throwable[] getCauses(){
+ return causes.toArray(new Throwable[causes.size()]);
+ }
}
\ No newline at end of file
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.InputStream;\r
-\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * extract birthmarks from given Java bytecode stream.\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public interface BirthmarkExtractor{\r
- /**\r
- * returns service provider interface of this extractor.\r
- */\r
- public BirthmarkSpi getProvider();\r
-\r
- /**\r
- * create new birthmark.\r
- */\r
- public Birthmark createBirthmark();\r
-\r
- /**\r
- * Does extractor accept given extraction unit. \r
- */\r
- public boolean isAcceptable(ExtractionUnit unit);\r
-\r
- /**\r
- * returns accepted extraction unit list.\r
- */\r
- public ExtractionUnit[] getAcceptableUnits();\r
-\r
- /**\r
- * extract birthmark from given stream.\r
- */\r
- public Birthmark extract(InputStream in) throws BirthmarkExtractionFailedException;\r
-\r
- /**\r
- * extract birthmark from given byte array.\r
- */\r
- public Birthmark extract(byte[] bytecode) throws BirthmarkExtractionFailedException;\r
-\r
- /**\r
- * extract birthmark from given stream with given environment.\r
- */\r
- public Birthmark extract(InputStream in, BirthmarkEnvironment environment) throws BirthmarkExtractionFailedException;\r
-\r
- /**\r
- * extract birthmark from given byte array with given environment.\r
- */\r
- public Birthmark extract(byte[] bytecode, BirthmarkEnvironment environment) throws BirthmarkExtractionFailedException;\r
-\r
- /**\r
- * extract birthmark from given stream and add element to given birthmark object.\r
- */\r
- public Birthmark extract(Birthmark birthmark, InputStream in) throws BirthmarkExtractionFailedException;\r
-\r
- /**\r
- * extract birthmark from given byte array and add element to given birthmark object.\r
- */\r
- public Birthmark extract(Birthmark birthmark, byte[] bytecode) throws BirthmarkExtractionFailedException;\r
-\r
- /**\r
- * extract birthmark from given stream with given environment and add element to given birthmark object.\r
- */\r
- public Birthmark extract(Birthmark birthmark, InputStream in, BirthmarkEnvironment environment) throws BirthmarkExtractionFailedException;\r
-\r
- /**\r
- * extract birthmark from given byte array with given environment and add element to given birthmark object.\r
- */\r
- public Birthmark extract(Birthmark birthmark, byte[] bytecode, BirthmarkEnvironment environment) throws BirthmarkExtractionFailedException;\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+import java.io.InputStream;
+
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ * extract birthmarks from given Java bytecode stream.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public interface BirthmarkExtractor{
+ /**
+ * returns service provider interface of this extractor.
+ */
+ public BirthmarkSpi getProvider();
+
+ /**
+ * create new birthmark.
+ */
+ public Birthmark createBirthmark();
+
+ /**
+ * Does extractor accept given extraction unit.
+ */
+ public boolean isAcceptable(ExtractionUnit unit);
+
+ /**
+ * returns accepted extraction unit list.
+ */
+ public ExtractionUnit[] getAcceptableUnits();
+
+ /**
+ * extract birthmark from given stream.
+ */
+ public Birthmark extract(InputStream in) throws BirthmarkExtractionFailedException;
+
+ /**
+ * extract birthmark from given byte array.
+ */
+ public Birthmark extract(byte[] bytecode) throws BirthmarkExtractionFailedException;
+
+ /**
+ * extract birthmark from given stream with given environment.
+ */
+ public Birthmark extract(InputStream in, BirthmarkEnvironment environment) throws BirthmarkExtractionFailedException;
+
+ /**
+ * extract birthmark from given byte array with given environment.
+ */
+ public Birthmark extract(byte[] bytecode, BirthmarkEnvironment environment) throws BirthmarkExtractionFailedException;
+
+ /**
+ * extract birthmark from given stream and add element to given birthmark object.
+ */
+ public Birthmark extract(Birthmark birthmark, InputStream in) throws BirthmarkExtractionFailedException;
+
+ /**
+ * extract birthmark from given byte array and add element to given birthmark object.
+ */
+ public Birthmark extract(Birthmark birthmark, byte[] bytecode) throws BirthmarkExtractionFailedException;
+
+ /**
+ * extract birthmark from given stream with given environment and add element to given birthmark object.
+ */
+ public Birthmark extract(Birthmark birthmark, InputStream in, BirthmarkEnvironment environment) throws BirthmarkExtractionFailedException;
+
+ /**
+ * extract birthmark from given byte array with given environment and add element to given birthmark object.
+ */
+ public Birthmark extract(Birthmark birthmark, byte[] bytecode, BirthmarkEnvironment environment) throws BirthmarkExtractionFailedException;
+}
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.net.URL;\r
-import java.util.HashMap;\r
-import java.util.Iterator;\r
-import java.util.Map;\r
-\r
-/**\r
- * This class manages a set of birthmarks which extracted from a target.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkSet implements Iterable<Birthmark>{\r
- /**\r
- * this object name.\r
- */\r
- private String name;\r
-\r
- /**\r
- * location of target is loaded from.\r
- */\r
- private URL location;\r
-\r
- /**\r
- * map for birthmarks.\r
- */\r
- private Map<String, Birthmark> birthmarks = new HashMap<String, Birthmark>();\r
-\r
- /**\r
- * constructor.\r
- */\r
- public BirthmarkSet(String name, URL location){\r
- this.name = name;\r
- this.location = location;\r
- }\r
-\r
- /**\r
- * return the sum of all element count of birthmarks this instance has.\r
- */\r
- public int getSumOfElementCount(){\r
- int count = 0;\r
- for(Iterator<String> i = birthmarkTypes(); i.hasNext();){\r
- Birthmark birthmark = getBirthmark(i.next());\r
- count += birthmark.getElementCount();\r
- }\r
- return count;\r
- }\r
-\r
- /**\r
- * return the number of birthmarks.\r
- */\r
- public int getBirthmarksCount(){\r
- return birthmarks.size();\r
- }\r
-\r
- /**\r
- * return the name.\r
- */\r
- public String getName(){\r
- return name;\r
- }\r
-\r
- /**\r
- * return the location.\r
- */\r
- public URL getLocation(){\r
- return location;\r
- }\r
-\r
- /**\r
- * add given birthmark to this instance.\r
- * @throws NullPointerException given birthmark is null.\r
- */\r
- public void addBirthmark(Birthmark birthmark){\r
- if(birthmark == null){\r
- throw new NullPointerException("given birthmark is null");\r
- }\r
- birthmarks.put(birthmark.getType(), birthmark);\r
- }\r
-\r
- /**\r
- * return the given type of birthmark.\r
- */\r
- public Birthmark getBirthmark(String type){\r
- return birthmarks.get(type);\r
- }\r
-\r
- /**\r
- * does this object have the given birthmark type.\r
- */\r
- public boolean hasBirthmark(String type){\r
- return birthmarks.get(type) != null;\r
- }\r
-\r
- /**\r
- * returns an array containing all of the birthmarks in this object.\r
- */\r
- public Birthmark[] getBirthmarks(){\r
- Birthmark[] b = new Birthmark[getBirthmarksCount()];\r
- int index = 0;\r
- for(Iterator<String> i = birthmarkTypes(); i.hasNext();){\r
- b[index] = getBirthmark(i.next());\r
- index++;\r
- }\r
- return b;\r
- }\r
-\r
- /**\r
- * returns an iterator over the birthmarks in this birthmark-set.\r
- */\r
- public Iterator<Birthmark> iterator(){\r
- return birthmarks.values().iterator();\r
- }\r
-\r
- /**\r
- * returns an iterator over the birthmark types.\r
- */\r
- public Iterator<String> birthmarkTypes(){\r
- return birthmarks.keySet().iterator();\r
- }\r
-\r
- /**\r
- * returns an array of birthmark types.\r
- */\r
- public synchronized String[] getBirthmarkTypes(){\r
- return birthmarks.keySet().toArray(new String[birthmarks.size()]);\r
- }\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * This class manages a set of birthmarks which extracted from a target.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkSet implements Iterable<Birthmark>{
+ /**
+ * this object name.
+ */
+ private String name;
+
+ /**
+ * location of target is loaded from.
+ */
+ private URL location;
+
+ /**
+ * map for birthmarks.
+ */
+ private Map<String, Birthmark> birthmarks = new HashMap<String, Birthmark>();
+
+ /**
+ * constructor.
+ */
+ public BirthmarkSet(String name, URL location){
+ this.name = name;
+ this.location = location;
+ }
+
+ /**
+ * return the sum of all element count of birthmarks this instance has.
+ */
+ public int getSumOfElementCount(){
+ int count = 0;
+ for(Iterator<String> i = birthmarkTypes(); i.hasNext();){
+ Birthmark birthmark = getBirthmark(i.next());
+ count += birthmark.getElementCount();
+ }
+ return count;
+ }
+
+ /**
+ * return the number of birthmarks.
+ */
+ public int getBirthmarksCount(){
+ return birthmarks.size();
+ }
+
+ /**
+ * return the name.
+ */
+ public String getName(){
+ return name;
+ }
+
+ /**
+ * return the location.
+ */
+ public URL getLocation(){
+ return location;
+ }
+
+ /**
+ * add given birthmark to this instance.
+ * @throws NullPointerException given birthmark is null.
+ */
+ public void addBirthmark(Birthmark birthmark){
+ if(birthmark == null){
+ throw new NullPointerException("given birthmark is null");
+ }
+ birthmarks.put(birthmark.getType(), birthmark);
+ }
+
+ /**
+ * return the given type of birthmark.
+ */
+ public Birthmark getBirthmark(String type){
+ return birthmarks.get(type);
+ }
+
+ /**
+ * does this object have the given birthmark type.
+ */
+ public boolean hasBirthmark(String type){
+ return birthmarks.get(type) != null;
+ }
+
+ /**
+ * returns an array containing all of the birthmarks in this object.
+ */
+ public Birthmark[] getBirthmarks(){
+ Birthmark[] b = new Birthmark[getBirthmarksCount()];
+ int index = 0;
+ for(Iterator<String> i = birthmarkTypes(); i.hasNext();){
+ b[index] = getBirthmark(i.next());
+ index++;
+ }
+ return b;
+ }
+
+ /**
+ * returns an iterator over the birthmarks in this birthmark-set.
+ */
+ public Iterator<Birthmark> iterator(){
+ return birthmarks.values().iterator();
+ }
+
+ /**
+ * returns an iterator over the birthmark types.
+ */
+ public Iterator<String> birthmarkTypes(){
+ return birthmarks.keySet().iterator();
+ }
+
+ /**
+ * returns an array of birthmark types.
+ */
+ public synchronized String[] getBirthmarkTypes(){
+ return birthmarks.keySet().toArray(new String[birthmarks.size()]);
+ }
+}
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.Comparator;\r
-\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-class BirthmarkSpiComparator implements Comparator<BirthmarkSpi>{\r
- /**\r
- * default constructor\r
- */\r
- public BirthmarkSpiComparator(){\r
- }\r
-\r
- public int hashCode(){\r
- return System.identityHashCode(this);\r
- }\r
-\r
- public int compare(BirthmarkSpi s1, BirthmarkSpi s2){\r
- if(s1.isExpert() && !s2.isExpert()){\r
- return 1;\r
- }\r
- else if(!s1.isExpert() && s2.isExpert()){\r
- return -1;\r
- }\r
- else{\r
- return s1.getType().compareTo(s2.getType());\r
- }\r
- }\r
-\r
- public boolean equals(Object o){\r
- String className = null;\r
- if(o != null){\r
- className = o.getClass().getName();\r
- }\r
- return o != null && className.equals(getClass().getName());\r
- }\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+import java.util.Comparator;
+
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+class BirthmarkSpiComparator implements Comparator<BirthmarkSpi>{
+ /**
+ * default constructor
+ */
+ public BirthmarkSpiComparator(){
+ }
+
+ public int hashCode(){
+ return System.identityHashCode(this);
+ }
+
+ public int compare(BirthmarkSpi s1, BirthmarkSpi s2){
+ if(s1.isExpert() && !s2.isExpert()){
+ return 1;
+ }
+ else if(!s1.isExpert() && s2.isExpert()){
+ return -1;
+ }
+ else{
+ return s1.getType().compareTo(s2.getType());
+ }
+ }
+
+ public boolean equals(Object o){
+ String className = null;
+ if(o != null){
+ className = o.getClass().getName();
+ }
+ return o != null && className.equals(getClass().getName());
+ }
}
\ No newline at end of file
-package jp.naist.se.stigmata;
+package jp.sourceforge.stigmata;
/*
* $Id$
-package jp.naist.se.stigmata;\r
-\r
-import java.io.Serializable;\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-/**\r
- * This class represents how to store extracted birthmarks.\r
- * memory?, databases?, or files?\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkStoreTarget implements Serializable, Comparable<BirthmarkStoreTarget>{\r
- private static final long serialVersionUID = -4225861589804166362L;\r
-\r
- private static final Map<String, BirthmarkStoreTarget> TARGETS = new HashMap<String, BirthmarkStoreTarget>();\r
-\r
- public static BirthmarkStoreTarget MEMORY = new BirthmarkStoreTarget(0, "MEMORY");\r
- public static BirthmarkStoreTarget XMLFILE = new BirthmarkStoreTarget(1, "XMLFILE");\r
- public static BirthmarkStoreTarget MEMORY_SINGLE = new BirthmarkStoreTarget(2, "MEMORY_SINGLE");\r
- public static BirthmarkStoreTarget RDB = new BirthmarkStoreTarget(3, "RDB");\r
-\r
- private final String name;\r
- private final int ordinal;\r
-\r
- private BirthmarkStoreTarget(int index, String name){\r
- this.name = name;\r
- this.ordinal = index;\r
- TARGETS.put(name, this);\r
- }\r
-\r
- public String name(){\r
- return name;\r
- }\r
-\r
- public int ordinal(){\r
- return ordinal;\r
- }\r
-\r
- public boolean equals(Object o){\r
- return this == o;\r
- }\r
-\r
- public int compareTo(BirthmarkStoreTarget other){\r
- return ordinal - other.ordinal;\r
- }\r
-\r
- public static BirthmarkStoreTarget valueOf(String name){\r
- return TARGETS.get(name);\r
- }\r
-\r
- public static BirthmarkStoreTarget createTarget(String name){\r
- BirthmarkStoreTarget bst = TARGETS.get(name);\r
- if(bst == null){\r
- bst = new BirthmarkStoreTarget(TARGETS.size(), name);\r
- }\r
- return bst;\r
- }\r
-}\r
+package jp.sourceforge.stigmata;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+/*
+ * $Id$
+ */
+
+/**
+ * This class represents how to store extracted birthmarks.
+ * memory?, databases?, or files?
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkStoreTarget implements Serializable, Comparable<BirthmarkStoreTarget>{
+ private static final long serialVersionUID = -4225861589804166362L;
+
+ private static final Map<String, BirthmarkStoreTarget> TARGETS = new HashMap<String, BirthmarkStoreTarget>();
+
+ public static BirthmarkStoreTarget MEMORY = new BirthmarkStoreTarget(0, "MEMORY");
+ public static BirthmarkStoreTarget XMLFILE = new BirthmarkStoreTarget(1, "XMLFILE");
+ public static BirthmarkStoreTarget MEMORY_SINGLE = new BirthmarkStoreTarget(2, "MEMORY_SINGLE");
+ public static BirthmarkStoreTarget RDB = new BirthmarkStoreTarget(3, "RDB");
+
+ private final String name;
+ private final int ordinal;
+
+ private BirthmarkStoreTarget(int index, String name){
+ this.name = name;
+ this.ordinal = index;
+ TARGETS.put(name, this);
+ }
+
+ public String name(){
+ return name;
+ }
+
+ public int ordinal(){
+ return ordinal;
+ }
+
+ public boolean equals(Object o){
+ return this == o;
+ }
+
+ public int compareTo(BirthmarkStoreTarget other){
+ return ordinal - other.ordinal;
+ }
+
+ public static BirthmarkStoreTarget valueOf(String name){
+ return TARGETS.get(name);
+ }
+
+ public static BirthmarkStoreTarget createTarget(String name){
+ BirthmarkStoreTarget bst = TARGETS.get(name);
+ if(bst == null){
+ bst = new BirthmarkStoreTarget(TARGETS.size(), name);
+ }
+ return bst;
+ }
+}
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-/**\r
- * This exception class be thrown when birthmark types are different in some\r
- * operation such as merging, and comparing.\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkTypeMismatchException extends BirthmarkException{\r
- private static final long serialVersionUID = -6198325117696243731L;\r
-\r
- public BirthmarkTypeMismatchException(){\r
- super();\r
- }\r
-\r
- public BirthmarkTypeMismatchException(String message, Throwable cause){\r
- super(message, cause);\r
- }\r
-\r
- public BirthmarkTypeMismatchException(String message){\r
- super(message);\r
- }\r
-\r
- public BirthmarkTypeMismatchException(Throwable cause){\r
- super(cause);\r
- }\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+/**
+ * This exception class be thrown when birthmark types are different in some
+ * operation such as merging, and comparing.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkTypeMismatchException extends BirthmarkException{
+ private static final long serialVersionUID = -6198325117696243731L;
+
+ public BirthmarkTypeMismatchException(){
+ super();
+ }
+
+ public BirthmarkTypeMismatchException(String message, Throwable cause){
+ super(message, cause);
+ }
+
+ public BirthmarkTypeMismatchException(String message){
+ super(message);
+ }
+
+ public BirthmarkTypeMismatchException(Throwable cause){
+ super(cause);
+ }
+}
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-/**\r
- * This enum represents birthmark comparison method. let <it>X</it> be a set of\r
- * target <it>{ x1, x2, ..., xn, }</it> and <it>Y</it> be a set of target\r
- * <it>{ y1, y2, ..., ym, }</it>.\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public enum ComparisonMethod{\r
- /**\r
- * This constants represents comparing all combination between <it>X</it>\r
- * and <it>Y</it>. <it>x1 - y1, x1 - y2, x1 - y3, ..., xn - ym-1, xn, ym</it>.\r
- */\r
- ROUND_ROBIN_XY,\r
- /**\r
- * This constants represents comparing all combination between <it>X</it>.\r
- * <it>x1 - x1, x1 - x2, x1 - x3, ..., xn - xn-1 xn, xn</it>.\r
- */\r
- ROUND_ROBIN_SAME_PAIR,\r
- /**\r
- * This constants represents comparing all combination between <it>X</it>.\r
- * <it>x1 - x1, x1 - x2, x1 - x3, ..., xn - xn-1 xn, xn</it>.\r
- */\r
- ROUND_ROBIN_WITHOUT_SAME_PAIR,\r
- /**\r
- * This constants represents comparing some pairs. The pair is guessed by\r
- * its name. If x1 and y3 have same name, then the pair of x1 and y3 is\r
- * compared.\r
- */\r
- GUESSED_PAIR,\r
- /**\r
- * This constants represents comparing some pairs. The pair is specified by\r
- * user.\r
- */\r
- SPECIFIED_PAIR,\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+/**
+ * This enum represents birthmark comparison method. let <it>X</it> be a set of
+ * target <it>{ x1, x2, ..., xn, }</it> and <it>Y</it> be a set of target
+ * <it>{ y1, y2, ..., ym, }</it>.
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public enum ComparisonMethod{
+ /**
+ * This constants represents comparing all combination between <it>X</it>
+ * and <it>Y</it>. <it>x1 - y1, x1 - y2, x1 - y3, ..., xn - ym-1, xn, ym</it>.
+ */
+ ROUND_ROBIN_XY,
+ /**
+ * This constants represents comparing all combination between <it>X</it>.
+ * <it>x1 - x1, x1 - x2, x1 - x3, ..., xn - xn-1 xn, xn</it>.
+ */
+ ROUND_ROBIN_SAME_PAIR,
+ /**
+ * This constants represents comparing all combination between <it>X</it>.
+ * <it>x1 - x1, x1 - x2, x1 - x3, ..., xn - xn-1 xn, xn</it>.
+ */
+ ROUND_ROBIN_WITHOUT_SAME_PAIR,
+ /**
+ * This constants represents comparing some pairs. The pair is guessed by
+ * its name. If x1 and y3 have same name, then the pair of x1 and y3 is
+ * compared.
+ */
+ GUESSED_PAIR,
+ /**
+ * This constants represents comparing some pairs. The pair is specified by
+ * user.
+ */
+ SPECIFIED_PAIR,
+}
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.ArrayList;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-\r
-/**\r
- * This class represents comparison pair.\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ComparisonPair implements Iterable<ComparisonPairElement>{\r
- private BirthmarkSet target1;\r
- private BirthmarkSet target2;\r
- private BirthmarkContext context;\r
-\r
- /**\r
- * constructor.\r
- */\r
- public ComparisonPair(BirthmarkSet target1, BirthmarkSet target2, BirthmarkContext context){\r
- this.target1 = target1;\r
- this.target2 = target2;\r
- this.context = context;\r
-\r
- if(target1.getBirthmarksCount() != target2.getBirthmarksCount()){\r
- throw new IllegalArgumentException("birthmark count is not matched");\r
- }\r
- }\r
-\r
- /**\r
- * return a target.\r
- * @see #getTarget2()\r
- */\r
- public BirthmarkSet getTarget1(){\r
- return target1;\r
- }\r
-\r
- /**\r
- * return other target\r
- * @see #getTarget1()\r
- */\r
- public BirthmarkSet getTarget2(){\r
- return target2;\r
- }\r
-\r
- /**\r
- * calculates similarity between target1 and target2.\r
- */\r
- public double calculateSimilarity(){\r
- double similarity = 0d;\r
- int count = 0;\r
- for(ComparisonPairElement elem: this){\r
- double sim = elem.getSimilarity();\r
- if(!Double.isNaN(sim) && !Double.isInfinite(sim)){\r
- similarity += sim;\r
- count++;\r
- }\r
- }\r
- return similarity / count;\r
- }\r
-\r
- /**\r
- * Returns a number of birthmarks contained a target.\r
- * Note that other target must have same birthmarks.\r
- */\r
- public int getBirthmarksCount(){\r
- return target1.getBirthmarksCount();\r
- }\r
-\r
- /**\r
- * returns an iterator for comparing each birthmarks.\r
- */\r
- public synchronized Iterator<ComparisonPairElement> iterator(){\r
- List<ComparisonPairElement> list = new ArrayList<ComparisonPairElement>();\r
- BirthmarkEnvironment env = context.getEnvironment();\r
- for(Iterator<String> i = target1.birthmarkTypes(); i.hasNext(); ){\r
- String type = i.next();\r
-\r
- Birthmark b1 = target1.getBirthmark(type);\r
- Birthmark b2 = target2.getBirthmark(type);\r
- if(b1 != null && b2 != null){\r
- list.add(new ComparisonPairElement(\r
- b1, b2, env.getService(type).getComparator()\r
- ));\r
- }\r
- }\r
- return list.iterator();\r
- }\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * This class represents comparison pair.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ComparisonPair implements Iterable<ComparisonPairElement>{
+ private BirthmarkSet target1;
+ private BirthmarkSet target2;
+ private BirthmarkContext context;
+
+ /**
+ * constructor.
+ */
+ public ComparisonPair(BirthmarkSet target1, BirthmarkSet target2, BirthmarkContext context){
+ this.target1 = target1;
+ this.target2 = target2;
+ this.context = context;
+
+ if(target1.getBirthmarksCount() != target2.getBirthmarksCount()){
+ throw new IllegalArgumentException("birthmark count is not matched");
+ }
+ }
+
+ /**
+ * return a target.
+ * @see #getTarget2()
+ */
+ public BirthmarkSet getTarget1(){
+ return target1;
+ }
+
+ /**
+ * return other target
+ * @see #getTarget1()
+ */
+ public BirthmarkSet getTarget2(){
+ return target2;
+ }
+
+ /**
+ * calculates similarity between target1 and target2.
+ */
+ public double calculateSimilarity(){
+ double similarity = 0d;
+ int count = 0;
+ for(ComparisonPairElement elem: this){
+ double sim = elem.getSimilarity();
+ if(!Double.isNaN(sim) && !Double.isInfinite(sim)){
+ similarity += sim;
+ count++;
+ }
+ }
+ return similarity / count;
+ }
+
+ /**
+ * Returns a number of birthmarks contained a target.
+ * Note that other target must have same birthmarks.
+ */
+ public int getBirthmarksCount(){
+ return target1.getBirthmarksCount();
+ }
+
+ /**
+ * returns an iterator for comparing each birthmarks.
+ */
+ public synchronized Iterator<ComparisonPairElement> iterator(){
+ List<ComparisonPairElement> list = new ArrayList<ComparisonPairElement>();
+ BirthmarkEnvironment env = context.getEnvironment();
+ for(Iterator<String> i = target1.birthmarkTypes(); i.hasNext(); ){
+ String type = i.next();
+
+ Birthmark b1 = target1.getBirthmark(type);
+ Birthmark b2 = target2.getBirthmark(type);
+ if(b1 != null && b2 != null){
+ list.add(new ComparisonPairElement(
+ b1, b2, env.getService(type).getComparator()
+ ));
+ }
+ }
+ return list.iterator();
+ }
+}
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-/**\r
- * This class represents comparing two birthmarks.\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ComparisonPairElement{\r
- private Birthmark birthmark1;\r
- private Birthmark birthmark2;\r
- private BirthmarkComparator comparator;\r
- private double similarity;\r
- private int compareCount = -1;\r
-\r
- public ComparisonPairElement(Birthmark birthmark1, Birthmark birthmark2,\r
- BirthmarkComparator comparator){\r
- this.birthmark1 = birthmark1;\r
- this.birthmark2 = birthmark2;\r
- this.comparator = comparator;\r
-\r
- if(!birthmark1.getType().equals(birthmark2.getType())){\r
- throw new IllegalArgumentException("birthmark type mismatch");\r
- }\r
- // cached\r
- similarity = comparator.compare(birthmark1, birthmark2);\r
- }\r
-\r
- public synchronized int getComparisonCount(){\r
- // cached\r
- if(compareCount < 0){\r
- compareCount = comparator.getCompareCount(birthmark1, birthmark2);\r
- }\r
- return compareCount;\r
- }\r
-\r
- /**\r
- * returns a type of birthmarks.\r
- */\r
- public String getType(){\r
- return birthmark1.getType();\r
- }\r
-\r
- /**\r
- * returns similarity between two birthmarks.\r
- */\r
- public double getSimilarity(){\r
- return similarity;\r
- }\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+/**
+ * This class represents comparing two birthmarks.
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ComparisonPairElement{
+ private Birthmark birthmark1;
+ private Birthmark birthmark2;
+ private BirthmarkComparator comparator;
+ private double similarity;
+ private int compareCount = -1;
+
+ public ComparisonPairElement(Birthmark birthmark1, Birthmark birthmark2,
+ BirthmarkComparator comparator){
+ this.birthmark1 = birthmark1;
+ this.birthmark2 = birthmark2;
+ this.comparator = comparator;
+
+ if(!birthmark1.getType().equals(birthmark2.getType())){
+ throw new IllegalArgumentException("birthmark type mismatch");
+ }
+ // cached
+ similarity = comparator.compare(birthmark1, birthmark2);
+ }
+
+ public synchronized int getComparisonCount(){
+ // cached
+ if(compareCount < 0){
+ compareCount = comparator.getCompareCount(birthmark1, birthmark2);
+ }
+ return compareCount;
+ }
+
+ /**
+ * returns a type of birthmarks.
+ */
+ public String getType(){
+ return birthmark1.getType();
+ }
+
+ /**
+ * returns similarity between two birthmarks.
+ */
+ public double getSimilarity(){
+ return similarity;
+ }
+}
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.filter.Criterion;\r
-import jp.naist.se.stigmata.spi.ComparisonPairFilterSpi;\r
-\r
-/**\r
- * Filtering results by some criteria.\r
- * For example,\r
- * <ul>\r
- * <li>extract comparison pairs which similarity over 0.8, and</li>\r
- * <li>extract comparison pairs which similarity over 0.8 and element count over 10.</li>\r
- * </ul>\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public interface ComparisonPairFilter{\r
- public boolean isFiltered(ComparisonPair pair);\r
-\r
- public Criterion[] getAcceptableCriteria();\r
-\r
- public boolean isAcceptable(Criterion criterion);\r
-\r
- public void setCriterion(Criterion criterion);\r
-\r
- public Criterion getCriterion();\r
-\r
- public ComparisonPairFilterSpi getService();\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.filter.Criterion;
+import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
+
+/**
+ * Filtering results by some criteria.
+ * For example,
+ * <ul>
+ * <li>extract comparison pairs which similarity over 0.8, and</li>
+ * <li>extract comparison pairs which similarity over 0.8 and element count over 10.</li>
+ * </ul>
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public interface ComparisonPairFilter{
+ public boolean isFiltered(ComparisonPair pair);
+
+ public Criterion[] getAcceptableCriteria();
+
+ public boolean isAcceptable(Criterion criterion);
+
+ public void setCriterion(Criterion criterion);
+
+ public Criterion getCriterion();
+
+ public ComparisonPairFilterSpi getService();
+}
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.ArrayList;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-\r
-\r
-/**\r
- * Set of {@link ComparisonPairFilter <Ccode>ComparisonPairFilter</code>}.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ComparisonPairFilterSet implements Iterable<ComparisonPairFilter>{\r
- private List<ComparisonPairFilter> filters = new ArrayList<ComparisonPairFilter>();\r
- private String name;\r
- private boolean matchall = true;\r
-\r
- public boolean isFiltered(ComparisonPair pair){\r
- boolean flag;\r
- if(isMatchAll()){ // all of criteria are matched?\r
- flag = true;\r
- for(ComparisonPairFilter filter: filters){\r
- if(!filter.isFiltered(pair)){\r
- flag = false;\r
- break;\r
- }\r
- }\r
- }\r
- else{ // any of criteria are matched\r
- flag = false;\r
- for(ComparisonPairFilter filter: filters){\r
- if(filter.isFiltered(pair)){\r
- flag = true;\r
- break;\r
- }\r
- }\r
- }\r
- return flag;\r
- }\r
-\r
- /**\r
- * returns a flag that all filters must be matched.\r
- */\r
- public boolean isMatchAll(){\r
- return matchall;\r
- }\r
-\r
- /**\r
- * returns a flag that any filters must be matched.\r
- */\r
- public boolean isMatchAny(){\r
- return !isMatchAll();\r
- }\r
-\r
- /**\r
- * filtering if all criteria is matched.\r
- */\r
- public void setMatchAll(){\r
- matchall = true;\r
- }\r
-\r
- /**\r
- * filtering if any criterion is matched.\r
- */\r
- public void setMatchAny(){\r
- matchall = false;\r
- }\r
-\r
- public void setName(String name){\r
- this.name = name;\r
- }\r
-\r
- public String getName(){\r
- return name;\r
- }\r
-\r
- public boolean addFilter(ComparisonPairFilter o){\r
- return filters.add(o);\r
- }\r
-\r
- public void removeAllFilters(){\r
- filters.clear();\r
- }\r
-\r
- public ComparisonPairFilter getFilter(int index){\r
- return filters.get(index);\r
- }\r
-\r
- public Iterator<ComparisonPairFilter> iterator(){\r
- return filters.iterator();\r
- }\r
-\r
- public ComparisonPairFilter removeFilter(int index){\r
- return filters.remove(index);\r
- }\r
-\r
- public int getFilterCount(){\r
- return filters.size();\r
- }\r
-\r
- public String toString(){\r
- StringBuilder sb = new StringBuilder("filterset{ ");\r
- sb.append("name=").append(getName()).append(", ");\r
- sb.append(isMatchAll()? "match_all": "match_any");\r
- sb.append(", ").append(filters).append("}");\r
- \r
- return new String(sb);\r
- }\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+
+/**
+ * Set of {@link ComparisonPairFilter <Ccode>ComparisonPairFilter</code>}.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ComparisonPairFilterSet implements Iterable<ComparisonPairFilter>{
+ private List<ComparisonPairFilter> filters = new ArrayList<ComparisonPairFilter>();
+ private String name;
+ private boolean matchall = true;
+
+ public boolean isFiltered(ComparisonPair pair){
+ boolean flag;
+ if(isMatchAll()){ // all of criteria are matched?
+ flag = true;
+ for(ComparisonPairFilter filter: filters){
+ if(!filter.isFiltered(pair)){
+ flag = false;
+ break;
+ }
+ }
+ }
+ else{ // any of criteria are matched
+ flag = false;
+ for(ComparisonPairFilter filter: filters){
+ if(filter.isFiltered(pair)){
+ flag = true;
+ break;
+ }
+ }
+ }
+ return flag;
+ }
+
+ /**
+ * returns a flag that all filters must be matched.
+ */
+ public boolean isMatchAll(){
+ return matchall;
+ }
+
+ /**
+ * returns a flag that any filters must be matched.
+ */
+ public boolean isMatchAny(){
+ return !isMatchAll();
+ }
+
+ /**
+ * filtering if all criteria is matched.
+ */
+ public void setMatchAll(){
+ matchall = true;
+ }
+
+ /**
+ * filtering if any criterion is matched.
+ */
+ public void setMatchAny(){
+ matchall = false;
+ }
+
+ public void setName(String name){
+ this.name = name;
+ }
+
+ public String getName(){
+ return name;
+ }
+
+ public boolean addFilter(ComparisonPairFilter o){
+ return filters.add(o);
+ }
+
+ public void removeAllFilters(){
+ filters.clear();
+ }
+
+ public ComparisonPairFilter getFilter(int index){
+ return filters.get(index);
+ }
+
+ public Iterator<ComparisonPairFilter> iterator(){
+ return filters.iterator();
+ }
+
+ public ComparisonPairFilter removeFilter(int index){
+ return filters.remove(index);
+ }
+
+ public int getFilterCount(){
+ return filters.size();
+ }
+
+ public String toString(){
+ StringBuilder sb = new StringBuilder("filterset{ ");
+ sb.append("name=").append(getName()).append(", ");
+ sb.append(isMatchAll()? "match_all": "match_any");
+ sb.append(", ").append(filters).append("}");
+
+ return new String(sb);
+ }
+}
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.Iterator;\r
-\r
-/**\r
- * result set of birthmark comparison.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public interface ComparisonResultSet extends Iterable<ComparisonPair>{\r
- /**\r
- * the birthmark environment.\r
- */\r
- public BirthmarkEnvironment getEnvironment();\r
-\r
- /**\r
- * the birthmark context.\r
- */\r
- public BirthmarkContext getContext();\r
-\r
- /**\r
- * a iterator for {@link ComparisonPair <code>ComparisonPair</code>}.\r
- */\r
- public Iterator<ComparisonPair> iterator();\r
-\r
- /**\r
- * a comparison pair at given index.\r
- */\r
- public ComparisonPair getPairAt(int index);\r
-\r
- /**\r
- * all comparison pairs.\r
- */\r
- public ComparisonPair[] getPairs();\r
-\r
- /**\r
- * comparison pair count of this instance has.\r
- */\r
- public int getPairCount();\r
-\r
- /**\r
- * comparison source.\r
- */\r
- public BirthmarkSet[] getPairSources();\r
-\r
- /**\r
- * returns an array of comparison sources.\r
- */\r
- public Iterator<BirthmarkSet> pairSources();\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+import java.util.Iterator;
+
+/**
+ * result set of birthmark comparison.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public interface ComparisonResultSet extends Iterable<ComparisonPair>{
+ /**
+ * the birthmark environment.
+ */
+ public BirthmarkEnvironment getEnvironment();
+
+ /**
+ * the birthmark context.
+ */
+ public BirthmarkContext getContext();
+
+ /**
+ * a iterator for {@link ComparisonPair <code>ComparisonPair</code>}.
+ */
+ public Iterator<ComparisonPair> iterator();
+
+ /**
+ * a comparison pair at given index.
+ */
+ public ComparisonPair getPairAt(int index);
+
+ /**
+ * all comparison pairs.
+ */
+ public ComparisonPair[] getPairs();
+
+ /**
+ * comparison pair count of this instance has.
+ */
+ public int getPairCount();
+
+ /**
+ * comparison source.
+ */
+ public BirthmarkSet[] getPairSources();
+
+ /**
+ * returns an array of comparison sources.
+ */
+ public Iterator<BirthmarkSet> pairSources();
+}
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.Iterator;\r
-\r
-/**\r
- * This interface represents a set of extracted birthmarks.\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public interface ExtractionResultSet extends Iterable<BirthmarkSet>{\r
- public BirthmarkStoreTarget getStoreTarget();\r
-\r
- /**\r
- * returns an environment of extraction result.\r
- */\r
- public BirthmarkEnvironment getEnvironment();\r
-\r
- /**\r
- * returns a context of extraction result.\r
- */\r
- public BirthmarkContext getContext();\r
-\r
- public String getId();\r
-\r
- /**\r
- * sets extraction \r
- */\r
- public boolean isTableType();\r
-\r
- /**\r
- * sets table type comparison flag.\r
- * @see #isTableType()\r
- */\r
- public void setTableType(boolean flag);\r
-\r
- /**\r
- * returns types of extracted birthmarks.\r
- */\r
- public String[] getBirthmarkTypes();\r
-\r
- public ExtractionUnit getExtractionUnit();\r
-\r
- /**\r
- * returns the number of target birthmark-set size (# of classes, packages, or jar files).\r
- */\r
- public int getBirthmarkSetSize();\r
-\r
- /**\r
- * returns an iterator for all of birthmark-sets.\r
- */\r
- public Iterator<BirthmarkSet> iterator();\r
-\r
- /**\r
- * returns a birthmark-set of given index.\r
- */\r
- public BirthmarkSet getBirthmarkSet(int index);\r
-\r
- /**\r
- * returns a birthmark-set of given name.\r
- */\r
- public BirthmarkSet getBirthmarkSet(String name);\r
-\r
- /**\r
- * returns an array for all of birthmark-sets.\r
- */\r
- public BirthmarkSet[] getBirthmarkSets();\r
-\r
- /**\r
- * removes given birthmark-set from this object.\r
- */\r
- public void removeBirthmarkSet(BirthmarkSet bs);\r
-\r
- /**\r
- * removes all of birthmark-set this object has.\r
- */\r
- public void removeAllBirthmarkSets();\r
-\r
- /**\r
- * returns the number of birthmark-set to specified extraction target (TARGET_X, TARGET_Y, TARGET_XY, or TARGET_BOTH).\r
- */\r
- public int getBirthmarkSetSize(ExtractionTarget target);\r
-\r
- /**\r
- * returns an iterator of birthmark-sets from specified extraction target.\r
- */\r
- public Iterator<BirthmarkSet> birthmarkSets(ExtractionTarget target);\r
-\r
- /**\r
- * \r
- */\r
- public BirthmarkSet getBirthmarkSet(ExtractionTarget target, int index);\r
-\r
- /**\r
- * \r
- */\r
- public BirthmarkSet getBirthmarkSet(ExtractionTarget target, String setname);\r
-\r
- /**\r
- * \r
- */\r
- public BirthmarkSet[] getBirthmarkSets(ExtractionTarget target);\r
-\r
- /**\r
- * adds birthmark-set to extraction target.\r
- * This method must be called when building birthmark-set is completely finished.\r
- * All of birthmark must be added to birthmark-set.\r
- * Because, if the concrete class of this interface stores given birthmark-set to database,\r
- * birthmarks is parsed and store into target database in this method.\r
- * @throws IllegalArgumentsException target is ExtractionTarget.TARGET_BOTH \r
- */\r
- public void addBirthmarkSet(ExtractionTarget target, BirthmarkSet set) throws BirthmarkStoreException;\r
-\r
- /**\r
- * remove all of birthmark-set this object has, then, adds each birthmark-sets to this object. \r
- * @see #removeAllBirthmarkSets(ExtractionTarget)\r
- * @see #addBirthmarkSet(ExtractionTarget, BirthmarkSet)\r
- * @throws IllegalArgumentsException target is ExtractionTarget.TARGET_BOTH \r
- */\r
- public void setBirthmarkSets(ExtractionTarget target, BirthmarkSet[] sets) throws BirthmarkStoreException;\r
-\r
- /**\r
- * remove specified birthmark-set from specified extraction target.\r
- */\r
- public void removeBirthmarkSet(ExtractionTarget target, BirthmarkSet set);\r
-\r
- /**\r
- * remove all birthmark-sets from specified extraction target.\r
- */\r
- public void removeAllBirthmarkSets(ExtractionTarget target);\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+import java.util.Iterator;
+
+/**
+ * This interface represents a set of extracted birthmarks.
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public interface ExtractionResultSet extends Iterable<BirthmarkSet>{
+ public BirthmarkStoreTarget getStoreTarget();
+
+ /**
+ * returns an environment of extraction result.
+ */
+ public BirthmarkEnvironment getEnvironment();
+
+ /**
+ * returns a context of extraction result.
+ */
+ public BirthmarkContext getContext();
+
+ public String getId();
+
+ /**
+ * sets extraction
+ */
+ public boolean isTableType();
+
+ /**
+ * sets table type comparison flag.
+ * @see #isTableType()
+ */
+ public void setTableType(boolean flag);
+
+ /**
+ * returns types of extracted birthmarks.
+ */
+ public String[] getBirthmarkTypes();
+
+ public ExtractionUnit getExtractionUnit();
+
+ /**
+ * returns the number of target birthmark-set size (# of classes, packages, or jar files).
+ */
+ public int getBirthmarkSetSize();
+
+ /**
+ * returns an iterator for all of birthmark-sets.
+ */
+ public Iterator<BirthmarkSet> iterator();
+
+ /**
+ * returns a birthmark-set of given index.
+ */
+ public BirthmarkSet getBirthmarkSet(int index);
+
+ /**
+ * returns a birthmark-set of given name.
+ */
+ public BirthmarkSet getBirthmarkSet(String name);
+
+ /**
+ * returns an array for all of birthmark-sets.
+ */
+ public BirthmarkSet[] getBirthmarkSets();
+
+ /**
+ * removes given birthmark-set from this object.
+ */
+ public void removeBirthmarkSet(BirthmarkSet bs);
+
+ /**
+ * removes all of birthmark-set this object has.
+ */
+ public void removeAllBirthmarkSets();
+
+ /**
+ * returns the number of birthmark-set to specified extraction target (TARGET_X, TARGET_Y, TARGET_XY, or TARGET_BOTH).
+ */
+ public int getBirthmarkSetSize(ExtractionTarget target);
+
+ /**
+ * returns an iterator of birthmark-sets from specified extraction target.
+ */
+ public Iterator<BirthmarkSet> birthmarkSets(ExtractionTarget target);
+
+ /**
+ *
+ */
+ public BirthmarkSet getBirthmarkSet(ExtractionTarget target, int index);
+
+ /**
+ *
+ */
+ public BirthmarkSet getBirthmarkSet(ExtractionTarget target, String setname);
+
+ /**
+ *
+ */
+ public BirthmarkSet[] getBirthmarkSets(ExtractionTarget target);
+
+ /**
+ * adds birthmark-set to extraction target.
+ * This method must be called when building birthmark-set is completely finished.
+ * All of birthmark must be added to birthmark-set.
+ * Because, if the concrete class of this interface stores given birthmark-set to database,
+ * birthmarks is parsed and store into target database in this method.
+ * @throws IllegalArgumentsException target is ExtractionTarget.TARGET_BOTH
+ */
+ public void addBirthmarkSet(ExtractionTarget target, BirthmarkSet set) throws BirthmarkStoreException;
+
+ /**
+ * remove all of birthmark-set this object has, then, adds each birthmark-sets to this object.
+ * @see #removeAllBirthmarkSets(ExtractionTarget)
+ * @see #addBirthmarkSet(ExtractionTarget, BirthmarkSet)
+ * @throws IllegalArgumentsException target is ExtractionTarget.TARGET_BOTH
+ */
+ public void setBirthmarkSets(ExtractionTarget target, BirthmarkSet[] sets) throws BirthmarkStoreException;
+
+ /**
+ * remove specified birthmark-set from specified extraction target.
+ */
+ public void removeBirthmarkSet(ExtractionTarget target, BirthmarkSet set);
+
+ /**
+ * remove all birthmark-sets from specified extraction target.
+ */
+ public void removeAllBirthmarkSets(ExtractionTarget target);
+}
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-/**\r
- * This enum represents the mean of extracted birthmarks.\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public enum ExtractionTarget{\r
- TARGET_X,\r
- TARGET_Y,\r
- TARGET_XY,\r
- TARGET_BOTH,\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+/**
+ * This enum represents the mean of extracted birthmarks.
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public enum ExtractionTarget{
+ TARGET_X,
+ TARGET_Y,
+ TARGET_XY,
+ TARGET_BOTH,
}
\ No newline at end of file
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-/**\r
- * This enum type represents birthmark extraction unit.\r
- * \r
- * The name of\r
- * {@link jp.naist.se.stigmata.BirthmarkSet <code>BirthmarkSet</code>} will be\r
- * class name, method name, package name, or product name.\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public enum ExtractionUnit{\r
- CLASS,\r
- PACKAGE,\r
- ARCHIVE,\r
- @Deprecated\r
- METHOD,\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+/**
+ * This enum type represents birthmark extraction unit.
+ *
+ * The name of
+ * {@link jp.sourceforge.stigmata.BirthmarkSet <code>BirthmarkSet</code>} will be
+ * class name, method name, package name, or product name.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public enum ExtractionUnit{
+ CLASS,
+ PACKAGE,
+ ARCHIVE,
+ @Deprecated
+ METHOD,
+}
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-/**\r
- *\r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class ExtractorNotFoundException extends BirthmarkException{\r
- private static final long serialVersionUID = 2050231007494812969L;\r
-\r
- public ExtractorNotFoundException(){\r
- }\r
-\r
- public ExtractorNotFoundException(String message, Throwable cause){\r
- super(message, cause);\r
- }\r
-\r
- public ExtractorNotFoundException(String message){\r
- super(message);\r
- }\r
-\r
- public ExtractorNotFoundException(Throwable cause){\r
- super(cause);\r
- }\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class ExtractorNotFoundException extends BirthmarkException{
+ private static final long serialVersionUID = 2050231007494812969L;
+
+ public ExtractorNotFoundException(){
+ }
+
+ public ExtractorNotFoundException(String message, Throwable cause){
+ super(message, cause);
+ }
+
+ public ExtractorNotFoundException(String message){
+ super(message);
+ }
+
+ public ExtractorNotFoundException(Throwable cause){
+ super(cause);
+ }
+}
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class FilterNotFoundException extends BirthmarkException{\r
- private static final long serialVersionUID = -3981002035876805953L;\r
-\r
- public FilterNotFoundException(){\r
- }\r
-\r
- public FilterNotFoundException(String message, Throwable cause){\r
- super(message, cause);\r
- }\r
-\r
- public FilterNotFoundException(String message){\r
- super(message);\r
- }\r
-\r
- public FilterNotFoundException(Throwable cause){\r
- super(cause);\r
- }\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class FilterNotFoundException extends BirthmarkException{
+ private static final long serialVersionUID = -3981002035876805953L;
+
+ public FilterNotFoundException(){
+ }
+
+ public FilterNotFoundException(String message, Throwable cause){
+ super(message, cause);
+ }
+
+ public FilterNotFoundException(String message){
+ super(message);
+ }
+
+ public FilterNotFoundException(Throwable cause){
+ super(cause);
+ }
+}
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.BufferedReader;\r
-import java.io.File;\r
-import java.io.FileWriter;\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.io.InputStreamReader;\r
-import java.io.PrintWriter;\r
-import java.net.MalformedURLException;\r
-import java.net.URL;\r
-import java.util.ArrayList;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import java.util.ResourceBundle;\r
-\r
-import jp.naist.se.stigmata.event.BirthmarkEngineAdapter;\r
-import jp.naist.se.stigmata.event.BirthmarkEngineEvent;\r
-import jp.naist.se.stigmata.event.WarningMessages;\r
-import jp.naist.se.stigmata.hook.Phase;\r
-import jp.naist.se.stigmata.hook.StigmataHookManager;\r
-import jp.naist.se.stigmata.printer.BirthmarkServicePrinter;\r
-import jp.naist.se.stigmata.printer.ComparisonResultSetPrinter;\r
-import jp.naist.se.stigmata.printer.ExtractionResultSetPrinter;\r
-import jp.naist.se.stigmata.printer.PrinterManager;\r
-import jp.naist.se.stigmata.reader.ClasspathContext;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-import jp.naist.se.stigmata.spi.ResultPrinterSpi;\r
-import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
-import jp.naist.se.stigmata.utils.ConfigFileExporter;\r
-import jp.sourceforge.talisman.xmlcli.CommandLinePlus;\r
-import jp.sourceforge.talisman.xmlcli.OptionsBuilder;\r
-import jp.sourceforge.talisman.xmlcli.ResourceHelpFormatter;\r
-import jp.sourceforge.talisman.xmlcli.XmlCliConfigurationException;\r
-import jp.sourceforge.talisman.xmlcli.builder.OptionsBuilderFactory;\r
-\r
-import org.apache.commons.cli.CommandLineParser;\r
-import org.apache.commons.cli.HelpFormatter;\r
-import org.apache.commons.cli.Options;\r
-import org.apache.commons.cli.ParseException;\r
-import org.apache.commons.cli.PosixParser;\r
-import org.w3c.dom.DOMException;\r
-\r
-/**\r
- * Front end class.\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public final class Main{\r
- private PrinterManager manager = PrinterManager.getInstance();\r
-\r
- /**\r
- * main process.\r
- * @throws org.apache.commons.cli.ParseException \r
- */\r
- public Main(String[] args) throws ParseException{\r
- Options options = buildOptions();\r
- CommandLineParser parser = new PosixParser();\r
- CommandLinePlus commandLine = new CommandLinePlus(parser.parse(options, args, false));\r
-\r
- Stigmata stigmata = Stigmata.getInstance();\r
- stigmata.configuration(commandLine.getOptionValue("config-file"), commandLine.hasOption("reset-config"));\r
-\r
- String[] arguments = commandLine.getArgs();\r
-\r
- String mode = commandLine.getOptionValue("mode");\r
- String format = commandLine.getOptionValue("format");\r
-\r
- if(format == null){\r
- format = "xml";\r
- }\r
- if(mode == null){\r
- mode = "gui";\r
- }\r
- BirthmarkContext context = stigmata.createContext();\r
- updateContext(context, commandLine);\r
-\r
- boolean exitFlag = executeOption(context.getEnvironment(), commandLine, options);\r
-\r
- if(!exitFlag){\r
- if(!("gui".equals(mode) || "list".equals(mode)) && (arguments == null || arguments.length == 0)){\r
-\r
- printHelp(context.getEnvironment(), options);\r
- return;\r
- }\r
- StigmataHookManager.getInstance().runHook(Phase.SETUP, context.getEnvironment());\r
-\r
- if(mode.equals("list")){\r
- listBirthmarks(context, format);\r
- }\r
- else if(mode.equals("extract")){\r
- extractBirthmarks(stigmata, arguments, format, context);\r
- }\r
- else if(mode.equals("compare")){\r
- compareBirthmarks(stigmata, arguments, format, context);\r
- }\r
- else if(mode.equals("gui")){\r
- StigmataFrame frame = new StigmataFrame(stigmata, context.getEnvironment());\r
- frame.setVisible(true);\r
- }\r
-\r
- if(!mode.equals("gui")){\r
- StigmataHookManager.getInstance().runHook(Phase.TEAR_DOWN, context.getEnvironment());\r
- }\r
- else{\r
- final BirthmarkEnvironment env = context.getEnvironment();\r
- Runtime.getRuntime().addShutdownHook(new Thread(){\r
- public void run(){\r
- StigmataHookManager.getInstance().runHook(\r
- Phase.TEAR_DOWN, env\r
- );\r
- }\r
- });\r
- }\r
- }\r
- }\r
-\r
- /**\r
- * extract birthmarks.\r
- */\r
- private void extractBirthmarks(Stigmata stigmata, String[] args, String format,\r
- BirthmarkContext context){\r
- try{\r
- context.setComparisonMethod(ComparisonMethod.ROUND_ROBIN_SAME_PAIR);\r
- BirthmarkEngine engine = new BirthmarkEngine(context.getEnvironment());\r
-\r
- engine.addBirthmarkEngineListener(new BirthmarkEngineAdapter(){\r
- public void operationDone(BirthmarkEngineEvent e){\r
- WarningMessages warnings = e.getMessage();\r
- for(Iterator<Exception> i = warnings.exceptions(); i.hasNext(); ){\r
- i.next().printStackTrace();\r
- }\r
- }\r
- });\r
- ExtractionResultSet ers = engine.extract(args, context);\r
-\r
- ResultPrinterSpi spi = manager.getService(format);\r
- ExtractionResultSetPrinter formatter = spi.getExtractionResultSetPrinter();\r
- formatter.printResult(new PrintWriter(System.out), ers);\r
- }catch(Exception ex){\r
- ex.printStackTrace();\r
- }\r
- }\r
-\r
- /**\r
- * \r
- */\r
- private void compareBirthmarks(Stigmata stigmata, String[] args, String format,\r
- BirthmarkContext context){\r
- try{\r
- BirthmarkEngine engine = new BirthmarkEngine(context.getEnvironment());\r
- context.setComparisonMethod(ComparisonMethod.ROUND_ROBIN_SAME_PAIR);\r
- engine.addBirthmarkEngineListener(new BirthmarkEngineAdapter(){\r
- public void operationDone(BirthmarkEngineEvent e){\r
- WarningMessages warnings = e.getMessage();\r
- for(Iterator<Exception> i = warnings.exceptions(); i.hasNext(); ){\r
- i.next().printStackTrace();\r
- }\r
- }\r
- });\r
-\r
- ExtractionResultSet rs = engine.extract(args, context);\r
- ComparisonResultSet resultset = engine.compare(rs);\r
- if(context.hasFilter()){\r
- resultset = engine.filter(resultset);\r
- }\r
-\r
- ResultPrinterSpi spi = manager.getService(format);\r
- ComparisonResultSetPrinter formatter = spi.getComparisonResultSetPrinter();\r
- formatter.printResult(new PrintWriter(System.out), resultset);\r
- }catch(Exception e){\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
- private void listBirthmarks(BirthmarkContext context, String format){\r
- try{\r
- BirthmarkSpi[] spis = context.getEnvironment().findServices();\r
- ResultPrinterSpi spi = manager.getService(format);\r
- BirthmarkServicePrinter formatter = spi.getBirthmarkServicePrinter();\r
-\r
- formatter.printResult(new PrintWriter(System.out), spis);\r
- }catch(IOException e){\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
- private void updateContext(BirthmarkContext context, CommandLinePlus cl){\r
- BirthmarkEnvironment env = context.getEnvironment();\r
-\r
- String[] birthmarks = getTargetBirthmarks(env, cl);\r
- for(int i = 0; i < birthmarks.length; i++){\r
- context.addBirthmarkType(birthmarks[i]);\r
- }\r
- if(cl.hasOption("filter")){\r
- String[] filters = cl.getOptionValues("filter");\r
- for(int i = 0; i < filters.length; i++){\r
- context.addFilterType(filters[i]);\r
- }\r
- }\r
- if(cl.hasOption("store-target")){\r
- String value = cl.getOptionValue("store-target");\r
- BirthmarkStoreTarget bst = BirthmarkStoreTarget.valueOf(value);\r
- if(bst == null){\r
- bst = BirthmarkStoreTarget.MEMORY;\r
- }\r
- context.setStoreTarget(bst);\r
- }\r
- if(cl.hasOption("extraction-unit")){\r
- ExtractionUnit unit = ExtractionUnit.valueOf(cl.getOptionValue("extraction-unit"));\r
- context.setExtractionUnit(unit);\r
- }\r
-\r
- addClasspath(env.getClasspathContext(), cl);\r
- }\r
-\r
- private String[] getTargetBirthmarks(BirthmarkEnvironment env, CommandLinePlus cl){\r
- String[] birthmarks = cl.getOptionValues("birthmark");\r
- if(birthmarks == null || birthmarks.length == 0){\r
- List<String> birthmarkList = new ArrayList<String>();\r
- for(BirthmarkSpi service: env.getServices()){\r
- if(!service.isExpert()){\r
- birthmarkList.add(service.getType());\r
- }\r
- }\r
- birthmarks = birthmarkList.toArray(new String[birthmarkList.size()]);\r
- }\r
- return birthmarks;\r
- }\r
-\r
- private void addClasspath(ClasspathContext context, CommandLinePlus commandLine){\r
- String[] classpath = commandLine.getOptionValues("classpath");\r
-\r
- if(classpath != null){\r
- for(String cp: classpath){\r
- try{\r
- File f = new File(cp);\r
- if(f.exists()){\r
- context.addClasspath(f.toURI().toURL());\r
- }\r
- }catch(MalformedURLException ex){\r
- }\r
- }\r
- }\r
- }\r
-\r
- private boolean executeOption(BirthmarkEnvironment env, CommandLinePlus commandLine, Options options){\r
- boolean exitFlag = false;\r
- if(commandLine.hasOption("help")){\r
- printHelp(env, options);\r
- exitFlag = true;\r
- }\r
- if(commandLine.hasOption("version")){\r
- printVersion();\r
- exitFlag = true;\r
- }\r
- if(commandLine.hasOption("license")){\r
- printLicense();\r
- exitFlag = true;\r
- }\r
- if(commandLine.hasOption("export-config")){\r
- exportConfiguration(env, commandLine.getOptionValue("export-config"));\r
- exitFlag = true;\r
- }\r
- return exitFlag;\r
- }\r
-\r
- private Options buildOptions(){\r
- try{\r
- OptionsBuilderFactory factory = OptionsBuilderFactory.getInstance();\r
- URL location = getClass().getResource("/resources/options.xml");\r
- OptionsBuilder builder = factory.createBuilder(location);\r
- Options options = builder.buildOptions();\r
-\r
- return options;\r
- }catch(XmlCliConfigurationException ex){\r
- ex.printStackTrace();\r
- }catch(DOMException ex){\r
- ex.printStackTrace();\r
- }catch(IOException ex){\r
- ex.printStackTrace();\r
- }\r
- return null;\r
- }\r
-\r
- public void exportConfiguration(BirthmarkEnvironment env, String file){\r
- try{\r
- PrintWriter out;\r
- if(file == null){\r
- out = new PrintWriter(System.out);\r
- }\r
- else{\r
- if(!file.endsWith(".xml")){\r
- file = file + ".xml";\r
- }\r
- out = new PrintWriter(new FileWriter(file));\r
- }\r
-\r
- new ConfigFileExporter(env).export(out);\r
- out.close();\r
- }catch(IOException e){\r
- }\r
- }\r
-\r
- public void printHelp(BirthmarkEnvironment env, Options options){\r
- Package p = getClass().getPackage();\r
- ResourceBundle helpResource = ResourceBundle.getBundle("resources.options");\r
- HelpFormatter formatter = new ResourceHelpFormatter(helpResource);\r
- formatter.printHelp(\r
- String.format(\r
- helpResource.getString("cli.interface"),\r
- p.getImplementationVersion()\r
- ),\r
- options\r
- );\r
- System.out.println();\r
- System.out.println(helpResource.getString("cli.interface.birthmarks"));\r
- for(BirthmarkSpi service: env.getServices()){\r
- if(!service.isExpert()){\r
- System.out.printf(" %-5s (%s): %s%n", service.getType(),\r
- service.getDisplayType(), service.getDescription());\r
- }\r
- }\r
- System.out.println();\r
- System.out.println(helpResource.getString("cli.interface.filters"));\r
- for(ComparisonPairFilterSet filterset: env.getFilterManager().getFilterSets()){\r
- String matchString = helpResource.getString("cli.interface.filter.matchall");\r
- if(filterset.isMatchAny()) matchString = helpResource.getString("cli.interface.filter.matchany");\r
- System.out.printf(" %s (%s)%n", filterset.getName(), matchString);\r
- for(ComparisonPairFilter filter: filterset){\r
- System.out.printf(" %s%n", filter);\r
- }\r
- }\r
- System.out.println();\r
- System.out.println(helpResource.getString("cli.interface.copyright"));\r
- System.out.println(helpResource.getString("cli.interface.mailto"));\r
- }\r
-\r
- public void printLicense(){\r
- try{\r
- InputStream in = getClass().getResourceAsStream("/META-INF/license.txt");\r
- BufferedReader reader = new BufferedReader(new InputStreamReader(in));\r
- String line;\r
-\r
- while((line = reader.readLine()) != null){\r
- System.out.println(line);\r
- }\r
- reader.close();\r
- }catch(IOException ex){\r
- ex.printStackTrace();\r
- }\r
- }\r
-\r
- public void printVersion(){\r
- ResourceBundle helpResource = ResourceBundle.getBundle("resources.options");\r
- Package p = getClass().getPackage();\r
- System.out.printf("%s %s%n", helpResource.getString("cli.version.header"), p.getImplementationVersion());\r
- }\r
-\r
- public static void main(String[] args) throws Exception{\r
- new Main(args);\r
- }\r
-}\r
+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.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.reader.ClasspathContext;
+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;
+import org.w3c.dom.DOMException;
+
+/**
+ * Front end class.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public final class Main{
+ private PrinterManager manager = PrinterManager.getInstance();
+
+ /**
+ * main process.
+ * @throws org.apache.commons.cli.ParseException
+ */
+ public Main(String[] args) throws ParseException{
+ Options options = buildOptions();
+ CommandLineParser parser = new PosixParser();
+ CommandLinePlus commandLine = new CommandLinePlus(parser.parse(options, args, false));
+
+ Stigmata stigmata = Stigmata.getInstance();
+ stigmata.configuration(commandLine.getOptionValue("config-file"), commandLine.hasOption("reset-config"));
+
+ String[] arguments = commandLine.getArgs();
+
+ String mode = commandLine.getOptionValue("mode");
+ String format = commandLine.getOptionValue("format");
+
+ if(format == null){
+ format = "xml";
+ }
+ if(mode == null){
+ mode = "gui";
+ }
+ BirthmarkContext context = stigmata.createContext();
+ updateContext(context, commandLine);
+
+ boolean exitFlag = executeOption(context.getEnvironment(), commandLine, options);
+
+ if(!exitFlag){
+ if(!("gui".equals(mode) || "list".equals(mode)) && (arguments == null || arguments.length == 0)){
+
+ printHelp(context.getEnvironment(), options);
+ return;
+ }
+ StigmataHookManager.getInstance().runHook(Phase.SETUP, context.getEnvironment());
+
+ 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
+ );
+ }
+ });
+ }
+ }
+ }
+
+ /**
+ * 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());
+
+ engine.addBirthmarkEngineListener(new BirthmarkEngineAdapter(){
+ public void operationDone(BirthmarkEngineEvent e){
+ WarningMessages warnings = e.getMessage();
+ for(Iterator<Exception> 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();
+ }
+ }
+
+ /**
+ *
+ */
+ 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<Exception> 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 void updateContext(BirthmarkContext context, CommandLinePlus cl){
+ BirthmarkEnvironment env = context.getEnvironment();
+
+ String[] birthmarks = getTargetBirthmarks(env, cl);
+ for(int i = 0; i < birthmarks.length; i++){
+ context.addBirthmarkType(birthmarks[i]);
+ }
+ if(cl.hasOption("filter")){
+ String[] filters = cl.getOptionValues("filter");
+ for(int i = 0; i < filters.length; i++){
+ context.addFilterType(filters[i]);
+ }
+ }
+ if(cl.hasOption("store-target")){
+ String value = cl.getOptionValue("store-target");
+ BirthmarkStoreTarget bst = BirthmarkStoreTarget.valueOf(value);
+ if(bst == null){
+ bst = BirthmarkStoreTarget.MEMORY;
+ }
+ context.setStoreTarget(bst);
+ }
+ if(cl.hasOption("extraction-unit")){
+ ExtractionUnit unit = ExtractionUnit.valueOf(cl.getOptionValue("extraction-unit"));
+ context.setExtractionUnit(unit);
+ }
+
+ addClasspath(env.getClasspathContext(), cl);
+ }
+
+ private String[] getTargetBirthmarks(BirthmarkEnvironment env, CommandLinePlus cl){
+ String[] birthmarks = cl.getOptionValues("birthmark");
+ if(birthmarks == null || birthmarks.length == 0){
+ List<String> birthmarkList = new ArrayList<String>();
+ for(BirthmarkSpi service: env.getServices()){
+ if(!service.isExpert()){
+ birthmarkList.add(service.getType());
+ }
+ }
+ birthmarks = birthmarkList.toArray(new String[birthmarkList.size()]);
+ }
+ return birthmarks;
+ }
+
+ private void addClasspath(ClasspathContext context, CommandLinePlus commandLine){
+ String[] classpath = commandLine.getOptionValues("classpath");
+
+ if(classpath != null){
+ for(String cp: classpath){
+ try{
+ File f = new File(cp);
+ if(f.exists()){
+ context.addClasspath(f.toURI().toURL());
+ }
+ }catch(MalformedURLException ex){
+ }
+ }
+ }
+ }
+
+ 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();
+ URL location = getClass().getResource("/resources/options.xml");
+ OptionsBuilder builder = factory.createBuilder(location);
+ Options options = builder.buildOptions();
+
+ return options;
+ }catch(XmlCliConfigurationException ex){
+ ex.printStackTrace();
+ }catch(DOMException ex){
+ ex.printStackTrace();
+ }catch(IOException ex){
+ ex.printStackTrace();
+ }
+ 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);
+ }
+}
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.File;\r
-import java.io.FileInputStream;\r
-import java.io.FileNotFoundException;\r
-import java.io.FileWriter;\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.io.PrintWriter;\r
-import java.net.MalformedURLException;\r
-import java.net.URL;\r
-import java.net.URLClassLoader;\r
-import java.util.ArrayList;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-\r
-import jp.naist.se.stigmata.event.BirthmarkEngineListener;\r
-import jp.naist.se.stigmata.printer.PrinterManager;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-import jp.naist.se.stigmata.ui.swing.ExtensionFilter;\r
-import jp.naist.se.stigmata.utils.ConfigFileExporter;\r
-import jp.naist.se.stigmata.utils.ConfigFileImporter;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class Stigmata{\r
- /**\r
- * instance. singleton pattern.\r
- */\r
- private static Stigmata stigmata;\r
- private BirthmarkEnvironment defaultEnvironment;\r
- private List<BirthmarkEngineListener> listeners = new ArrayList<BirthmarkEngineListener>();\r
-\r
- /**\r
- * private constructor.\r
- */\r
- private Stigmata(){\r
- configuration();\r
- }\r
-\r
- /**\r
- * gets only instance of this class.\r
- */\r
- public static synchronized Stigmata getInstance(){\r
- if(stigmata == null){\r
- stigmata = new Stigmata();\r
- }\r
- return stigmata;\r
- }\r
-\r
- /**\r
- * creates a new birthmark context.\r
- */\r
- public BirthmarkContext createContext(){\r
- return new BirthmarkContext(createEnvironment());\r
- }\r
-\r
- /**\r
- * creates a new birthmark environment.\r
- */\r
- public BirthmarkEnvironment createEnvironment(){\r
- return new BirthmarkEnvironment(defaultEnvironment);\r
- }\r
-\r
- /**\r
- * creates a new birthmark engine.\r
- */\r
- public BirthmarkEngine createEngine(){\r
- return createEngine(createEnvironment());\r
- }\r
-\r
- /**\r
- * creates a new birthmark engine with given environment.\r
- */\r
- public BirthmarkEngine createEngine(BirthmarkEnvironment environment){\r
- BirthmarkEngine engine = new BirthmarkEngine(environment);\r
- for(BirthmarkEngineListener listener: listeners){\r
- engine.addBirthmarkEngineListener(listener);\r
- }\r
- return engine;\r
- }\r
-\r
- public void addBirthmarkEngineListener(BirthmarkEngineListener listener){\r
- listeners.add(listener);\r
- }\r
-\r
- public void removeBirthmarkEngineListener(BirthmarkEngineListener listener){\r
- listeners.remove(listener);\r
- }\r
-\r
- public void configuration(){\r
- configuration(null, false);\r
- }\r
-\r
- public void configuration(String filePath, boolean resetFlag){\r
- InputStream target = null;\r
- if(filePath != null){\r
- try{\r
- target = new FileInputStream(filePath);\r
- } catch(FileNotFoundException e){\r
- filePath = null;\r
- }\r
- }\r
-\r
- if(filePath == null){\r
- String currentDirectory = System.getProperty("execution.directory");\r
- if(currentDirectory == null){\r
- currentDirectory = System.getProperty("user.dir");\r
- }\r
- File file = new File(currentDirectory, "stigmata.xml");\r
- if(!file.exists()){\r
- file = new File(BirthmarkEnvironment.getStigmataHome(), "stigmata.xml");\r
- if(!file.exists()){\r
- file = null;\r
- }\r
- }\r
- if(file != null){\r
- try {\r
- target = new FileInputStream(file);\r
- } catch (FileNotFoundException ex) {\r
- // never throwed this exception;\r
- throw new InternalError(ex.getMessage());\r
- }\r
- }\r
- }\r
- if(target == null || resetFlag){\r
- target = getClass().getResourceAsStream("/resources/stigmata.xml");\r
- if(resetFlag){\r
- defaultEnvironment = null;\r
- BirthmarkEnvironment.resetSettings();\r
- }\r
- }\r
- initConfiguration(target);\r
- }\r
-\r
- private void initConfiguration(InputStream in){\r
- if(defaultEnvironment == null){\r
- defaultEnvironment = BirthmarkEnvironment.getDefaultEnvironment();\r
- }\r
- buildStigmataDirectory(BirthmarkEnvironment.getStigmataHome());\r
-\r
- defaultEnvironment.setClassLoader(buildClassLoader("plugins"));\r
- try{\r
- ConfigFileImporter parser = new ConfigFileImporter(defaultEnvironment);\r
- parser.parse(in);\r
- } catch(IOException e){\r
- throw new ApplicationInitializationError(e);\r
- }\r
- for(Iterator<BirthmarkSpi> i = defaultEnvironment.lookupProviders(BirthmarkSpi.class); i.hasNext(); ){\r
- BirthmarkSpi service = i.next();\r
- defaultEnvironment.addService(service);\r
- }\r
- PrinterManager.updateServices(defaultEnvironment);\r
- exportConfigFile(BirthmarkEnvironment.getStigmataHome(), "stigmata.xml");\r
- }\r
-\r
- private void buildStigmataDirectory(String homeDirectory){\r
- File file = new File(homeDirectory);\r
- if(file.exists() && file.isFile()){\r
- File dest = new File(file.getParent(), ".stigmata.back");\r
- file.renameTo(dest);\r
- }\r
- if(!file.exists()){\r
- file.mkdirs();\r
- }\r
- File pluginDir = new File(file, "plugins");\r
- if(!pluginDir.exists()){\r
- pluginDir.mkdirs();\r
- }\r
- }\r
-\r
- private void exportConfigFile(String parent, String fileName){\r
- try{\r
- File file = new File(parent, fileName);\r
- if(!file.exists()){\r
- ConfigFileExporter exporter = new ConfigFileExporter(defaultEnvironment);\r
- exporter.export(new PrintWriter(new FileWriter(file)));\r
- }\r
- } catch(IOException e){\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
- private static ClassLoader buildClassLoader(String path){\r
- File directory = new File(BirthmarkEnvironment.getStigmataHome(), path);\r
- File[] jarfiles = directory.listFiles(new ExtensionFilter("jar"));\r
-\r
- if(jarfiles == null) jarfiles = new File[0];\r
- try{\r
- URL[] urls = new URL[jarfiles.length];\r
- for(int i = 0; i < jarfiles.length; i++){\r
- urls[i] = jarfiles[i].toURI().toURL();\r
- }\r
- return new URLClassLoader(urls, Stigmata.class.getClassLoader());\r
- } catch(MalformedURLException e){\r
- }\r
- return null;\r
- }\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import jp.sourceforge.stigmata.event.BirthmarkEngineListener;
+import jp.sourceforge.stigmata.printer.PrinterManager;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.ui.swing.ExtensionFilter;
+import jp.sourceforge.stigmata.utils.ConfigFileExporter;
+import jp.sourceforge.stigmata.utils.ConfigFileImporter;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class Stigmata{
+ /**
+ * instance. singleton pattern.
+ */
+ private static Stigmata stigmata;
+ private BirthmarkEnvironment defaultEnvironment;
+ private List<BirthmarkEngineListener> listeners = new ArrayList<BirthmarkEngineListener>();
+
+ /**
+ * private constructor.
+ */
+ private Stigmata(){
+ configuration();
+ }
+
+ /**
+ * gets only instance of this class.
+ */
+ public static synchronized Stigmata getInstance(){
+ if(stigmata == null){
+ stigmata = new Stigmata();
+ }
+ return stigmata;
+ }
+
+ /**
+ * creates a new birthmark context.
+ */
+ public BirthmarkContext createContext(){
+ return new BirthmarkContext(createEnvironment());
+ }
+
+ /**
+ * creates a new birthmark environment.
+ */
+ public BirthmarkEnvironment createEnvironment(){
+ return new BirthmarkEnvironment(defaultEnvironment);
+ }
+
+ /**
+ * creates a new birthmark engine.
+ */
+ public BirthmarkEngine createEngine(){
+ return createEngine(createEnvironment());
+ }
+
+ /**
+ * creates a new birthmark engine with given environment.
+ */
+ public BirthmarkEngine createEngine(BirthmarkEnvironment environment){
+ BirthmarkEngine engine = new BirthmarkEngine(environment);
+ for(BirthmarkEngineListener listener: listeners){
+ engine.addBirthmarkEngineListener(listener);
+ }
+ return engine;
+ }
+
+ public void addBirthmarkEngineListener(BirthmarkEngineListener listener){
+ listeners.add(listener);
+ }
+
+ public void removeBirthmarkEngineListener(BirthmarkEngineListener listener){
+ listeners.remove(listener);
+ }
+
+ public void configuration(){
+ configuration(null, false);
+ }
+
+ public void configuration(String filePath, boolean resetFlag){
+ InputStream target = null;
+ if(filePath != null){
+ try{
+ target = new FileInputStream(filePath);
+ } catch(FileNotFoundException e){
+ filePath = null;
+ }
+ }
+
+ if(filePath == null){
+ String currentDirectory = System.getProperty("execution.directory");
+ if(currentDirectory == null){
+ currentDirectory = System.getProperty("user.dir");
+ }
+ File file = new File(currentDirectory, "stigmata.xml");
+ if(!file.exists()){
+ file = new File(BirthmarkEnvironment.getStigmataHome(), "stigmata.xml");
+ if(!file.exists()){
+ file = null;
+ }
+ }
+ if(file != null){
+ try {
+ target = new FileInputStream(file);
+ } catch (FileNotFoundException ex) {
+ // never throwed this exception;
+ throw new InternalError(ex.getMessage());
+ }
+ }
+ }
+ if(target == null || resetFlag){
+ target = getClass().getResourceAsStream("/resources/stigmata.xml");
+ if(resetFlag){
+ defaultEnvironment = null;
+ BirthmarkEnvironment.resetSettings();
+ }
+ }
+ initConfiguration(target);
+ }
+
+ private void initConfiguration(InputStream in){
+ if(defaultEnvironment == null){
+ defaultEnvironment = BirthmarkEnvironment.getDefaultEnvironment();
+ }
+ buildStigmataDirectory(BirthmarkEnvironment.getStigmataHome());
+
+ defaultEnvironment.setClassLoader(buildClassLoader("plugins"));
+ try{
+ ConfigFileImporter parser = new ConfigFileImporter(defaultEnvironment);
+ parser.parse(in);
+ } catch(IOException e){
+ throw new ApplicationInitializationError(e);
+ }
+ for(Iterator<BirthmarkSpi> i = defaultEnvironment.lookupProviders(BirthmarkSpi.class); i.hasNext(); ){
+ BirthmarkSpi service = i.next();
+ defaultEnvironment.addService(service);
+ }
+ PrinterManager.updateServices(defaultEnvironment);
+ exportConfigFile(BirthmarkEnvironment.getStigmataHome(), "stigmata.xml");
+ }
+
+ private void buildStigmataDirectory(String homeDirectory){
+ File file = new File(homeDirectory);
+ if(file.exists() && file.isFile()){
+ File dest = new File(file.getParent(), ".stigmata.back");
+ file.renameTo(dest);
+ }
+ if(!file.exists()){
+ file.mkdirs();
+ }
+ File pluginDir = new File(file, "plugins");
+ if(!pluginDir.exists()){
+ pluginDir.mkdirs();
+ }
+ }
+
+ private void exportConfigFile(String parent, String fileName){
+ try{
+ File file = new File(parent, fileName);
+ if(!file.exists()){
+ ConfigFileExporter exporter = new ConfigFileExporter(defaultEnvironment);
+ exporter.export(new PrintWriter(new FileWriter(file)));
+ }
+ } catch(IOException e){
+ e.printStackTrace();
+ }
+ }
+
+ private static ClassLoader buildClassLoader(String path){
+ File directory = new File(BirthmarkEnvironment.getStigmataHome(), path);
+ File[] jarfiles = directory.listFiles(new ExtensionFilter("jar"));
+
+ if(jarfiles == null) jarfiles = new File[0];
+ try{
+ URL[] urls = new URL[jarfiles.length];
+ for(int i = 0; i < jarfiles.length; i++){
+ urls[i] = jarfiles[i].toURI().toURL();
+ }
+ return new URLClassLoader(urls, Stigmata.class.getClassLoader());
+ } catch(MalformedURLException e){
+ }
+ return null;
+ }
+}
-package jp.naist.se.stigmata.birthmarks;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-\r
-import jp.naist.se.stigmata.Birthmark;\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.BirthmarkExtractionFailedException;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-import org.objectweb.asm.ClassReader;\r
-import org.objectweb.asm.ClassWriter;\r
-\r
-/**\r
- * Abstract birthmark extractor using ASM.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public abstract class ASMBirthmarkExtractor extends AbstractBirthmarkExtractor{\r
- public ASMBirthmarkExtractor(BirthmarkSpi spi){\r
- super(spi);\r
- }\r
-\r
- @SuppressWarnings("deprecation")\r
- public ASMBirthmarkExtractor(){\r
- super();\r
- }\r
-\r
- public abstract BirthmarkExtractVisitor\r
- createExtractVisitor(ClassWriter writer, Birthmark birthmark, BirthmarkEnvironment environment);\r
-\r
- @Override\r
- public Birthmark extract(Birthmark birthmark, InputStream in,\r
- BirthmarkEnvironment environment) throws BirthmarkExtractionFailedException{\r
- BirthmarkExtractionFailedException bee = new BirthmarkExtractionFailedException();\r
-\r
- try{\r
- ClassReader reader = new ClassReader(in);\r
- ClassWriter writer = new ClassWriter(false);\r
- BirthmarkExtractVisitor visitor = createExtractVisitor(writer, birthmark, environment);\r
- reader.accept(visitor, false);\r
-\r
- if(!visitor.isSuccess()){\r
- bee.addCauses(visitor.getCauses());\r
- }\r
-\r
- return visitor.getBirthmark();\r
- } catch(IOException e){\r
- bee.addCause(e);\r
- throw bee;\r
- }\r
- }\r
+package jp.sourceforge.stigmata.birthmarks;
+
+/*
+ * $Id$
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.BirthmarkExtractionFailedException;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.ClassWriter;
+
+/**
+ * Abstract birthmark extractor using ASM.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public abstract class ASMBirthmarkExtractor extends AbstractBirthmarkExtractor{
+ public ASMBirthmarkExtractor(BirthmarkSpi spi){
+ super(spi);
+ }
+
+ @SuppressWarnings("deprecation")
+ public ASMBirthmarkExtractor(){
+ super();
+ }
+
+ public abstract BirthmarkExtractVisitor
+ createExtractVisitor(ClassWriter writer, Birthmark birthmark, BirthmarkEnvironment environment);
+
+ @Override
+ public Birthmark extract(Birthmark birthmark, InputStream in,
+ BirthmarkEnvironment environment) throws BirthmarkExtractionFailedException{
+ BirthmarkExtractionFailedException bee = new BirthmarkExtractionFailedException();
+
+ try{
+ ClassReader reader = new ClassReader(in);
+ ClassWriter writer = new ClassWriter(false);
+ BirthmarkExtractVisitor visitor = createExtractVisitor(writer, birthmark, environment);
+ reader.accept(visitor, false);
+
+ if(!visitor.isSuccess()){
+ bee.addCauses(visitor.getCauses());
+ }
+
+ return visitor.getBirthmark();
+ } catch(IOException e){
+ bee.addCause(e);
+ throw bee;
+ }
+ }
}
\ No newline at end of file
-package jp.naist.se.stigmata.birthmarks;
+package jp.sourceforge.stigmata.birthmarks;
/*
* $Id$
import java.util.Iterator;
import java.util.List;
-import jp.naist.se.stigmata.Birthmark;
-import jp.naist.se.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkElement;
/**
* Abstract class for concrete {@link Birthmark <code>Birthmark</code>}
-package jp.naist.se.stigmata.birthmarks;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.ByteArrayInputStream;\r
-import java.io.InputStream;\r
-\r
-import jp.naist.se.stigmata.Birthmark;\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.BirthmarkExtractionFailedException;\r
-import jp.naist.se.stigmata.BirthmarkExtractor;\r
-import jp.naist.se.stigmata.ExtractionUnit;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * Abstract class for extracting birthmark.\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public abstract class AbstractBirthmarkExtractor implements BirthmarkExtractor{\r
- /**\r
- * provider.\r
- */\r
- private BirthmarkSpi spi;\r
-\r
- /**\r
- * default constructor.\r
- * @deprecated this constructor does not support service provider.\r
- */\r
- public AbstractBirthmarkExtractor(){\r
- }\r
-\r
- /**\r
- * constructor.\r
- * @param spi service provider.\r
- */\r
- public AbstractBirthmarkExtractor(BirthmarkSpi spi){\r
- this.spi = spi;\r
- }\r
-\r
- /**\r
- * returns the provider of this extractor.\r
- */\r
- public BirthmarkSpi getProvider(){\r
- return spi;\r
- }\r
-\r
- /**\r
- * extract birthmark given stream.\r
- */\r
- public final Birthmark extract(InputStream in) throws BirthmarkExtractionFailedException{\r
- return extract(in, BirthmarkEnvironment.getDefaultEnvironment());\r
- }\r
-\r
- /**\r
- * extract birthmark given byte array.\r
- */\r
- public final Birthmark extract(byte[] bytecode) throws BirthmarkExtractionFailedException{\r
- return extract(bytecode, BirthmarkEnvironment.getDefaultEnvironment());\r
- }\r
-\r
- /**\r
- * extract birthmark given stream.\r
- */\r
- public final Birthmark extract(Birthmark birthmark, InputStream in) throws BirthmarkExtractionFailedException{\r
- return extract(birthmark, in, BirthmarkEnvironment.getDefaultEnvironment());\r
- }\r
-\r
- /**\r
- * extract birthmark given byte array.\r
- */\r
- public final Birthmark extract(Birthmark birthmark, byte[] bytecode) throws BirthmarkExtractionFailedException{\r
- return extract(birthmark, bytecode, BirthmarkEnvironment.getDefaultEnvironment());\r
- }\r
-\r
- /**\r
- * extract birthmark given stream with given environment.\r
- */\r
- public final Birthmark extract(InputStream in, BirthmarkEnvironment environment) throws BirthmarkExtractionFailedException{\r
- return extract(createBirthmark(), in, environment);\r
- }\r
-\r
- /**\r
- * extract birthmark given byte array with given environment.\r
- */\r
- public final Birthmark extract(Birthmark birthmark, byte[] bytecode, BirthmarkEnvironment environment) throws BirthmarkExtractionFailedException{\r
- return extract(birthmark, new ByteArrayInputStream(bytecode), environment);\r
- }\r
-\r
- /**\r
- * extract birthmark given byte array with given environment.\r
- */\r
- public final Birthmark extract(byte[] bytecode, BirthmarkEnvironment environment) throws BirthmarkExtractionFailedException{\r
- return extract(createBirthmark(), new ByteArrayInputStream(bytecode), environment);\r
- }\r
-\r
- /**\r
- * extract birthmark given stream with given environment.\r
- */\r
- public abstract Birthmark extract(Birthmark birthmark, InputStream in, BirthmarkEnvironment environment) throws BirthmarkExtractionFailedException;\r
-\r
- /**\r
- * create birthmark.\r
- * @see jp.naist.se.stigmata.BirthmarkExtractor#createBirthmark()\r
- */\r
- public Birthmark createBirthmark(){\r
- return new PlainBirthmark(getProvider().getType());\r
- }\r
-\r
- public abstract ExtractionUnit[] getAcceptableUnits();\r
-\r
- public boolean isAcceptable(ExtractionUnit unit){\r
- ExtractionUnit[] units = getAcceptableUnits();\r
-\r
- for(int i = 0; i < units.length; i++){\r
- if(units[i] == unit){\r
- return true;\r
- }\r
- }\r
- return false;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks;
+
+/*
+ * $Id$
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.BirthmarkExtractionFailedException;
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+import jp.sourceforge.stigmata.ExtractionUnit;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ * Abstract class for extracting birthmark.
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public abstract class AbstractBirthmarkExtractor implements BirthmarkExtractor{
+ /**
+ * provider.
+ */
+ private BirthmarkSpi spi;
+
+ /**
+ * default constructor.
+ * @deprecated this constructor does not support service provider.
+ */
+ public AbstractBirthmarkExtractor(){
+ }
+
+ /**
+ * constructor.
+ * @param spi service provider.
+ */
+ public AbstractBirthmarkExtractor(BirthmarkSpi spi){
+ this.spi = spi;
+ }
+
+ /**
+ * returns the provider of this extractor.
+ */
+ public BirthmarkSpi getProvider(){
+ return spi;
+ }
+
+ /**
+ * extract birthmark given stream.
+ */
+ public final Birthmark extract(InputStream in) throws BirthmarkExtractionFailedException{
+ return extract(in, BirthmarkEnvironment.getDefaultEnvironment());
+ }
+
+ /**
+ * extract birthmark given byte array.
+ */
+ public final Birthmark extract(byte[] bytecode) throws BirthmarkExtractionFailedException{
+ return extract(bytecode, BirthmarkEnvironment.getDefaultEnvironment());
+ }
+
+ /**
+ * extract birthmark given stream.
+ */
+ public final Birthmark extract(Birthmark birthmark, InputStream in) throws BirthmarkExtractionFailedException{
+ return extract(birthmark, in, BirthmarkEnvironment.getDefaultEnvironment());
+ }
+
+ /**
+ * extract birthmark given byte array.
+ */
+ public final Birthmark extract(Birthmark birthmark, byte[] bytecode) throws BirthmarkExtractionFailedException{
+ return extract(birthmark, bytecode, BirthmarkEnvironment.getDefaultEnvironment());
+ }
+
+ /**
+ * extract birthmark given stream with given environment.
+ */
+ public final Birthmark extract(InputStream in, BirthmarkEnvironment environment) throws BirthmarkExtractionFailedException{
+ return extract(createBirthmark(), in, environment);
+ }
+
+ /**
+ * extract birthmark given byte array with given environment.
+ */
+ public final Birthmark extract(Birthmark birthmark, byte[] bytecode, BirthmarkEnvironment environment) throws BirthmarkExtractionFailedException{
+ return extract(birthmark, new ByteArrayInputStream(bytecode), environment);
+ }
+
+ /**
+ * extract birthmark given byte array with given environment.
+ */
+ public final Birthmark extract(byte[] bytecode, BirthmarkEnvironment environment) throws BirthmarkExtractionFailedException{
+ return extract(createBirthmark(), new ByteArrayInputStream(bytecode), environment);
+ }
+
+ /**
+ * extract birthmark given stream with given environment.
+ */
+ public abstract Birthmark extract(Birthmark birthmark, InputStream in, BirthmarkEnvironment environment) throws BirthmarkExtractionFailedException;
+
+ /**
+ * create birthmark.
+ * @see jp.sourceforge.stigmata.BirthmarkExtractor#createBirthmark()
+ */
+ public Birthmark createBirthmark(){
+ return new PlainBirthmark(getProvider().getType());
+ }
+
+ public abstract ExtractionUnit[] getAcceptableUnits();
+
+ public boolean isAcceptable(ExtractionUnit unit){
+ ExtractionUnit[] units = getAcceptableUnits();
+
+ for(int i = 0; i < units.length; i++){
+ if(units[i] == unit){
+ return true;
+ }
+ }
+ return false;
+ }
+}
-package jp.naist.se.stigmata.birthmarks;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.Locale;\r
-\r
-import jp.naist.se.stigmata.Birthmark;\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-import jp.naist.se.stigmata.utils.LocalizedDescriptionManager;\r
-\r
-/**\r
- * Abstract class for {@link BirthmarkSpi <code>BirthmarkSpi</code>}\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public abstract class AbstractBirthmarkService implements BirthmarkSpi{\r
- public String getDisplayType(){\r
- return getDisplayType(Locale.getDefault());\r
- }\r
-\r
- public String getDisplayType(Locale locale){\r
- LocalizedDescriptionManager manager = LocalizedDescriptionManager.getInstance();\r
- String type = manager.getDisplayType(locale, getType());\r
- if(type == null){\r
- type = getType();\r
- }\r
- return type;\r
- }\r
-\r
- public String getDescription(){\r
- return getDescription(Locale.getDefault());\r
- }\r
-\r
- public String getDescription(Locale locale){\r
- LocalizedDescriptionManager manager = LocalizedDescriptionManager.getInstance();\r
- String description = manager.getDescription(locale, getType());\r
- if(description == null){\r
- description = getDefaultDescription();\r
- }\r
- return description;\r
- }\r
-\r
- public String getComparatorClassName(){\r
- return getComparator().getClass().getName();\r
- }\r
-\r
- public String getExtractorClassName(){\r
- return getExtractor().getClass().getName();\r
- }\r
-\r
- public abstract String getType();\r
-\r
- public abstract String getDefaultDescription();\r
-\r
- public boolean isExpert(){\r
- return true;\r
- }\r
-\r
- public boolean isUserDefined(){\r
- return true;\r
- }\r
-\r
- public String getVersion(){\r
- return getClass().getPackage().getImplementationVersion();\r
- }\r
-\r
- public String getVendorName(){\r
- return getClass().getPackage().getImplementationVendor();\r
- }\r
-\r
- public Birthmark buildBirthmark(){\r
- return getExtractor().createBirthmark();\r
- }\r
-\r
- public BirthmarkElement buildBirthmarkElement(String value){\r
- if(value == null || value.equals("<null>")){\r
- return NullBirthmarkElement.getInstance();\r
- }\r
- return new BirthmarkElement(value);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks;
+
+/*
+ * $Id$
+ */
+
+import java.util.Locale;
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.utils.LocalizedDescriptionManager;
+
+/**
+ * Abstract class for {@link BirthmarkSpi <code>BirthmarkSpi</code>}
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public abstract class AbstractBirthmarkService implements BirthmarkSpi{
+ public String getDisplayType(){
+ return getDisplayType(Locale.getDefault());
+ }
+
+ public String getDisplayType(Locale locale){
+ LocalizedDescriptionManager manager = LocalizedDescriptionManager.getInstance();
+ String type = manager.getDisplayType(locale, getType());
+ if(type == null){
+ type = getType();
+ }
+ return type;
+ }
+
+ public String getDescription(){
+ return getDescription(Locale.getDefault());
+ }
+
+ public String getDescription(Locale locale){
+ LocalizedDescriptionManager manager = LocalizedDescriptionManager.getInstance();
+ String description = manager.getDescription(locale, getType());
+ if(description == null){
+ description = getDefaultDescription();
+ }
+ return description;
+ }
+
+ public String getComparatorClassName(){
+ return getComparator().getClass().getName();
+ }
+
+ public String getExtractorClassName(){
+ return getExtractor().getClass().getName();
+ }
+
+ public abstract String getType();
+
+ public abstract String getDefaultDescription();
+
+ public boolean isExpert(){
+ return true;
+ }
+
+ public boolean isUserDefined(){
+ return true;
+ }
+
+ public String getVersion(){
+ return getClass().getPackage().getImplementationVersion();
+ }
+
+ public String getVendorName(){
+ return getClass().getPackage().getImplementationVendor();
+ }
+
+ public Birthmark buildBirthmark(){
+ return getExtractor().createBirthmark();
+ }
+
+ public BirthmarkElement buildBirthmarkElement(String value){
+ if(value == null || value.equals("<null>")){
+ return NullBirthmarkElement.getInstance();
+ }
+ return new BirthmarkElement(value);
+ }
+}
-package jp.naist.se.stigmata.birthmarks;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import jp.naist.se.stigmata.Birthmark;\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-\r
-import org.objectweb.asm.ClassAdapter;\r
-import org.objectweb.asm.ClassVisitor;\r
-\r
-/**\r
- * Abstract visitor class of extracting birthmarks from class file.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public abstract class BirthmarkExtractVisitor extends ClassAdapter{\r
- private Birthmark birthmark;\r
- private BirthmarkEnvironment environment;\r
- private List<Throwable> causes = new ArrayList<Throwable>();\r
-\r
- public BirthmarkExtractVisitor(ClassVisitor visitor, Birthmark birthmark, BirthmarkEnvironment environment){\r
- super(visitor);\r
- this.birthmark = birthmark;\r
- this.environment = environment;\r
- }\r
-\r
- protected BirthmarkEnvironment getEnvironment(){\r
- return environment;\r
- }\r
-\r
- protected void addElement(BirthmarkElement element){\r
- birthmark.addElement(element);\r
- }\r
-\r
- public Birthmark getBirthmark(){\r
- return birthmark;\r
- }\r
-\r
- public synchronized void addFailur(Throwable e){\r
- causes.add(e);\r
- }\r
-\r
- public boolean isSuccess(){\r
- return causes.size() == 0;\r
- }\r
-\r
- public synchronized Throwable[] getCauses(){\r
- return causes.toArray(new Throwable[causes.size()]);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks;
+
+/*
+ * $Id$
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+
+import org.objectweb.asm.ClassAdapter;
+import org.objectweb.asm.ClassVisitor;
+
+/**
+ * Abstract visitor class of extracting birthmarks from class file.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public abstract class BirthmarkExtractVisitor extends ClassAdapter{
+ private Birthmark birthmark;
+ private BirthmarkEnvironment environment;
+ private List<Throwable> causes = new ArrayList<Throwable>();
+
+ public BirthmarkExtractVisitor(ClassVisitor visitor, Birthmark birthmark, BirthmarkEnvironment environment){
+ super(visitor);
+ this.birthmark = birthmark;
+ this.environment = environment;
+ }
+
+ protected BirthmarkEnvironment getEnvironment(){
+ return environment;
+ }
+
+ protected void addElement(BirthmarkElement element){
+ birthmark.addElement(element);
+ }
+
+ public Birthmark getBirthmark(){
+ return birthmark;
+ }
+
+ public synchronized void addFailur(Throwable e){
+ causes.add(e);
+ }
+
+ public boolean isSuccess(){
+ return causes.size() == 0;
+ }
+
+ public synchronized Throwable[] getCauses(){
+ return causes.toArray(new Throwable[causes.size()]);
+ }
+}
-package jp.naist.se.stigmata.birthmarks;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.lang.reflect.Constructor;\r
-\r
-import jp.naist.se.stigmata.BirthmarkComparator;\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.BirthmarkExtractor;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * Service provider interface for birthmarks which are defined in\r
- * configuration files.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{\r
- private Class<? extends BirthmarkExtractor> extractorClass;\r
- private Class<? extends BirthmarkComparator> comparatorClass;\r
- private String type;\r
- private String displayType;\r
- private String description;\r
- private BirthmarkExtractor extractorObject;\r
- private BirthmarkComparator comparatorObject;\r
- private boolean userDefined = true;\r
- private BirthmarkEnvironment environment;\r
-\r
- public BirthmarkService(BirthmarkEnvironment environment){\r
- this.environment = environment;\r
- }\r
-\r
- public BirthmarkService(){\r
- }\r
-\r
- public void setBirthmarkEnvironment(BirthmarkEnvironment environment){\r
- this.environment = environment;\r
- }\r
-\r
- public void setExtractorClassName(String extractor){\r
- try{\r
- Class<?> c;\r
- if(environment == null){\r
- c = Class.forName(extractor);\r
- }\r
- else{\r
- c = environment.getClasspathContext().findClass(extractor);\r
- }\r
- extractorClass = c.asSubclass(BirthmarkExtractor.class);\r
- extractorObject = null;\r
- } catch(ClassNotFoundException e){\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
- public void setComparatorClassName(String comparator){\r
- try{\r
- Class<?> c;\r
- if(environment == null){\r
- c = Class.forName(comparator);\r
- }\r
- else{\r
- c = environment.getClasspathContext().findClass(comparator);\r
- }\r
- comparatorClass = c.asSubclass(BirthmarkComparator.class);\r
- comparatorObject = null;\r
- } catch(ClassNotFoundException e){\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
- public void setType(String type){\r
- this.type = type;\r
- }\r
-\r
- /**\r
- * returns a type of the birthmark this service provides.\r
- */\r
- @Override\r
- public String getType(){\r
- return type;\r
- }\r
-\r
- public void setDisplayType(String displayType){\r
- this.displayType = displayType;\r
- }\r
-\r
- public String getDisplayType(){\r
- return displayType;\r
- }\r
-\r
- public void setDescription(String description){\r
- this.description = description;\r
- }\r
-\r
- public String getDescription(){\r
- String desc = description;\r
- if(description == null){\r
- desc = "";\r
- }\r
- return desc;\r
- }\r
-\r
- /**\r
- * returns a description of the birthmark this service provides.\r
- */\r
- @Override\r
- public String getDefaultDescription(){\r
- return description;\r
- }\r
-\r
- public String getExtractorClassName(){\r
- return extractorClass.getName();\r
- }\r
-\r
- /**\r
- * returns a extractor for the birthmark of this service.\r
- */\r
- public BirthmarkExtractor getExtractor(){\r
- if(extractorObject == null){\r
- try{\r
- Constructor<? extends BirthmarkExtractor> c = extractorClass.getConstructor(BirthmarkSpi.class);\r
- extractorObject = c.newInstance(this);\r
- } catch(Exception e){\r
- e.printStackTrace();\r
- }\r
- }\r
- return extractorObject;\r
- }\r
-\r
- public String getComparatorClassName(){\r
- return comparatorClass.getName();\r
- }\r
-\r
- /**\r
- * returns a comparator for the birthmark of this service.\r
- */\r
- public BirthmarkComparator getComparator(){\r
- if(comparatorObject == null){\r
- try{\r
- Constructor<? extends BirthmarkComparator> c = comparatorClass.getConstructor(BirthmarkSpi.class);\r
- comparatorObject = c.newInstance(this);\r
- } catch(Exception e){\r
- e.printStackTrace();\r
- }\r
- }\r
- return comparatorObject;\r
- }\r
-\r
- public boolean isUserDefined(){\r
- return userDefined;\r
- }\r
-\r
- public void setUserDefined(boolean userDefined){\r
- this.userDefined = userDefined;\r
- }\r
-}\r
-\r
+package jp.sourceforge.stigmata.birthmarks;
+
+/*
+ * $Id$
+ */
+
+import java.lang.reflect.Constructor;
+
+import jp.sourceforge.stigmata.BirthmarkComparator;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ * Service provider interface for birthmarks which are defined in
+ * configuration files.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{
+ private Class<? extends BirthmarkExtractor> extractorClass;
+ private Class<? extends BirthmarkComparator> comparatorClass;
+ private String type;
+ private String displayType;
+ private String description;
+ private BirthmarkExtractor extractorObject;
+ private BirthmarkComparator comparatorObject;
+ private boolean userDefined = true;
+ private BirthmarkEnvironment environment;
+
+ public BirthmarkService(BirthmarkEnvironment environment){
+ this.environment = environment;
+ }
+
+ public BirthmarkService(){
+ }
+
+ public void setBirthmarkEnvironment(BirthmarkEnvironment environment){
+ this.environment = environment;
+ }
+
+ public void setExtractorClassName(String extractor){
+ try{
+ Class<?> c;
+ if(environment == null){
+ c = Class.forName(extractor);
+ }
+ else{
+ c = environment.getClasspathContext().findClass(extractor);
+ }
+ extractorClass = c.asSubclass(BirthmarkExtractor.class);
+ extractorObject = null;
+ } catch(ClassNotFoundException e){
+ e.printStackTrace();
+ }
+ }
+
+ public void setComparatorClassName(String comparator){
+ try{
+ Class<?> c;
+ if(environment == null){
+ c = Class.forName(comparator);
+ }
+ else{
+ c = environment.getClasspathContext().findClass(comparator);
+ }
+ comparatorClass = c.asSubclass(BirthmarkComparator.class);
+ comparatorObject = null;
+ } catch(ClassNotFoundException e){
+ e.printStackTrace();
+ }
+ }
+
+ public void setType(String type){
+ this.type = type;
+ }
+
+ /**
+ * returns a type of the birthmark this service provides.
+ */
+ @Override
+ public String getType(){
+ return type;
+ }
+
+ public void setDisplayType(String displayType){
+ this.displayType = displayType;
+ }
+
+ public String getDisplayType(){
+ return displayType;
+ }
+
+ public void setDescription(String description){
+ this.description = description;
+ }
+
+ public String getDescription(){
+ String desc = description;
+ if(description == null){
+ desc = "";
+ }
+ return desc;
+ }
+
+ /**
+ * returns a description of the birthmark this service provides.
+ */
+ @Override
+ public String getDefaultDescription(){
+ return description;
+ }
+
+ public String getExtractorClassName(){
+ return extractorClass.getName();
+ }
+
+ /**
+ * returns a extractor for the birthmark of this service.
+ */
+ public BirthmarkExtractor getExtractor(){
+ if(extractorObject == null){
+ try{
+ Constructor<? extends BirthmarkExtractor> c = extractorClass.getConstructor(BirthmarkSpi.class);
+ extractorObject = c.newInstance(this);
+ } catch(Exception e){
+ e.printStackTrace();
+ }
+ }
+ return extractorObject;
+ }
+
+ public String getComparatorClassName(){
+ return comparatorClass.getName();
+ }
+
+ /**
+ * returns a comparator for the birthmark of this service.
+ */
+ public BirthmarkComparator getComparator(){
+ if(comparatorObject == null){
+ try{
+ Constructor<? extends BirthmarkComparator> c = comparatorClass.getConstructor(BirthmarkSpi.class);
+ comparatorObject = c.newInstance(this);
+ } catch(Exception e){
+ e.printStackTrace();
+ }
+ }
+ return comparatorObject;
+ }
+
+ public boolean isUserDefined(){
+ return userDefined;
+ }
+
+ public void setUserDefined(boolean userDefined){
+ this.userDefined = userDefined;
+ }
+}
+
-package jp.naist.se.stigmata.birthmarks;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.Arrays;\r
-import java.util.Comparator;\r
-import java.util.HashMap;\r
-import java.util.Iterator;\r
-import java.util.Map;\r
-\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-import jp.naist.se.stigmata.utils.ArrayIterator;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class FrequencyBirthmark extends AbstractBirthmark{\r
- private static final long serialVersionUID = 1905526895627693908L;\r
-\r
- private Map<String, FrequencyBirthmarkElement> counts = new HashMap<String, FrequencyBirthmarkElement>();\r
- private String type;\r
-\r
- public FrequencyBirthmark(String type){\r
- this.type = type;\r
- }\r
-\r
- @Override\r
- public int getElementCount(){\r
- return counts.size();\r
- }\r
-\r
- @Override\r
- public synchronized BirthmarkElement[] getElements(){\r
- FrequencyBirthmarkElement[] elements = new FrequencyBirthmarkElement[counts.size()];\r
- int index = 0;\r
- for(Map.Entry<String, FrequencyBirthmarkElement> entry: counts.entrySet()){\r
- elements[index] = entry.getValue();\r
- index++;\r
- }\r
- Arrays.sort(elements, new Comparator<FrequencyBirthmarkElement>(){\r
- public int compare(FrequencyBirthmarkElement o1, FrequencyBirthmarkElement o2){\r
- return o1.getValueName().compareTo(o2.getValueName());\r
- }\r
- });\r
- \r
- return elements;\r
- }\r
-\r
- @Override\r
- public Iterator<BirthmarkElement> iterator(){\r
- return new ArrayIterator<BirthmarkElement>(getElements());\r
- }\r
-\r
- public void addElement(BirthmarkElement element){\r
- String value;\r
- if(element instanceof FrequencyBirthmarkElement){\r
- FrequencyBirthmarkElement e = (FrequencyBirthmarkElement)element;\r
- value = e.getValueName();\r
- }\r
- else{\r
- value = (String)element.getValue();\r
- }\r
- FrequencyBirthmarkElement foundElement = counts.get(value);\r
- if(foundElement != null){\r
- foundElement.incrementValueCount();\r
- }\r
- else{\r
- foundElement = new FrequencyBirthmarkElement(value);\r
- }\r
- counts.put(value, foundElement);\r
- }\r
-\r
- @Override\r
- public String getType(){\r
- return type;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks;
+
+/*
+ * $Id$
+ */
+
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.utils.ArrayIterator;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class FrequencyBirthmark extends AbstractBirthmark{
+ private static final long serialVersionUID = 1905526895627693908L;
+
+ private Map<String, FrequencyBirthmarkElement> counts = new HashMap<String, FrequencyBirthmarkElement>();
+ private String type;
+
+ public FrequencyBirthmark(String type){
+ this.type = type;
+ }
+
+ @Override
+ public int getElementCount(){
+ return counts.size();
+ }
+
+ @Override
+ public synchronized BirthmarkElement[] getElements(){
+ FrequencyBirthmarkElement[] elements = new FrequencyBirthmarkElement[counts.size()];
+ int index = 0;
+ for(Map.Entry<String, FrequencyBirthmarkElement> entry: counts.entrySet()){
+ elements[index] = entry.getValue();
+ index++;
+ }
+ Arrays.sort(elements, new Comparator<FrequencyBirthmarkElement>(){
+ public int compare(FrequencyBirthmarkElement o1, FrequencyBirthmarkElement o2){
+ return o1.getValueName().compareTo(o2.getValueName());
+ }
+ });
+
+ return elements;
+ }
+
+ @Override
+ public Iterator<BirthmarkElement> iterator(){
+ return new ArrayIterator<BirthmarkElement>(getElements());
+ }
+
+ public void addElement(BirthmarkElement element){
+ String value;
+ if(element instanceof FrequencyBirthmarkElement){
+ FrequencyBirthmarkElement e = (FrequencyBirthmarkElement)element;
+ value = e.getValueName();
+ }
+ else{
+ value = (String)element.getValue();
+ }
+ FrequencyBirthmarkElement foundElement = counts.get(value);
+ if(foundElement != null){
+ foundElement.incrementValueCount();
+ }
+ else{
+ foundElement = new FrequencyBirthmarkElement(value);
+ }
+ counts.put(value, foundElement);
+ }
+
+ @Override
+ public String getType(){
+ return type;
+ }
+}
-package jp.naist.se.stigmata.birthmarks;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class FrequencyBirthmarkElement extends BirthmarkElement implements ValueCountable{\r
- private static final long serialVersionUID = 4454345943098520436L;\r
-\r
- private int count = 1;\r
-\r
- public FrequencyBirthmarkElement(String value){\r
- super(parseValue(value));\r
- if(!value.equals(super.getValue())){\r
- int number = new Integer(value.substring(0, value.indexOf(":")));\r
- this.count = number;\r
- }\r
- }\r
-\r
- public FrequencyBirthmarkElement(String value, int count){\r
- super(value);\r
- this.count = count;\r
- }\r
-\r
- void incrementValueCount(){\r
- count++;\r
- }\r
-\r
- @Override\r
- public boolean equals(Object o){\r
- boolean flag = false;\r
- if(o instanceof FrequencyBirthmarkElement){\r
- FrequencyBirthmarkElement fmbe = (FrequencyBirthmarkElement)o;\r
- flag = super.equals(fmbe) && getValueCount() == fmbe.getValueCount();\r
- }\r
- return flag;\r
- }\r
-\r
- @Override\r
- public Object getValue(){\r
- return getValueCount() + ": " + getValueName();\r
- }\r
-\r
- @Override\r
- public int hashCode(){\r
- int hash = super.hashCode();\r
- int shift = getValueCount() % 32;\r
-\r
- // cyclic shift\r
- for(int i = 0; i < shift; i++){\r
- int v = hash & 1;\r
- hash = hash >>> 1 | v << 31;\r
- }\r
-\r
- return hash;\r
- }\r
-\r
- public String getValueName(){\r
- return (String)super.getValue();\r
- }\r
-\r
- public int getValueCount(){\r
- return count;\r
- }\r
-\r
- private static String parseValue(String value){\r
- if(value.indexOf(":") > 0){\r
- int index = value.indexOf(":");\r
- String num = value.substring(0, index);\r
- String val = value.substring(index + 1);\r
- try{\r
- // is number?\r
- new Integer(num);\r
- return val.trim();\r
- } catch(NumberFormatException e){\r
- }\r
- }\r
- return value;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkElement;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class FrequencyBirthmarkElement extends BirthmarkElement implements ValueCountable{
+ private static final long serialVersionUID = 4454345943098520436L;
+
+ private int count = 1;
+
+ public FrequencyBirthmarkElement(String value){
+ super(parseValue(value));
+ if(!value.equals(super.getValue())){
+ int number = new Integer(value.substring(0, value.indexOf(":")));
+ this.count = number;
+ }
+ }
+
+ public FrequencyBirthmarkElement(String value, int count){
+ super(value);
+ this.count = count;
+ }
+
+ void incrementValueCount(){
+ count++;
+ }
+
+ @Override
+ public boolean equals(Object o){
+ boolean flag = false;
+ if(o instanceof FrequencyBirthmarkElement){
+ FrequencyBirthmarkElement fmbe = (FrequencyBirthmarkElement)o;
+ flag = super.equals(fmbe) && getValueCount() == fmbe.getValueCount();
+ }
+ return flag;
+ }
+
+ @Override
+ public Object getValue(){
+ return getValueCount() + ": " + getValueName();
+ }
+
+ @Override
+ public int hashCode(){
+ int hash = super.hashCode();
+ int shift = getValueCount() % 32;
+
+ // cyclic shift
+ for(int i = 0; i < shift; i++){
+ int v = hash & 1;
+ hash = hash >>> 1 | v << 31;
+ }
+
+ return hash;
+ }
+
+ public String getValueName(){
+ return (String)super.getValue();
+ }
+
+ public int getValueCount(){
+ return count;
+ }
+
+ private static String parseValue(String value){
+ if(value.indexOf(":") > 0){
+ int index = value.indexOf(":");
+ String num = value.substring(0, index);
+ String val = value.substring(index + 1);
+ try{
+ // is number?
+ new Integer(num);
+ return val.trim();
+ } catch(NumberFormatException e){
+ }
+ }
+ return value;
+ }
+}
-package jp.naist.se.stigmata.birthmarks;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-\r
-/**\r
- * Null birthmark element.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$ \r
- */\r
-public class NullBirthmarkElement extends BirthmarkElement{\r
- private static final long serialVersionUID = -92345638932523L;\r
-\r
- private static final NullBirthmarkElement ELEMENT = new NullBirthmarkElement();\r
-\r
- private NullBirthmarkElement(){\r
- super(null);\r
- }\r
-\r
- public static BirthmarkElement getInstance(){\r
- return ELEMENT;\r
- }\r
-\r
- public int hashCode(){\r
- return 0;\r
- }\r
-\r
- public boolean equals(Object o){\r
- return o instanceof NullBirthmarkElement;\r
- }\r
-\r
- public String toString(){\r
- return "<null>";\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkElement;
+
+/**
+ * Null birthmark element.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class NullBirthmarkElement extends BirthmarkElement{
+ private static final long serialVersionUID = -92345638932523L;
+
+ private static final NullBirthmarkElement ELEMENT = new NullBirthmarkElement();
+
+ private NullBirthmarkElement(){
+ super(null);
+ }
+
+ public static BirthmarkElement getInstance(){
+ return ELEMENT;
+ }
+
+ public int hashCode(){
+ return 0;
+ }
+
+ public boolean equals(Object o){
+ return o instanceof NullBirthmarkElement;
+ }
+
+ public String toString(){
+ return "<null>";
+ }
+}
-package jp.naist.se.stigmata.birthmarks;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-\r
-/**\r
- * Implementation of plain birthmark.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class PlainBirthmark extends AbstractBirthmark{\r
- private static final long serialVersionUID = 2370435723234463456L;\r
-\r
- private String type;\r
-\r
- public PlainBirthmark(String type){\r
- this.type = type;\r
- }\r
-\r
- public PlainBirthmark(){\r
- }\r
-\r
- public void addElement(int index, BirthmarkElement element){\r
- elements.add(index, element);\r
- }\r
-\r
- public BirthmarkElement getElement(int index){\r
- return elements.get(index);\r
- }\r
-\r
- public void setType(String type){\r
- this.type = type;\r
- }\r
-\r
- @Override\r
- public String getType(){\r
- return type;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkElement;
+
+/**
+ * Implementation of plain birthmark.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class PlainBirthmark extends AbstractBirthmark{
+ private static final long serialVersionUID = 2370435723234463456L;
+
+ private String type;
+
+ public PlainBirthmark(String type){
+ this.type = type;
+ }
+
+ public PlainBirthmark(){
+ }
+
+ public void addElement(int index, BirthmarkElement element){
+ elements.add(index, element);
+ }
+
+ public BirthmarkElement getElement(int index){
+ return elements.get(index);
+ }
+
+ public void setType(String type){
+ this.type = type;
+ }
+
+ @Override
+ public String getType(){
+ return type;
+ }
+}
-package jp.naist.se.stigmata.birthmarks;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-/**\r
- * This interface represents that the implemented class have name and its count.\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public interface ValueCountable{\r
- public int getValueCount();\r
-\r
- public String getValueName();\r
-}\r
+package jp.sourceforge.stigmata.birthmarks;
+
+/*
+ * $Id$
+ */
+
+/**
+ * This interface represents that the implemented class have name and its count.
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public interface ValueCountable{
+ public int getValueCount();
+
+ public String getValueName();
+}
-package jp.naist.se.stigmata.birthmarks.comparators;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.Birthmark;\r
-import jp.naist.se.stigmata.BirthmarkComparator;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * abstract birthmark comparator.\r
- *\r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public abstract class AbstractBirthmarkComparator implements BirthmarkComparator{\r
- private BirthmarkSpi spi;\r
-\r
- @Deprecated\r
- public AbstractBirthmarkComparator(){\r
- }\r
-\r
- public AbstractBirthmarkComparator(BirthmarkSpi spi){\r
- this.spi = spi;\r
- }\r
-\r
- public BirthmarkSpi getProvider(){\r
- return spi;\r
- }\r
-\r
- public String getType(){\r
- return spi.getType();\r
- }\r
-\r
- public abstract double compare(Birthmark b1, Birthmark b2);\r
-\r
- public int getCompareCount(Birthmark b1, Birthmark b2){\r
- return b1.getElementCount() + b2.getElementCount();\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.comparators;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkComparator;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ * abstract birthmark comparator.
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public abstract class AbstractBirthmarkComparator implements BirthmarkComparator{
+ private BirthmarkSpi spi;
+
+ @Deprecated
+ public AbstractBirthmarkComparator(){
+ }
+
+ public AbstractBirthmarkComparator(BirthmarkSpi spi){
+ this.spi = spi;
+ }
+
+ public BirthmarkSpi getProvider(){
+ return spi;
+ }
+
+ public String getType(){
+ return spi.getType();
+ }
+
+ public abstract double compare(Birthmark b1, Birthmark b2);
+
+ public int getCompareCount(Birthmark b1, Birthmark b2){
+ return b1.getElementCount() + b2.getElementCount();
+ }
+}
-package jp.naist.se.stigmata.birthmarks.comparators;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.lang.reflect.Constructor;\r
-import java.lang.reflect.InvocationTargetException;\r
-import java.util.Locale;\r
-\r
-import jp.naist.se.stigmata.BirthmarkComparator;\r
-import jp.naist.se.stigmata.spi.AbstractServiceProvider;\r
-import jp.naist.se.stigmata.spi.BirthmarkComparatorSpi;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-import jp.naist.se.stigmata.utils.LocalizedDescriptionManager;\r
-\r
-/**\r
- * Abstract service provider interface for comparing birthmarks.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-abstract class AbstractBirthmarkComparatorService extends AbstractServiceProvider implements BirthmarkComparatorSpi{\r
- /**\r
- * returns a type of the birthmark this service provides.\r
- */\r
- public abstract String getType();\r
-\r
- /**\r
- * returns a localized description of the birthmark this service provides.\r
- */\r
- public String getDescription(Locale locale){\r
- return LocalizedDescriptionManager.getInstance().getDescription(\r
- locale, getType(), LocalizedDescriptionManager.ServiceCategory.comparator\r
- );\r
- }\r
-\r
- /**\r
- * returns a localized description of the birthmark in default locale.\r
- */\r
- public String getDescription(){\r
- return getDescription(Locale.getDefault());\r
- }\r
-\r
- public abstract String getComparatorClassName();\r
-\r
- /**\r
- * returns a extractor for the birthmark of this service.\r
- */\r
- public BirthmarkComparator getComparator(BirthmarkSpi service){\r
- try{\r
- Class<?> c = Class.forName(getComparatorClassName());\r
- Class<? extends BirthmarkComparator> clazz = c.asSubclass(BirthmarkComparator.class);\r
- Constructor<? extends BirthmarkComparator> constructor = clazz.getConstructor(BirthmarkSpi.class);\r
- return constructor.newInstance(service);\r
- } catch(NoSuchMethodException e){\r
- } catch(InstantiationException e){\r
- } catch(InvocationTargetException e){\r
- } catch(ClassNotFoundException e){\r
- } catch(IllegalAccessException e){\r
- }\r
- return null;\r
- }\r
-}\r
-\r
+package jp.sourceforge.stigmata.birthmarks.comparators;
+
+/*
+ * $Id$
+ */
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Locale;
+
+import jp.sourceforge.stigmata.BirthmarkComparator;
+import jp.sourceforge.stigmata.spi.AbstractServiceProvider;
+import jp.sourceforge.stigmata.spi.BirthmarkComparatorSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.utils.LocalizedDescriptionManager;
+
+/**
+ * Abstract service provider interface for comparing birthmarks.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+abstract class AbstractBirthmarkComparatorService extends AbstractServiceProvider implements BirthmarkComparatorSpi{
+ /**
+ * returns a type of the birthmark this service provides.
+ */
+ public abstract String getType();
+
+ /**
+ * returns a localized description of the birthmark this service provides.
+ */
+ public String getDescription(Locale locale){
+ return LocalizedDescriptionManager.getInstance().getDescription(
+ locale, getType(), LocalizedDescriptionManager.ServiceCategory.comparator
+ );
+ }
+
+ /**
+ * returns a localized description of the birthmark in default locale.
+ */
+ public String getDescription(){
+ return getDescription(Locale.getDefault());
+ }
+
+ public abstract String getComparatorClassName();
+
+ /**
+ * returns a extractor for the birthmark of this service.
+ */
+ public BirthmarkComparator getComparator(BirthmarkSpi service){
+ try{
+ Class<?> c = Class.forName(getComparatorClassName());
+ Class<? extends BirthmarkComparator> clazz = c.asSubclass(BirthmarkComparator.class);
+ Constructor<? extends BirthmarkComparator> constructor = clazz.getConstructor(BirthmarkSpi.class);
+ return constructor.newInstance(service);
+ } catch(NoSuchMethodException e){
+ } catch(InstantiationException e){
+ } catch(InvocationTargetException e){
+ } catch(ClassNotFoundException e){
+ } catch(IllegalAccessException e){
+ }
+ return null;
+ }
+}
+
-package jp.naist.se.stigmata.birthmarks.comparators;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-\r
-import jp.naist.se.stigmata.Birthmark;\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-import jp.naist.se.stigmata.birthmarks.ValueCountable;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * Comparing birthmarks by cosine similarity algorithm. This class compares\r
- * birthmarks which must be implemented\r
- * {@link ValueCountable <code>ValueCountable</code>} interface.\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class CosineSimilarityBirthmarkComparator extends\r
- AbstractBirthmarkComparator{\r
-\r
- public CosineSimilarityBirthmarkComparator(BirthmarkSpi spi){\r
- super(spi);\r
- }\r
-\r
- public double compare(Birthmark b1, Birthmark b2){\r
- if(!b1.getType().equals(b2.getType())){\r
- return Double.NaN;\r
- }\r
- if(b1.getElementCount() == 0 && b2.getElementCount() == 0){\r
- return 1d;\r
- }\r
- else if(b1.getElementCount() == 0 || b2.getElementCount() == 0){\r
- return 0d;\r
- }\r
-\r
- Map<String, CountPair> pairs = new HashMap<String, CountPair>();\r
- addCount(pairs, b1, true);\r
- addCount(pairs, b2, false);\r
-\r
- double norm1 = norm(pairs, true);\r
- double norm2 = norm(pairs, false);\r
- double product = innerproduct(pairs);\r
- double similarity = product / (norm1 * norm2);\r
- // System.out.printf("%g / (%g * %g) = %g%n", product, norm1, norm2, similarity);\r
-\r
- // double radian = Math.acos(product / (norm1 * norm2));\r
- // double angle = 90 - (180 * radian / Math.PI);\r
- // double sim = angle / 90;\r
- // System.out.printf("angle: %g (%g\93x, %g)%n", radian, angle, sim);\r
-\r
- return similarity;\r
- }\r
-\r
- private double innerproduct(Map<String, CountPair> pairs){\r
- double sum = 0;\r
- for(CountPair pair: pairs.values()){\r
- sum += pair.get(true) * pair.get(false);\r
- }\r
- return sum;\r
- }\r
-\r
- private double norm(Map<String, CountPair> pairs, boolean first){\r
- double sum = 0;\r
- for(CountPair pair: pairs.values()){\r
- sum += pair.get(first) * pair.get(first);\r
- }\r
- return Math.sqrt(sum);\r
- }\r
-\r
- private void addCount(Map<String, CountPair> pairs, Birthmark birthmark, boolean first){\r
- for(BirthmarkElement element: birthmark){\r
- ValueCountable vc = (ValueCountable)element;\r
- CountPair cp = pairs.get(vc.getValueName());\r
- if(cp == null){\r
- cp = new CountPair();\r
- pairs.put(vc.getValueName(), cp);\r
- }\r
- cp.set(first, vc.getValueCount());\r
- }\r
- }\r
-\r
- private class CountPair{\r
- private int c1 = 0;\r
- private int c2 = 0;\r
-\r
- public int get(boolean first){\r
- if(first){\r
- return c1;\r
- }\r
- else{\r
- return c2;\r
- }\r
- }\r
-\r
- public void set(boolean first, int count){\r
- if(first){\r
- c1 = count;\r
- }\r
- else{\r
- c2 = count;\r
- }\r
- }\r
- }\r
-\r
- /**\r
- * This method is used for debugging.\r
- */\r
- @SuppressWarnings("unused")\r
- private void printAll(Map<String, CountPair> pairs){\r
- System.out.println("----------");\r
- for(Map.Entry<String, CountPair> entry: pairs.entrySet()){\r
- CountPair pair = entry.getValue();\r
- System.out.printf("%40s: %5d, %5d%n", entry.getKey(), pair.get(true), pair.get(false));\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.comparators;
+
+/*
+ * $Id$
+ */
+
+import java.util.HashMap;
+import java.util.Map;
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.birthmarks.ValueCountable;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ * Comparing birthmarks by cosine similarity algorithm. This class compares
+ * birthmarks which must be implemented
+ * {@link ValueCountable <code>ValueCountable</code>} interface.
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class CosineSimilarityBirthmarkComparator extends
+ AbstractBirthmarkComparator{
+
+ public CosineSimilarityBirthmarkComparator(BirthmarkSpi spi){
+ super(spi);
+ }
+
+ public double compare(Birthmark b1, Birthmark b2){
+ if(!b1.getType().equals(b2.getType())){
+ return Double.NaN;
+ }
+ if(b1.getElementCount() == 0 && b2.getElementCount() == 0){
+ return 1d;
+ }
+ else if(b1.getElementCount() == 0 || b2.getElementCount() == 0){
+ return 0d;
+ }
+
+ Map<String, CountPair> pairs = new HashMap<String, CountPair>();
+ addCount(pairs, b1, true);
+ addCount(pairs, b2, false);
+
+ double norm1 = norm(pairs, true);
+ double norm2 = norm(pairs, false);
+ double product = innerproduct(pairs);
+ double similarity = product / (norm1 * norm2);
+ // System.out.printf("%g / (%g * %g) = %g%n", product, norm1, norm2, similarity);
+
+ // double radian = Math.acos(product / (norm1 * norm2));
+ // double angle = 90 - (180 * radian / Math.PI);
+ // double sim = angle / 90;
+ // System.out.printf("angle: %g (%g\93x, %g)%n", radian, angle, sim);
+
+ return similarity;
+ }
+
+ private double innerproduct(Map<String, CountPair> pairs){
+ double sum = 0;
+ for(CountPair pair: pairs.values()){
+ sum += pair.get(true) * pair.get(false);
+ }
+ return sum;
+ }
+
+ private double norm(Map<String, CountPair> pairs, boolean first){
+ double sum = 0;
+ for(CountPair pair: pairs.values()){
+ sum += pair.get(first) * pair.get(first);
+ }
+ return Math.sqrt(sum);
+ }
+
+ private void addCount(Map<String, CountPair> pairs, Birthmark birthmark, boolean first){
+ for(BirthmarkElement element: birthmark){
+ ValueCountable vc = (ValueCountable)element;
+ CountPair cp = pairs.get(vc.getValueName());
+ if(cp == null){
+ cp = new CountPair();
+ pairs.put(vc.getValueName(), cp);
+ }
+ cp.set(first, vc.getValueCount());
+ }
+ }
+
+ private class CountPair{
+ private int c1 = 0;
+ private int c2 = 0;
+
+ public int get(boolean first){
+ if(first){
+ return c1;
+ }
+ else{
+ return c2;
+ }
+ }
+
+ public void set(boolean first, int count){
+ if(first){
+ c1 = count;
+ }
+ else{
+ c2 = count;
+ }
+ }
+ }
+
+ /**
+ * This method is used for debugging.
+ */
+ @SuppressWarnings("unused")
+ private void printAll(Map<String, CountPair> pairs){
+ System.out.println("----------");
+ for(Map.Entry<String, CountPair> entry: pairs.entrySet()){
+ CountPair pair = entry.getValue();
+ System.out.printf("%40s: %5d, %5d%n", entry.getKey(), pair.get(true), pair.get(false));
+ }
+ }
+}
-package jp.naist.se.stigmata.birthmarks.comparators;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkComparator;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * SPI of {@link BirthmarkComparator <code>BirthmarkComparator</code>}.\r
- * Comparing birthmarks by cosine similarity algorithm.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class CosineSimilarityBirthmarkComparatorService extends AbstractBirthmarkComparatorService{\r
- /**\r
- * returns a type of the birthmark this service provides.\r
- */\r
- public String getType(){\r
- return "cosine";\r
- }\r
-\r
- public String getComparatorClassName(){\r
- return "jp.naist.se.stigmata.birthmarks.comparators.CosineSimilarityBirthmarkComparator";\r
- }\r
-\r
- /**\r
- * returns a extractor for the birthmark of this service.\r
- */\r
- public BirthmarkComparator getComparator(BirthmarkSpi service){\r
- return new CosineSimilarityBirthmarkComparator(service);\r
- }\r
-}\r
-\r
+package jp.sourceforge.stigmata.birthmarks.comparators;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkComparator;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ * SPI of {@link BirthmarkComparator <code>BirthmarkComparator</code>}.
+ * Comparing birthmarks by cosine similarity algorithm.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class CosineSimilarityBirthmarkComparatorService extends AbstractBirthmarkComparatorService{
+ /**
+ * returns a type of the birthmark this service provides.
+ */
+ public String getType(){
+ return "cosine";
+ }
+
+ public String getComparatorClassName(){
+ return "jp.sourceforge.stigmata.birthmarks.comparators.CosineSimilarityBirthmarkComparator";
+ }
+
+ /**
+ * returns a extractor for the birthmark of this service.
+ */
+ public BirthmarkComparator getComparator(BirthmarkSpi service){
+ return new CosineSimilarityBirthmarkComparator(service);
+ }
+}
+
-package jp.naist.se.stigmata.birthmarks.comparators;
+package jp.sourceforge.stigmata.birthmarks.comparators;
/*
* $Id$
*/
-import jp.naist.se.stigmata.Birthmark;
-import jp.naist.se.stigmata.BirthmarkElement;
-import jp.naist.se.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
/**
* calculate similarities between two birthmarks by DP matching algorithm.
-package jp.naist.se.stigmata.birthmarks.comparators;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkComparator;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * SPI of {@link BirthmarkComparator <code>BirthmarkComparator</code>}.\r
- * Comparing birthmarks by DP matching algorithm.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class DPMatchingBirthmarkComparatorService extends AbstractBirthmarkComparatorService{\r
- /**\r
- * returns a type of the birthmark this service provides.\r
- */\r
- public String getType(){\r
- return "dpmatching";\r
- }\r
-\r
- public String getComparatorClassName(){\r
- return "jp.naist.se.stigmata.birthmarks.comparators.DPMatchingBirthmarkComparator";\r
- }\r
-\r
- /**\r
- * returns a extractor for the birthmark of this service.\r
- */\r
- public BirthmarkComparator getComparator(BirthmarkSpi service){\r
- return new DPMatchingBirthmarkComparator(service);\r
- }\r
-}\r
-\r
+package jp.sourceforge.stigmata.birthmarks.comparators;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkComparator;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ * SPI of {@link BirthmarkComparator <code>BirthmarkComparator</code>}.
+ * Comparing birthmarks by DP matching algorithm.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class DPMatchingBirthmarkComparatorService extends AbstractBirthmarkComparatorService{
+ /**
+ * returns a type of the birthmark this service provides.
+ */
+ public String getType(){
+ return "dpmatching";
+ }
+
+ public String getComparatorClassName(){
+ return "jp.sourceforge.stigmata.birthmarks.comparators.DPMatchingBirthmarkComparator";
+ }
+
+ /**
+ * returns a extractor for the birthmark of this service.
+ */
+ public BirthmarkComparator getComparator(BirthmarkSpi service){
+ return new DPMatchingBirthmarkComparator(service);
+ }
+}
+
-package jp.naist.se.stigmata.birthmarks.comparators;
+package jp.sourceforge.stigmata.birthmarks.comparators;
/*
* $Id$
*/
-import jp.naist.se.stigmata.Birthmark;
-import jp.naist.se.stigmata.BirthmarkElement;
-import jp.naist.se.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
/**
* calculate similarities between two birthmarks by edit distance
-package jp.naist.se.stigmata.birthmarks.comparators;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkComparator;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * SPI of {@link BirthmarkComparator <code>BirthmarkComparator</code>}.\r
- * Comparing birthmarks by edit distance algorithm.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class EditDistanceBirthmarkComparatorService extends AbstractBirthmarkComparatorService{\r
- /**\r
- * returns a type of the birthmark this service provides.\r
- */\r
- public String getType(){\r
- return "editdistancee";\r
- }\r
-\r
- public String getComparatorClassName(){\r
- return "jp.naist.se.stigmata.birthmarks.comparators.EditDistanceBirthmarkComparator";\r
- }\r
-\r
- /**\r
- * returns a extractor for the birthmark of this service.\r
- */\r
- public BirthmarkComparator getComparator(BirthmarkSpi service){\r
- return new EditDistanceBirthmarkComparator(service);\r
- }\r
-}\r
-\r
+package jp.sourceforge.stigmata.birthmarks.comparators;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkComparator;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ * SPI of {@link BirthmarkComparator <code>BirthmarkComparator</code>}.
+ * Comparing birthmarks by edit distance algorithm.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class EditDistanceBirthmarkComparatorService extends AbstractBirthmarkComparatorService{
+ /**
+ * returns a type of the birthmark this service provides.
+ */
+ public String getType(){
+ return "editdistancee";
+ }
+
+ public String getComparatorClassName(){
+ return "jp.sourceforge.stigmata.birthmarks.comparators.EditDistanceBirthmarkComparator";
+ }
+
+ /**
+ * returns a extractor for the birthmark of this service.
+ */
+ public BirthmarkComparator getComparator(BirthmarkSpi service){
+ return new EditDistanceBirthmarkComparator(service);
+ }
+}
+
-package jp.naist.se.stigmata.birthmarks.comparators;
+package jp.sourceforge.stigmata.birthmarks.comparators;
/*
* $Id$
*/
-import jp.naist.se.stigmata.Birthmark;
-import jp.naist.se.stigmata.BirthmarkElement;
-import jp.naist.se.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
/**
* calculate similarities between two birthmarks by edit distance
-package jp.naist.se.stigmata.birthmarks.comparators;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkComparator;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * SPI of {@link BirthmarkComparator <code>BirthmarkComparator</code>}.\r
- * Comparing birthmarks by extended edit distance algorithm.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ExtendedEditDistanceBirthmarkComparatorService extends AbstractBirthmarkComparatorService{\r
- /**\r
- * returns a type of the birthmark this service provides.\r
- */\r
- public String getType(){\r
- return "editdistanceext";\r
- }\r
-\r
- public String getComparatorClassName(){\r
- return "jp.naist.se.stigmata.birthmarks.comparators.ExtendedEditDistanceBirthmarkComparator";\r
- }\r
-\r
- /**\r
- * returns a extractor for the birthmark of this service.\r
- */\r
- public BirthmarkComparator getComparator(BirthmarkSpi service){\r
- return new ExtendedEditDistanceBirthmarkComparator(service);\r
- }\r
-}\r
-\r
+package jp.sourceforge.stigmata.birthmarks.comparators;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkComparator;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ * SPI of {@link BirthmarkComparator <code>BirthmarkComparator</code>}.
+ * Comparing birthmarks by extended edit distance algorithm.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ExtendedEditDistanceBirthmarkComparatorService extends AbstractBirthmarkComparatorService{
+ /**
+ * returns a type of the birthmark this service provides.
+ */
+ public String getType(){
+ return "editdistanceext";
+ }
+
+ public String getComparatorClassName(){
+ return "jp.sourceforge.stigmata.birthmarks.comparators.ExtendedEditDistanceBirthmarkComparator";
+ }
+
+ /**
+ * returns a extractor for the birthmark of this service.
+ */
+ public BirthmarkComparator getComparator(BirthmarkSpi service){
+ return new ExtendedEditDistanceBirthmarkComparator(service);
+ }
+}
+
-package jp.naist.se.stigmata.birthmarks.comparators;
+package jp.sourceforge.stigmata.birthmarks.comparators;
/*
* $Id$
import java.util.HashSet;
import java.util.Set;
-import jp.naist.se.stigmata.Birthmark;
-import jp.naist.se.stigmata.BirthmarkElement;
-import jp.naist.se.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
/**
* this comparator calculate following formula.
-package jp.naist.se.stigmata.birthmarks.comparators;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkComparator;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * SPI of {@link BirthmarkComparator <code>BirthmarkComparator</code>}.\r
- * Comparing birthmarks by logical AND algorithm.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class LogicalAndBirthmarkComparatorService extends AbstractBirthmarkComparatorService{\r
- /**\r
- * returns a type of the birthmark this service provides.\r
- */\r
- public String getType(){\r
- return "and";\r
- }\r
-\r
- public String getComparatorClassName(){\r
- return "jp.naist.se.stigmata.birthmarks.comparators.LogicalAndBirthmarkComparator";\r
- }\r
-\r
- /**\r
- * returns a extractor for the birthmark of this service.\r
- */\r
- public BirthmarkComparator getComparator(BirthmarkSpi service){\r
- return new LogicalAndBirthmarkComparator(service);\r
- }\r
-}\r
-\r
+package jp.sourceforge.stigmata.birthmarks.comparators;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkComparator;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ * SPI of {@link BirthmarkComparator <code>BirthmarkComparator</code>}.
+ * Comparing birthmarks by logical AND algorithm.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class LogicalAndBirthmarkComparatorService extends AbstractBirthmarkComparatorService{
+ /**
+ * returns a type of the birthmark this service provides.
+ */
+ public String getType(){
+ return "and";
+ }
+
+ public String getComparatorClassName(){
+ return "jp.sourceforge.stigmata.birthmarks.comparators.LogicalAndBirthmarkComparator";
+ }
+
+ /**
+ * returns a extractor for the birthmark of this service.
+ */
+ public BirthmarkComparator getComparator(BirthmarkSpi service){
+ return new LogicalAndBirthmarkComparator(service);
+ }
+}
+
-package jp.naist.se.stigmata.birthmarks.comparators;
+package jp.sourceforge.stigmata.birthmarks.comparators;
/*
* $Id$
*/
-import jp.naist.se.stigmata.Birthmark;
-import jp.naist.se.stigmata.BirthmarkComparator;
-import jp.naist.se.stigmata.BirthmarkElement;
-import jp.naist.se.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkComparator;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
/**
* An implementation of {@link BirthmarkComparator
-package jp.naist.se.stigmata.birthmarks.comparators;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkComparator;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * SPI of {@link BirthmarkComparator <code>BirthmarkComparator</code>}.\r
- * Comparing birthmarks by default matching algorithm.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class PlainBirthmarkComparatorService extends AbstractBirthmarkComparatorService{\r
- /**\r
- * returns a type of the birthmark this service provides.\r
- */\r
- public String getType(){\r
- return "plain";\r
- }\r
-\r
- public String getComparatorClassName(){\r
- return "jp.naist.se.stigmata.birthmarks.comparators.PlainBirthmarkComparator";\r
- }\r
-\r
- /**\r
- * returns a extractor for the birthmark of this service.\r
- */\r
- public BirthmarkComparator getComparator(BirthmarkSpi service){\r
- return new PlainBirthmarkComparator(service);\r
- }\r
-}\r
-\r
+package jp.sourceforge.stigmata.birthmarks.comparators;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkComparator;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ * SPI of {@link BirthmarkComparator <code>BirthmarkComparator</code>}.
+ * Comparing birthmarks by default matching algorithm.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class PlainBirthmarkComparatorService extends AbstractBirthmarkComparatorService{
+ /**
+ * returns a type of the birthmark this service provides.
+ */
+ public String getType(){
+ return "plain";
+ }
+
+ public String getComparatorClassName(){
+ return "jp.sourceforge.stigmata.birthmarks.comparators.PlainBirthmarkComparator";
+ }
+
+ /**
+ * returns a extractor for the birthmark of this service.
+ */
+ public BirthmarkComparator getComparator(BirthmarkSpi service){
+ return new PlainBirthmarkComparator(service);
+ }
+}
+
-package jp.naist.se.stigmata.birthmarks.cvfv;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.LinkedHashMap;\r
-import java.util.Map;\r
-\r
-import jp.naist.se.stigmata.Birthmark;\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.birthmarks.BirthmarkExtractVisitor;\r
-\r
-import org.objectweb.asm.ClassVisitor;\r
-import org.objectweb.asm.FieldVisitor;\r
-import org.objectweb.asm.MethodAdapter;\r
-import org.objectweb.asm.MethodVisitor;\r
-import org.objectweb.asm.Opcodes;\r
-import org.objectweb.asm.Type;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ConstantValueOfFieldVariableBirthmarkExtractVisitor extends BirthmarkExtractVisitor{\r
- private Map<String, TypeAndValueBirthmarkElement> elements = new LinkedHashMap<String, TypeAndValueBirthmarkElement>();\r
- private String className;\r
-\r
- public ConstantValueOfFieldVariableBirthmarkExtractVisitor(ClassVisitor visitor, Birthmark birthmark, BirthmarkEnvironment environment){\r
- super(visitor, birthmark, environment);\r
- }\r
-\r
- public void visitEnd(){\r
- for(String key: elements.keySet()){\r
- addElement(elements.get(key));\r
- }\r
- super.visitEnd();\r
- }\r
-\r
- public void visit(int version, int access, String name, String signature,\r
- String superName, String[] interfaces){\r
- this.className = name;\r
-\r
- super.visit(version, access, name, signature, superName, interfaces);\r
- }\r
-\r
- @Override\r
- public FieldVisitor visitField(int access, String name, String desc,\r
- String signature, Object value){\r
-\r
- FieldVisitor visitor = super.visitField(access, name, desc, signature, value);\r
-\r
- TypeAndValueBirthmarkElement e = elements.get(name);\r
- if(e == null){\r
- e = new TypeAndValueBirthmarkElement(desc, value);\r
- }\r
- else{\r
- if(value != null){\r
- e.setValue(value);\r
- }\r
- }\r
- elements.put(name, e);\r
-\r
- return visitor;\r
- }\r
-\r
- public MethodVisitor visitMethod(int access, String name, String desc, String signature,\r
- String[] exceptions){\r
- MethodVisitor visitor = super.visitMethod(access, name, desc, signature, exceptions);\r
-\r
- if(name.equals("<init>") || name.equals("<clinit>")){\r
- visitor = new MethodAdapter(visitor){\r
- private Object constant = null;\r
-\r
- public void visitIntInsn(int opcode, int operand){\r
- if(opcode == Opcodes.BIPUSH || opcode == Opcodes.SIPUSH){\r
- constant = new Integer(operand);\r
- }\r
- super.visitIntInsn(opcode, operand);\r
- }\r
-\r
- public void visitMethodInsn(int opcode, String owner, String name, String desc){\r
- Type type = Type.getReturnType(desc);\r
- if(!type.equals(Type.VOID_TYPE)){\r
- constant = null;\r
- }\r
- super.visitMethodInsn(opcode, owner, name, desc);\r
- }\r
-\r
- public void visitInsn(int opcode){\r
- if(opcode == Opcodes.ICONST_M1) constant = new Integer(-1);\r
- else if(opcode == Opcodes.ICONST_0) constant = new Integer(0);\r
- else if(opcode == Opcodes.ICONST_1) constant = new Integer(1);\r
- else if(opcode == Opcodes.ICONST_2) constant = new Integer(2);\r
- else if(opcode == Opcodes.ICONST_3) constant = new Integer(3);\r
- else if(opcode == Opcodes.ICONST_4) constant = new Integer(4);\r
- else if(opcode == Opcodes.ICONST_5) constant = new Integer(5);\r
- else if(opcode == Opcodes.LCONST_0) constant = new Long(0L);\r
- else if(opcode == Opcodes.LCONST_1) constant = new Long(1L);\r
- else if(opcode == Opcodes.DCONST_0) constant = new Double(0D);\r
- else if(opcode == Opcodes.DCONST_1) constant = new Double(1D);\r
- else if(opcode == Opcodes.FCONST_0) constant = new Float(0F);\r
- else if(opcode == Opcodes.FCONST_1) constant = new Float(1F);\r
- else if(opcode == Opcodes.FCONST_2) constant = new Float(2F);\r
-\r
- super.visitInsn(opcode);\r
- }\r
-\r
- public void visitLdcInsn(Object object){\r
- constant = object;\r
- super.visitLdcInsn(object);\r
- }\r
-\r
- public void visitFieldInsn(int opcode, String owner, String name, String desc){\r
- if(className.equals(owner) && opcode == Opcodes.PUTFIELD){\r
- TypeAndValueBirthmarkElement e = elements.get(name);\r
- if(e == null){\r
- e = new TypeAndValueBirthmarkElement(desc, constant);\r
- }\r
-\r
- if(e.getValue() == null && constant != null){\r
- if(!checkCast(desc, constant)){\r
- constant = null;\r
- }\r
- e.setValue(constant);\r
- }\r
- }\r
- super.visitFieldInsn(opcode, owner, name, desc);\r
- }\r
- };\r
- }\r
-\r
- return visitor;\r
- }\r
-\r
- private boolean checkCast(String desc, Object constant){\r
- if(constant instanceof Integer){\r
- return desc.equals("Ljava/lang/Integer;") ||\r
- desc.equals("I") || desc.equals("S") || desc.equals("Z") ||\r
- desc.equals("C") || desc.equals("B");\r
- }\r
- else if(constant instanceof Float){\r
- return desc.equals("Ljava/lang/Float;") || desc.equals("F");\r
- }\r
- else if(constant instanceof Double){\r
- return desc.equals("Ljava/lang/Double;") || desc.equals("D");\r
- }\r
- else if(constant instanceof Long){\r
- return desc.equals("Ljava/lang/Long;") || desc.equals("J");\r
- }\r
- else if(constant instanceof String){\r
- return desc.equals("Ljava/lang/String;");\r
- }\r
- return false;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.cvfv;
+
+/*
+ * $Id$
+ */
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
+
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.FieldVisitor;
+import org.objectweb.asm.MethodAdapter;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.Type;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ConstantValueOfFieldVariableBirthmarkExtractVisitor extends BirthmarkExtractVisitor{
+ private Map<String, TypeAndValueBirthmarkElement> elements = new LinkedHashMap<String, TypeAndValueBirthmarkElement>();
+ private String className;
+
+ public ConstantValueOfFieldVariableBirthmarkExtractVisitor(ClassVisitor visitor, Birthmark birthmark, BirthmarkEnvironment environment){
+ super(visitor, birthmark, environment);
+ }
+
+ public void visitEnd(){
+ for(String key: elements.keySet()){
+ addElement(elements.get(key));
+ }
+ super.visitEnd();
+ }
+
+ public void visit(int version, int access, String name, String signature,
+ String superName, String[] interfaces){
+ this.className = name;
+
+ super.visit(version, access, name, signature, superName, interfaces);
+ }
+
+ @Override
+ public FieldVisitor visitField(int access, String name, String desc,
+ String signature, Object value){
+
+ FieldVisitor visitor = super.visitField(access, name, desc, signature, value);
+
+ TypeAndValueBirthmarkElement e = elements.get(name);
+ if(e == null){
+ e = new TypeAndValueBirthmarkElement(desc, value);
+ }
+ else{
+ if(value != null){
+ e.setValue(value);
+ }
+ }
+ elements.put(name, e);
+
+ return visitor;
+ }
+
+ public MethodVisitor visitMethod(int access, String name, String desc, String signature,
+ String[] exceptions){
+ MethodVisitor visitor = super.visitMethod(access, name, desc, signature, exceptions);
+
+ if(name.equals("<init>") || name.equals("<clinit>")){
+ visitor = new MethodAdapter(visitor){
+ private Object constant = null;
+
+ public void visitIntInsn(int opcode, int operand){
+ if(opcode == Opcodes.BIPUSH || opcode == Opcodes.SIPUSH){
+ constant = new Integer(operand);
+ }
+ super.visitIntInsn(opcode, operand);
+ }
+
+ public void visitMethodInsn(int opcode, String owner, String name, String desc){
+ Type type = Type.getReturnType(desc);
+ if(!type.equals(Type.VOID_TYPE)){
+ constant = null;
+ }
+ super.visitMethodInsn(opcode, owner, name, desc);
+ }
+
+ public void visitInsn(int opcode){
+ if(opcode == Opcodes.ICONST_M1) constant = new Integer(-1);
+ else if(opcode == Opcodes.ICONST_0) constant = new Integer(0);
+ else if(opcode == Opcodes.ICONST_1) constant = new Integer(1);
+ else if(opcode == Opcodes.ICONST_2) constant = new Integer(2);
+ else if(opcode == Opcodes.ICONST_3) constant = new Integer(3);
+ else if(opcode == Opcodes.ICONST_4) constant = new Integer(4);
+ else if(opcode == Opcodes.ICONST_5) constant = new Integer(5);
+ else if(opcode == Opcodes.LCONST_0) constant = new Long(0L);
+ else if(opcode == Opcodes.LCONST_1) constant = new Long(1L);
+ else if(opcode == Opcodes.DCONST_0) constant = new Double(0D);
+ else if(opcode == Opcodes.DCONST_1) constant = new Double(1D);
+ else if(opcode == Opcodes.FCONST_0) constant = new Float(0F);
+ else if(opcode == Opcodes.FCONST_1) constant = new Float(1F);
+ else if(opcode == Opcodes.FCONST_2) constant = new Float(2F);
+
+ super.visitInsn(opcode);
+ }
+
+ public void visitLdcInsn(Object object){
+ constant = object;
+ super.visitLdcInsn(object);
+ }
+
+ public void visitFieldInsn(int opcode, String owner, String name, String desc){
+ if(className.equals(owner) && opcode == Opcodes.PUTFIELD){
+ TypeAndValueBirthmarkElement e = elements.get(name);
+ if(e == null){
+ e = new TypeAndValueBirthmarkElement(desc, constant);
+ }
+
+ if(e.getValue() == null && constant != null){
+ if(!checkCast(desc, constant)){
+ constant = null;
+ }
+ e.setValue(constant);
+ }
+ }
+ super.visitFieldInsn(opcode, owner, name, desc);
+ }
+ };
+ }
+
+ return visitor;
+ }
+
+ private boolean checkCast(String desc, Object constant){
+ if(constant instanceof Integer){
+ return desc.equals("Ljava/lang/Integer;") ||
+ desc.equals("I") || desc.equals("S") || desc.equals("Z") ||
+ desc.equals("C") || desc.equals("B");
+ }
+ else if(constant instanceof Float){
+ return desc.equals("Ljava/lang/Float;") || desc.equals("F");
+ }
+ else if(constant instanceof Double){
+ return desc.equals("Ljava/lang/Double;") || desc.equals("D");
+ }
+ else if(constant instanceof Long){
+ return desc.equals("Ljava/lang/Long;") || desc.equals("J");
+ }
+ else if(constant instanceof String){
+ return desc.equals("Ljava/lang/String;");
+ }
+ return false;
+ }
+}
-package jp.naist.se.stigmata.birthmarks.cvfv;
+package jp.sourceforge.stigmata.birthmarks.cvfv;
/*
* $Id$
*/
-import jp.naist.se.stigmata.Birthmark;
-import jp.naist.se.stigmata.BirthmarkEnvironment;
-import jp.naist.se.stigmata.ExtractionUnit;
-import jp.naist.se.stigmata.birthmarks.ASMBirthmarkExtractor;
-import jp.naist.se.stigmata.birthmarks.BirthmarkExtractVisitor;
-import jp.naist.se.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.ExtractionUnit;
+import jp.sourceforge.stigmata.birthmarks.ASMBirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
import org.objectweb.asm.ClassWriter;
-package jp.naist.se.stigmata.birthmarks.cvfv;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkComparator;\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-import jp.naist.se.stigmata.BirthmarkExtractor;\r
-import jp.naist.se.stigmata.birthmarks.AbstractBirthmarkService;\r
-import jp.naist.se.stigmata.birthmarks.comparators.PlainBirthmarkComparator;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ConstantValueOfFieldVariableBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{\r
- private BirthmarkComparator comparator = new PlainBirthmarkComparator(this);\r
- private BirthmarkExtractor extractor = new ConstantValueOfFieldVariableBirthmarkExtractor(this);\r
-\r
- public String getType(){\r
- return "cvfv";\r
- }\r
-\r
- public String getDefaultDescription(){\r
- return "Field type and its initial value.";\r
- }\r
-\r
- public BirthmarkExtractor getExtractor(){\r
- return extractor;\r
- }\r
-\r
- public BirthmarkComparator getComparator(){\r
- return comparator;\r
- }\r
-\r
- public boolean isExpert(){\r
- return false;\r
- }\r
-\r
- public boolean isUserDefined(){\r
- return false;\r
- }\r
-\r
- @Override\r
- public BirthmarkElement buildBirthmarkElement(String value) {\r
- String signature = value.substring(0, value.indexOf('='));\r
- String subValue = value.substring(value.indexOf('=') + 1);\r
- Object elementValue = subValue;\r
-\r
- if(subValue.equals("null")){\r
- elementValue = null;\r
- }\r
- else{\r
- switch(signature.charAt(0)){\r
- case 'Z':{\r
- if(value.equals("true")) elementValue = Boolean.TRUE;\r
- else elementValue = Boolean.FALSE;\r
- break;\r
- }\r
- case 'C': elementValue = new Character(subValue.charAt(0)); break;\r
- case 'D': elementValue = new Double(subValue); break;\r
- case 'F': elementValue = new Float(subValue); break;\r
- case 'S': elementValue = new Short(subValue); break;\r
- case 'B': elementValue = new Byte(subValue); break;\r
- case 'I': elementValue = new Integer(subValue); break;\r
- default: elementValue = value; break;\r
- }\r
- }\r
- return new TypeAndValueBirthmarkElement(signature, elementValue);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.cvfv;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkComparator;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.AbstractBirthmarkService;
+import jp.sourceforge.stigmata.birthmarks.comparators.PlainBirthmarkComparator;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ConstantValueOfFieldVariableBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{
+ private BirthmarkComparator comparator = new PlainBirthmarkComparator(this);
+ private BirthmarkExtractor extractor = new ConstantValueOfFieldVariableBirthmarkExtractor(this);
+
+ public String getType(){
+ return "cvfv";
+ }
+
+ public String getDefaultDescription(){
+ return "Field type and its initial value.";
+ }
+
+ public BirthmarkExtractor getExtractor(){
+ return extractor;
+ }
+
+ public BirthmarkComparator getComparator(){
+ return comparator;
+ }
+
+ public boolean isExpert(){
+ return false;
+ }
+
+ public boolean isUserDefined(){
+ return false;
+ }
+
+ @Override
+ public BirthmarkElement buildBirthmarkElement(String value) {
+ String signature = value.substring(0, value.indexOf('='));
+ String subValue = value.substring(value.indexOf('=') + 1);
+ Object elementValue = subValue;
+
+ if(subValue.equals("null")){
+ elementValue = null;
+ }
+ else{
+ switch(signature.charAt(0)){
+ case 'Z':{
+ if(value.equals("true")) elementValue = Boolean.TRUE;
+ else elementValue = Boolean.FALSE;
+ break;
+ }
+ case 'C': elementValue = new Character(subValue.charAt(0)); break;
+ case 'D': elementValue = new Double(subValue); break;
+ case 'F': elementValue = new Float(subValue); break;
+ case 'S': elementValue = new Short(subValue); break;
+ case 'B': elementValue = new Byte(subValue); break;
+ case 'I': elementValue = new Integer(subValue); break;
+ default: elementValue = value; break;
+ }
+ }
+ return new TypeAndValueBirthmarkElement(signature, elementValue);
+ }
+}
-package jp.naist.se.stigmata.birthmarks.cvfv;
+package jp.sourceforge.stigmata.birthmarks.cvfv;
/*
* $Id$
import java.io.ObjectInputStream;
import java.io.Serializable;
-import jp.naist.se.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.BirthmarkElement;
/**
*
-package jp.naist.se.stigmata.birthmarks.extractors;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.lang.reflect.Constructor;\r
-import java.lang.reflect.InvocationTargetException;\r
-import java.util.Locale;\r
-\r
-import jp.naist.se.stigmata.BirthmarkExtractor;\r
-import jp.naist.se.stigmata.spi.AbstractServiceProvider;\r
-import jp.naist.se.stigmata.spi.BirthmarkExtractorSpi;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-import jp.naist.se.stigmata.utils.LocalizedDescriptionManager;\r
-\r
-/**\r
- * Birthmark Service Provider Interface.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-abstract class AbstractBirthmarkExtractorService extends AbstractServiceProvider implements BirthmarkExtractorSpi{\r
- /**\r
- * returns a type of the birthmark this service provides.\r
- */\r
- public abstract String getType();\r
-\r
- /**\r
- * returns a localized description of the birthmark this service provides.\r
- */\r
- public String getDescription(Locale locale){\r
- return LocalizedDescriptionManager.getInstance().getDescription(\r
- locale, getType(), LocalizedDescriptionManager.ServiceCategory.extractor\r
- );\r
- }\r
-\r
- /**\r
- * returns a localized description of the birthmark in default locale.\r
- */\r
- public String getDescription(){\r
- return getDescription(Locale.getDefault());\r
- }\r
-\r
- public abstract String getExtractorClassName();\r
-\r
- /**\r
- * returns a extractor for the birthmark of this service.\r
- */\r
- public BirthmarkExtractor getExtractor(BirthmarkSpi service){\r
- try{\r
- Class<?> c = Class.forName(getExtractorClassName());\r
- Class<? extends BirthmarkExtractor> clazz = c.asSubclass(BirthmarkExtractor.class);\r
- Constructor<? extends BirthmarkExtractor> constructor = clazz.getConstructor(BirthmarkSpi.class);\r
- return constructor.newInstance(service);\r
- } catch(NoSuchMethodException e){\r
- } catch(InstantiationException e){\r
- } catch(InvocationTargetException e){\r
- } catch(ClassNotFoundException e){\r
- } catch(IllegalAccessException e){\r
- }\r
- return null;\r
- }\r
-}\r
-\r
+package jp.sourceforge.stigmata.birthmarks.extractors;
+
+/*
+ * $Id$
+ */
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Locale;
+
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+import jp.sourceforge.stigmata.spi.AbstractServiceProvider;
+import jp.sourceforge.stigmata.spi.BirthmarkExtractorSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.utils.LocalizedDescriptionManager;
+
+/**
+ * Birthmark Service Provider Interface.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+abstract class AbstractBirthmarkExtractorService extends AbstractServiceProvider implements BirthmarkExtractorSpi{
+ /**
+ * returns a type of the birthmark this service provides.
+ */
+ public abstract String getType();
+
+ /**
+ * returns a localized description of the birthmark this service provides.
+ */
+ public String getDescription(Locale locale){
+ return LocalizedDescriptionManager.getInstance().getDescription(
+ locale, getType(), LocalizedDescriptionManager.ServiceCategory.extractor
+ );
+ }
+
+ /**
+ * returns a localized description of the birthmark in default locale.
+ */
+ public String getDescription(){
+ return getDescription(Locale.getDefault());
+ }
+
+ public abstract String getExtractorClassName();
+
+ /**
+ * returns a extractor for the birthmark of this service.
+ */
+ public BirthmarkExtractor getExtractor(BirthmarkSpi service){
+ try{
+ Class<?> c = Class.forName(getExtractorClassName());
+ Class<? extends BirthmarkExtractor> clazz = c.asSubclass(BirthmarkExtractor.class);
+ Constructor<? extends BirthmarkExtractor> constructor = clazz.getConstructor(BirthmarkSpi.class);
+ return constructor.newInstance(service);
+ } catch(NoSuchMethodException e){
+ } catch(InstantiationException e){
+ } catch(InvocationTargetException e){
+ } catch(ClassNotFoundException e){
+ } catch(IllegalAccessException e){
+ }
+ return null;
+ }
+}
+
-package jp.naist.se.stigmata.birthmarks.extractors;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.lang.reflect.InvocationTargetException;\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.BirthmarkExtractor;\r
-import jp.naist.se.stigmata.ExtractorNotFoundException;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-import org.apache.commons.beanutils.BeanUtils;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkExtractorFactory{\r
- private BirthmarkEnvironment environment;\r
- private Map<String, BirthmarkExtractor> extractors = new HashMap<String, BirthmarkExtractor>();\r
-\r
- public BirthmarkExtractorFactory(BirthmarkEnvironment env){\r
- this.environment = env;\r
- }\r
-\r
- public BirthmarkExtractor getExtractor(String name) throws ExtractorNotFoundException{\r
- BirthmarkExtractor extractor = extractors.get(name);\r
- if(extractor == null){\r
- extractor = buildExtractor(name);\r
- extractors.put(name, extractor);\r
- }\r
- return extractor;\r
- }\r
-\r
- @SuppressWarnings("unchecked")\r
- private BirthmarkExtractor buildExtractor(String birthmarkType) throws ExtractorNotFoundException{\r
- BirthmarkSpi spi = environment.getService(birthmarkType);\r
- BirthmarkExtractor extractor = null;\r
- if(spi != null){\r
- extractor = spi.getExtractor();\r
- try{\r
- if(extractor != null){\r
- Map props = BeanUtils.describe(extractor);\r
- props.remove("class");\r
- props.remove("provider");\r
- for(Object keyObject: props.keySet()){\r
- String key = "extractor." + spi.getType() + "." + String.valueOf(keyObject);\r
- if(environment.getProperty(key) != null){\r
- BeanUtils.setProperty(\r
- extractor, (String)keyObject, environment.getProperty(key)\r
- );\r
- }\r
- }\r
- }\r
- } catch(InvocationTargetException e){\r
- throw new InternalError(e.getMessage());\r
- } catch(NoSuchMethodException e){\r
- throw new InternalError(e.getMessage());\r
- } catch(IllegalAccessException e){\r
- throw new InternalError(e.getMessage());\r
- }\r
- }\r
- if(extractor == null){\r
- throw new ExtractorNotFoundException("extractor not found: " + birthmarkType);\r
- }\r
-\r
- return extractor;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.extractors;
+
+/*
+ * $Id$
+ */
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.Map;
+
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+import jp.sourceforge.stigmata.ExtractorNotFoundException;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+import org.apache.commons.beanutils.BeanUtils;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkExtractorFactory{
+ private BirthmarkEnvironment environment;
+ private Map<String, BirthmarkExtractor> extractors = new HashMap<String, BirthmarkExtractor>();
+
+ public BirthmarkExtractorFactory(BirthmarkEnvironment env){
+ this.environment = env;
+ }
+
+ public BirthmarkExtractor getExtractor(String name) throws ExtractorNotFoundException{
+ BirthmarkExtractor extractor = extractors.get(name);
+ if(extractor == null){
+ extractor = buildExtractor(name);
+ extractors.put(name, extractor);
+ }
+ return extractor;
+ }
+
+ @SuppressWarnings("unchecked")
+ private BirthmarkExtractor buildExtractor(String birthmarkType) throws ExtractorNotFoundException{
+ BirthmarkSpi spi = environment.getService(birthmarkType);
+ BirthmarkExtractor extractor = null;
+ if(spi != null){
+ extractor = spi.getExtractor();
+ try{
+ if(extractor != null){
+ Map props = BeanUtils.describe(extractor);
+ props.remove("class");
+ props.remove("provider");
+ for(Object keyObject: props.keySet()){
+ String key = "extractor." + spi.getType() + "." + String.valueOf(keyObject);
+ if(environment.getProperty(key) != null){
+ BeanUtils.setProperty(
+ extractor, (String)keyObject, environment.getProperty(key)
+ );
+ }
+ }
+ }
+ } catch(InvocationTargetException e){
+ throw new InternalError(e.getMessage());
+ } catch(NoSuchMethodException e){
+ throw new InternalError(e.getMessage());
+ } catch(IllegalAccessException e){
+ throw new InternalError(e.getMessage());
+ }
+ }
+ if(extractor == null){
+ throw new ExtractorNotFoundException("extractor not found: " + birthmarkType);
+ }
+
+ return extractor;
+ }
+}
-package jp.naist.se.stigmata.birthmarks.extractors;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkExtractor;\r
-import jp.naist.se.stigmata.birthmarks.cvfv.ConstantValueOfFieldVariableBirthmarkExtractor;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * Birthmark Service Provider Interface.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ConstantValueOfFieldVariableBirthmarkExtractorService extends AbstractBirthmarkExtractorService{\r
-\r
- /**\r
- * returns a type of the birthmark this service provides.\r
- */\r
- public String getType(){\r
- return "cvfv";\r
- }\r
-\r
- public String getExtractorClassName(){\r
- return "jp.naist.se.stigmata.birthmarks.cvfv.ConstantValueOfFieldVariableBirthmarkExtractor";\r
- }\r
-\r
- /**\r
- * returns a extractor for the birthmark of this service.\r
- */\r
- public BirthmarkExtractor getExtractor(BirthmarkSpi service){\r
- return new ConstantValueOfFieldVariableBirthmarkExtractor(service);\r
- }\r
+package jp.sourceforge.stigmata.birthmarks.extractors;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.cvfv.ConstantValueOfFieldVariableBirthmarkExtractor;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ * Birthmark Service Provider Interface.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ConstantValueOfFieldVariableBirthmarkExtractorService extends AbstractBirthmarkExtractorService{
+
+ /**
+ * returns a type of the birthmark this service provides.
+ */
+ public String getType(){
+ return "cvfv";
+ }
+
+ public String getExtractorClassName(){
+ return "jp.sourceforge.stigmata.birthmarks.cvfv.ConstantValueOfFieldVariableBirthmarkExtractor";
+ }
+
+ /**
+ * returns a extractor for the birthmark of this service.
+ */
+ public BirthmarkExtractor getExtractor(BirthmarkSpi service){
+ return new ConstantValueOfFieldVariableBirthmarkExtractor(service);
+ }
}
\ No newline at end of file
-package jp.naist.se.stigmata.birthmarks.extractors;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkExtractor;\r
-import jp.naist.se.stigmata.birthmarks.fmc.FrequencyMethodCallBirthmarkExtractor;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * Birthmark Service Provider Interface.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class FrequencyMethodCallBirthmarkExtractorService extends AbstractBirthmarkExtractorService{\r
-\r
- /**\r
- * returns a type of the birthmark this service provides.\r
- */\r
- public String getType(){\r
- return "fmc";\r
- }\r
-\r
- public String getExtractorClassName(){\r
- return "jp.naist.se.stigmata.birthmarks.fmc.FrequencyMethodCallBirthmarkExtractor";\r
- }\r
-\r
- /**\r
- * returns a extractor for the birthmark of this service.\r
- */\r
- public BirthmarkExtractor getExtractor(BirthmarkSpi service){\r
- return new FrequencyMethodCallBirthmarkExtractor(service);\r
- }\r
+package jp.sourceforge.stigmata.birthmarks.extractors;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.fmc.FrequencyMethodCallBirthmarkExtractor;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ * Birthmark Service Provider Interface.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class FrequencyMethodCallBirthmarkExtractorService extends AbstractBirthmarkExtractorService{
+
+ /**
+ * returns a type of the birthmark this service provides.
+ */
+ public String getType(){
+ return "fmc";
+ }
+
+ public String getExtractorClassName(){
+ return "jp.sourceforge.stigmata.birthmarks.fmc.FrequencyMethodCallBirthmarkExtractor";
+ }
+
+ /**
+ * returns a extractor for the birthmark of this service.
+ */
+ public BirthmarkExtractor getExtractor(BirthmarkSpi service){
+ return new FrequencyMethodCallBirthmarkExtractor(service);
+ }
}
\ No newline at end of file
-package jp.naist.se.stigmata.birthmarks.extractors;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkExtractor;\r
-import jp.naist.se.stigmata.birthmarks.fuc.FrequencyUsedClassesBirthmarkExtractor;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * Birthmark Service Provider Interface.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class FrequencyUsedClassesBirthmarkExtractorService extends AbstractBirthmarkExtractorService{\r
-\r
- /**\r
- * returns a type of the birthmark this service provides.\r
- */\r
- public String getType(){\r
- return "fuc";\r
- }\r
-\r
- public String getExtractorClassName(){\r
- return "jp.naist.se.stigmata.birthmarks.fuc.FrequencyUsedClassesBirthmarkExtractor";\r
- }\r
-\r
- /**\r
- * returns a extractor for the birthmark of this service.\r
- */\r
- public BirthmarkExtractor getExtractor(BirthmarkSpi service){\r
- return new FrequencyUsedClassesBirthmarkExtractor(service);\r
- }\r
+package jp.sourceforge.stigmata.birthmarks.extractors;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.fuc.FrequencyUsedClassesBirthmarkExtractor;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ * Birthmark Service Provider Interface.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class FrequencyUsedClassesBirthmarkExtractorService extends AbstractBirthmarkExtractorService{
+
+ /**
+ * returns a type of the birthmark this service provides.
+ */
+ public String getType(){
+ return "fuc";
+ }
+
+ public String getExtractorClassName(){
+ return "jp.sourceforge.stigmata.birthmarks.fuc.FrequencyUsedClassesBirthmarkExtractor";
+ }
+
+ /**
+ * returns a extractor for the birthmark of this service.
+ */
+ public BirthmarkExtractor getExtractor(BirthmarkSpi service){
+ return new FrequencyUsedClassesBirthmarkExtractor(service);
+ }
}
\ No newline at end of file
-package jp.naist.se.stigmata.birthmarks.extractors;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkExtractor;\r
-import jp.naist.se.stigmata.birthmarks.is.InheritanceStructureBirthmarkExtractor;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * Birthmark Service Provider Interface.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class InheritanceStructureBirthmarkExtractorService extends AbstractBirthmarkExtractorService{\r
-\r
- /**\r
- * returns a type of the birthmark this service provides.\r
- */\r
- public String getType(){\r
- return "is";\r
- }\r
-\r
- public String getExtractorClassName(){\r
- return "jp.naist.se.stigmata.birthmarks.is.InheritanceStructureBirthmarkExtractor";\r
- }\r
-\r
- /**\r
- * returns a extractor for the birthmark of this service.\r
- */\r
- public BirthmarkExtractor getExtractor(BirthmarkSpi service){\r
- return new InheritanceStructureBirthmarkExtractor(service);\r
- }\r
+package jp.sourceforge.stigmata.birthmarks.extractors;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.is.InheritanceStructureBirthmarkExtractor;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ * Birthmark Service Provider Interface.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class InheritanceStructureBirthmarkExtractorService extends AbstractBirthmarkExtractorService{
+
+ /**
+ * returns a type of the birthmark this service provides.
+ */
+ public String getType(){
+ return "is";
+ }
+
+ public String getExtractorClassName(){
+ return "jp.sourceforge.stigmata.birthmarks.is.InheritanceStructureBirthmarkExtractor";
+ }
+
+ /**
+ * returns a extractor for the birthmark of this service.
+ */
+ public BirthmarkExtractor getExtractor(BirthmarkSpi service){
+ return new InheritanceStructureBirthmarkExtractor(service);
+ }
}
\ No newline at end of file
-package jp.naist.se.stigmata.birthmarks.extractors;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkExtractor;\r
-import jp.naist.se.stigmata.birthmarks.kgram.KGramBasedBirthmarkExtractor;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * Birthmark Service Provider Interface.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class KGramBasedBirthmarkExtractorService extends AbstractBirthmarkExtractorService{\r
-\r
- /**\r
- * returns a type of the birthmark this service provides.\r
- */\r
- public String getType(){\r
- return "kgram";\r
- }\r
-\r
- public String getExtractorClassName(){\r
- return "jp.naist.se.stigmata.birthmarks.kgram.KGramBasedBirthmarkExtractor";\r
- }\r
-\r
- /**\r
- * returns a extractor for the birthmark of this service.\r
- */\r
- public BirthmarkExtractor getExtractor(BirthmarkSpi service){\r
- return new KGramBasedBirthmarkExtractor(service);\r
- }\r
+package jp.sourceforge.stigmata.birthmarks.extractors;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.kgram.KGramBasedBirthmarkExtractor;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ * Birthmark Service Provider Interface.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class KGramBasedBirthmarkExtractorService extends AbstractBirthmarkExtractorService{
+
+ /**
+ * returns a type of the birthmark this service provides.
+ */
+ public String getType(){
+ return "kgram";
+ }
+
+ public String getExtractorClassName(){
+ return "jp.sourceforge.stigmata.birthmarks.kgram.KGramBasedBirthmarkExtractor";
+ }
+
+ /**
+ * returns a extractor for the birthmark of this service.
+ */
+ public BirthmarkExtractor getExtractor(BirthmarkSpi service){
+ return new KGramBasedBirthmarkExtractor(service);
+ }
}
\ No newline at end of file
-package jp.naist.se.stigmata.birthmarks.extractors;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkExtractor;\r
-import jp.naist.se.stigmata.birthmarks.smc.SequentialMethodCallBirthmarkExtractor;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * Birthmark Service Provider Interface.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class SequentialMethodCallBirthmarkExtractorService extends AbstractBirthmarkExtractorService{\r
-\r
- /**\r
- * returns a type of the birthmark this service provides.\r
- */\r
- public String getType(){\r
- return "smc";\r
- }\r
-\r
- public String getExtractorClassName(){\r
- return "jp.naist.se.stigmata.birthmarks.smc.SequentialMethodCallBirthmarkExtractor";\r
- }\r
-\r
- /**\r
- * returns a extractor for the birthmark of this service.\r
- */\r
- public BirthmarkExtractor getExtractor(BirthmarkSpi service){\r
- return new SequentialMethodCallBirthmarkExtractor(service);\r
- }\r
+package jp.sourceforge.stigmata.birthmarks.extractors;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.smc.SequentialMethodCallBirthmarkExtractor;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ * Birthmark Service Provider Interface.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class SequentialMethodCallBirthmarkExtractorService extends AbstractBirthmarkExtractorService{
+
+ /**
+ * returns a type of the birthmark this service provides.
+ */
+ public String getType(){
+ return "smc";
+ }
+
+ public String getExtractorClassName(){
+ return "jp.sourceforge.stigmata.birthmarks.smc.SequentialMethodCallBirthmarkExtractor";
+ }
+
+ /**
+ * returns a extractor for the birthmark of this service.
+ */
+ public BirthmarkExtractor getExtractor(BirthmarkSpi service){
+ return new SequentialMethodCallBirthmarkExtractor(service);
+ }
}
\ No newline at end of file
-package jp.naist.se.stigmata.birthmarks.extractors;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkExtractor;\r
-import jp.naist.se.stigmata.birthmarks.uc.UsedClassesBirthmarkExtractor;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * Birthmark Service Provider Interface.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class UsedClassesBirthmarkExtractorService extends AbstractBirthmarkExtractorService{\r
-\r
- /**\r
- * returns a type of the birthmark this service provides.\r
- */\r
- public String getType(){\r
- return "uc";\r
- }\r
-\r
- public String getExtractorClassName(){\r
- return "jp.naist.se.stigmata.birthmarks.uc.UsedClassesBirthmarkExtractor";\r
- }\r
-\r
- /**\r
- * returns a extractor for the birthmark of this service.\r
- */\r
- public BirthmarkExtractor getExtractor(BirthmarkSpi service){\r
- return new UsedClassesBirthmarkExtractor(service);\r
- }\r
+package jp.sourceforge.stigmata.birthmarks.extractors;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.uc.UsedClassesBirthmarkExtractor;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ * Birthmark Service Provider Interface.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class UsedClassesBirthmarkExtractorService extends AbstractBirthmarkExtractorService{
+
+ /**
+ * returns a type of the birthmark this service provides.
+ */
+ public String getType(){
+ return "uc";
+ }
+
+ public String getExtractorClassName(){
+ return "jp.sourceforge.stigmata.birthmarks.uc.UsedClassesBirthmarkExtractor";
+ }
+
+ /**
+ * returns a extractor for the birthmark of this service.
+ */
+ public BirthmarkExtractor getExtractor(BirthmarkSpi service){
+ return new UsedClassesBirthmarkExtractor(service);
+ }
}
\ No newline at end of file
-package jp.naist.se.stigmata.birthmarks.fmc;
+package jp.sourceforge.stigmata.birthmarks.fmc;
/*
* $Id$
*/
-import jp.naist.se.stigmata.Birthmark;
-import jp.naist.se.stigmata.BirthmarkEnvironment;
-import jp.naist.se.stigmata.ExtractionUnit;
-import jp.naist.se.stigmata.birthmarks.ASMBirthmarkExtractor;
-import jp.naist.se.stigmata.birthmarks.BirthmarkExtractVisitor;
-import jp.naist.se.stigmata.birthmarks.FrequencyBirthmark;
-import jp.naist.se.stigmata.birthmarks.FrequencyBirthmarkElement;
-import jp.naist.se.stigmata.birthmarks.smc.SequentialMethodCallBirthmarkExtractVisitor;
-import jp.naist.se.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.ExtractionUnit;
+import jp.sourceforge.stigmata.birthmarks.ASMBirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
+import jp.sourceforge.stigmata.birthmarks.FrequencyBirthmark;
+import jp.sourceforge.stigmata.birthmarks.FrequencyBirthmarkElement;
+import jp.sourceforge.stigmata.birthmarks.smc.SequentialMethodCallBirthmarkExtractVisitor;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
import org.objectweb.asm.ClassWriter;
-package jp.naist.se.stigmata.birthmarks.fmc;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkComparator;\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-import jp.naist.se.stigmata.BirthmarkExtractor;\r
-import jp.naist.se.stigmata.birthmarks.AbstractBirthmarkService;\r
-import jp.naist.se.stigmata.birthmarks.FrequencyBirthmarkElement;\r
-import jp.naist.se.stigmata.birthmarks.comparators.CosineSimilarityBirthmarkComparator;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * \r
- * \r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class FrequencyMethodCallBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{\r
- private BirthmarkComparator comparator = new CosineSimilarityBirthmarkComparator(this);\r
- private BirthmarkExtractor extractor = new FrequencyMethodCallBirthmarkExtractor(this);\r
-\r
- public String getType(){\r
- return "fmc";\r
- }\r
-\r
- public String getDefaultDescription(){\r
- return "Frequency of method call which order is appeared in method definition.";\r
- }\r
-\r
- public BirthmarkExtractor getExtractor(){\r
- return extractor;\r
- }\r
-\r
- public BirthmarkComparator getComparator(){\r
- return comparator;\r
- }\r
-\r
- public boolean isExpert(){\r
- return false;\r
- }\r
-\r
- public boolean isUserDefined(){\r
- return false;\r
- }\r
-\r
- @Override\r
- public BirthmarkElement buildBirthmarkElement(String value) {\r
- return new FrequencyBirthmarkElement(value);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.fmc;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkComparator;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.AbstractBirthmarkService;
+import jp.sourceforge.stigmata.birthmarks.FrequencyBirthmarkElement;
+import jp.sourceforge.stigmata.birthmarks.comparators.CosineSimilarityBirthmarkComparator;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class FrequencyMethodCallBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{
+ private BirthmarkComparator comparator = new CosineSimilarityBirthmarkComparator(this);
+ private BirthmarkExtractor extractor = new FrequencyMethodCallBirthmarkExtractor(this);
+
+ public String getType(){
+ return "fmc";
+ }
+
+ public String getDefaultDescription(){
+ return "Frequency of method call which order is appeared in method definition.";
+ }
+
+ public BirthmarkExtractor getExtractor(){
+ return extractor;
+ }
+
+ public BirthmarkComparator getComparator(){
+ return comparator;
+ }
+
+ public boolean isExpert(){
+ return false;
+ }
+
+ public boolean isUserDefined(){
+ return false;
+ }
+
+ @Override
+ public BirthmarkElement buildBirthmarkElement(String value) {
+ return new FrequencyBirthmarkElement(value);
+ }
+}
-package jp.naist.se.stigmata.birthmarks.fuc;
+package jp.sourceforge.stigmata.birthmarks.fuc;
/*
* $Id$
*/
-import jp.naist.se.stigmata.Birthmark;
-import jp.naist.se.stigmata.BirthmarkEnvironment;
-import jp.naist.se.stigmata.ExtractionUnit;
-import jp.naist.se.stigmata.birthmarks.ASMBirthmarkExtractor;
-import jp.naist.se.stigmata.birthmarks.BirthmarkExtractVisitor;
-import jp.naist.se.stigmata.birthmarks.FrequencyBirthmark;
-import jp.naist.se.stigmata.birthmarks.uc.UsedClassesBirthmarkExtractVisitor;
-import jp.naist.se.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.ExtractionUnit;
+import jp.sourceforge.stigmata.birthmarks.ASMBirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
+import jp.sourceforge.stigmata.birthmarks.FrequencyBirthmark;
+import jp.sourceforge.stigmata.birthmarks.uc.UsedClassesBirthmarkExtractVisitor;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
import org.objectweb.asm.ClassWriter;
-package jp.naist.se.stigmata.birthmarks.fuc;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkComparator;\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-import jp.naist.se.stigmata.BirthmarkExtractor;\r
-import jp.naist.se.stigmata.birthmarks.AbstractBirthmarkService;\r
-import jp.naist.se.stigmata.birthmarks.FrequencyBirthmarkElement;\r
-import jp.naist.se.stigmata.birthmarks.comparators.CosineSimilarityBirthmarkComparator;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class FrequencyUsedClassesBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{\r
- private BirthmarkComparator comparator = new CosineSimilarityBirthmarkComparator(this);\r
- private BirthmarkExtractor extractor = new FrequencyUsedClassesBirthmarkExtractor(this);\r
-\r
- public String getType(){\r
- return "fuc";\r
- }\r
-\r
- public String getDefaultDescription(){\r
- return "Frequency of used classes in target class.";\r
- }\r
-\r
- public BirthmarkExtractor getExtractor(){\r
- return extractor;\r
- }\r
-\r
- public BirthmarkComparator getComparator(){\r
- return comparator;\r
- }\r
-\r
- public boolean isExpert(){\r
- return false;\r
- }\r
-\r
- public boolean isUserDefined(){\r
- return false;\r
- }\r
-\r
- public BirthmarkElement createBirthmarkElement(String value){\r
- return new FrequencyBirthmarkElement(value);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.fuc;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkComparator;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.AbstractBirthmarkService;
+import jp.sourceforge.stigmata.birthmarks.FrequencyBirthmarkElement;
+import jp.sourceforge.stigmata.birthmarks.comparators.CosineSimilarityBirthmarkComparator;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class FrequencyUsedClassesBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{
+ private BirthmarkComparator comparator = new CosineSimilarityBirthmarkComparator(this);
+ private BirthmarkExtractor extractor = new FrequencyUsedClassesBirthmarkExtractor(this);
+
+ public String getType(){
+ return "fuc";
+ }
+
+ public String getDefaultDescription(){
+ return "Frequency of used classes in target class.";
+ }
+
+ public BirthmarkExtractor getExtractor(){
+ return extractor;
+ }
+
+ public BirthmarkComparator getComparator(){
+ return comparator;
+ }
+
+ public boolean isExpert(){
+ return false;
+ }
+
+ public boolean isUserDefined(){
+ return false;
+ }
+
+ public BirthmarkElement createBirthmarkElement(String value){
+ return new FrequencyBirthmarkElement(value);
+ }
+}
-package jp.naist.se.stigmata.birthmarks.is;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.Birthmark;\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.birthmarks.BirthmarkExtractVisitor;\r
-import jp.naist.se.stigmata.birthmarks.NullBirthmarkElement;\r
-import jp.naist.se.stigmata.utils.WellknownClassManager;\r
-\r
-import org.objectweb.asm.ClassVisitor;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class InheritanceStructureBirthmarkExtractVisitor extends BirthmarkExtractVisitor{\r
- public InheritanceStructureBirthmarkExtractVisitor(ClassVisitor visitor, Birthmark birthmark, BirthmarkEnvironment environment){\r
- super(visitor, birthmark, environment);\r
- }\r
-\r
- public void visit(int version, int access, String name, String signature,\r
- String superName, String[] interfaces){\r
- try {\r
- Class<?> c = getEnvironment().getClasspathContext().findClass(name.replace('/', '.'));\r
- if(c != null && !c.isInterface()){\r
- addISBirthmark(c);\r
- }\r
- } catch (ClassNotFoundException ex){\r
- addFailur(ex);\r
- }\r
- }\r
-\r
- private void addISBirthmark(Class<?> c){\r
- WellknownClassManager wcm = getEnvironment().getWellknownClassManager();\r
- do{\r
- String className = c.getName();\r
- BirthmarkElement element = null;\r
- if(wcm.isWellKnownClass(className)){\r
- element = new BirthmarkElement(className);\r
- }\r
- else{\r
- element = NullBirthmarkElement.getInstance();\r
- }\r
-\r
- addElement(element);\r
- c = c.getSuperclass();\r
- } while(!c.getName().equals("java.lang.Object"));\r
- addElement(new BirthmarkElement("java.lang.Object"));\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.is;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
+import jp.sourceforge.stigmata.birthmarks.NullBirthmarkElement;
+import jp.sourceforge.stigmata.utils.WellknownClassManager;
+
+import org.objectweb.asm.ClassVisitor;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class InheritanceStructureBirthmarkExtractVisitor extends BirthmarkExtractVisitor{
+ public InheritanceStructureBirthmarkExtractVisitor(ClassVisitor visitor, Birthmark birthmark, BirthmarkEnvironment environment){
+ super(visitor, birthmark, environment);
+ }
+
+ public void visit(int version, int access, String name, String signature,
+ String superName, String[] interfaces){
+ try {
+ Class<?> c = getEnvironment().getClasspathContext().findClass(name.replace('/', '.'));
+ if(c != null && !c.isInterface()){
+ addISBirthmark(c);
+ }
+ } catch (ClassNotFoundException ex){
+ addFailur(ex);
+ }
+ }
+
+ private void addISBirthmark(Class<?> c){
+ WellknownClassManager wcm = getEnvironment().getWellknownClassManager();
+ do{
+ String className = c.getName();
+ BirthmarkElement element = null;
+ if(wcm.isWellKnownClass(className)){
+ element = new BirthmarkElement(className);
+ }
+ else{
+ element = NullBirthmarkElement.getInstance();
+ }
+
+ addElement(element);
+ c = c.getSuperclass();
+ } while(!c.getName().equals("java.lang.Object"));
+ addElement(new BirthmarkElement("java.lang.Object"));
+ }
+}
-package jp.naist.se.stigmata.birthmarks.is;
+package jp.sourceforge.stigmata.birthmarks.is;
/*
* $Id$
import java.io.IOException;
import java.io.InputStream;
-import jp.naist.se.stigmata.Birthmark;
-import jp.naist.se.stigmata.BirthmarkElementClassNotFoundException;
-import jp.naist.se.stigmata.BirthmarkEnvironment;
-import jp.naist.se.stigmata.BirthmarkExtractionFailedException;
-import jp.naist.se.stigmata.ExtractionUnit;
-import jp.naist.se.stigmata.birthmarks.AbstractBirthmarkExtractor;
-import jp.naist.se.stigmata.birthmarks.BirthmarkExtractVisitor;
-import jp.naist.se.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkElementClassNotFoundException;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.BirthmarkExtractionFailedException;
+import jp.sourceforge.stigmata.ExtractionUnit;
+import jp.sourceforge.stigmata.birthmarks.AbstractBirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
-package jp.naist.se.stigmata.birthmarks.is;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkComparator;\r
-import jp.naist.se.stigmata.BirthmarkExtractor;\r
-import jp.naist.se.stigmata.birthmarks.AbstractBirthmarkService;\r
-import jp.naist.se.stigmata.birthmarks.comparators.PlainBirthmarkComparator;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class InheritanceStructureBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{\r
- private BirthmarkComparator comparator = new PlainBirthmarkComparator(this);\r
- private BirthmarkExtractor extractor = new InheritanceStructureBirthmarkExtractor(this);\r
-\r
- public String getType(){\r
- return "is";\r
- }\r
-\r
- public String getDefaultDescription(){\r
- return "Inheritance sequence to root class and user classes is replaced to <null>.";\r
- }\r
-\r
- public BirthmarkExtractor getExtractor(){\r
- return extractor;\r
- }\r
-\r
- public BirthmarkComparator getComparator(){\r
- return comparator;\r
- }\r
-\r
- public boolean isExpert(){\r
- return false;\r
- }\r
-\r
- public boolean isUserDefined(){\r
- return false;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.is;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkComparator;
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.AbstractBirthmarkService;
+import jp.sourceforge.stigmata.birthmarks.comparators.PlainBirthmarkComparator;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class InheritanceStructureBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{
+ private BirthmarkComparator comparator = new PlainBirthmarkComparator(this);
+ private BirthmarkExtractor extractor = new InheritanceStructureBirthmarkExtractor(this);
+
+ public String getType(){
+ return "is";
+ }
+
+ public String getDefaultDescription(){
+ return "Inheritance sequence to root class and user classes is replaced to <null>.";
+ }
+
+ public BirthmarkExtractor getExtractor(){
+ return extractor;
+ }
+
+ public BirthmarkComparator getComparator(){
+ return comparator;
+ }
+
+ public boolean isExpert(){
+ return false;
+ }
+
+ public boolean isUserDefined(){
+ return false;
+ }
+}
-package jp.naist.se.stigmata.birthmarks.kgram;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.Serializable;\r
-import java.lang.reflect.Array;\r
-import java.util.Arrays;\r
-import java.util.LinkedHashSet;\r
-import java.util.Set;\r
-\r
-/**\r
- * This class represents k-gram of the some sequence. \r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class KGram<T> implements Serializable{\r
- private static final long serialVersionUID = 273465874532523L;\r
- // private List<T> list = new ArrayList<T>();\r
- private int maxLength = 4;\r
- private T[] values;\r
-\r
- /**\r
- * constructor.\r
- * @param kvalue the number of elements of this object.\r
- */\r
- public KGram(int kvalue){\r
- setKValue(kvalue);\r
- }\r
-\r
- /**\r
- * sets k-value. \r
- * @param kvalue the number of elements of this object.\r
- */\r
- public void setKValue(int kvalue){\r
- this.maxLength = kvalue;\r
- }\r
-\r
- /**\r
- * returns k-value which is the number of elements.\r
- * @return the number of elements.\r
- */\r
- public int getKValue(){\r
- return maxLength;\r
- }\r
-\r
- /**\r
- * returns string representation of this object.\r
- */\r
- public String toString(){\r
- StringBuffer buffer = new StringBuffer("{ ");\r
- for(int i = 0; i < maxLength; i++){\r
- if(i != 0) buffer.append(", ");\r
- buffer.append(get(i));\r
- }\r
- buffer.append(" }");\r
- return new String(buffer);\r
- }\r
-\r
- /**\r
- * sets a element to given index.\r
- * @param index element index.\r
- * @param value element value.\r
- */\r
- @SuppressWarnings("unchecked")\r
- public void set(int index, T value){\r
- if(index < 0 || index >= maxLength){\r
- throw new ArrayIndexOutOfBoundsException("expected 0-" + (maxLength - 1) + ": " + index);\r
- }\r
- if(value == null){\r
- throw new NullPointerException("null value");\r
- }\r
- if(values == null){\r
- values = (T[])Array.newInstance(value.getClass(), getKValue());\r
- }\r
- values[index] = value;\r
- }\r
-\r
- /**\r
- * returns an object of given index.\r
- */\r
- public T get(int index){\r
- T returnValue = null;\r
- if(index < 0 || index >= maxLength){\r
- throw new ArrayIndexOutOfBoundsException("expected 0-" + (maxLength - 1) + ": " + index);\r
- }\r
- if(values != null){\r
- returnValue = values[index];\r
- }\r
-\r
- return returnValue;\r
- }\r
-\r
- /**\r
- * returns an array of elements this object has.\r
- * @return\r
- */\r
- @SuppressWarnings("unchecked")\r
- public T[] toArray(){\r
- if(values == null){\r
- throw new IllegalStateException("this object has no elements.");\r
- }\r
- T[] newarray = (T[])Array.newInstance(values[0].getClass(), getKValue());\r
- System.arraycopy(values, 0, newarray, 0, getKValue());\r
- return newarray;\r
- }\r
-\r
- @SuppressWarnings("unchecked")\r
- public boolean equals(Object o){\r
- if(o instanceof KGram){\r
- KGram kgram = (KGram)o;\r
- boolean flag = getKValue() == kgram.getKValue();\r
- for(int i = 0; !flag && i < maxLength; i++){\r
- if(!get(i).equals(kgram.get(i))){\r
- flag = false;\r
- }\r
- }\r
- return flag;\r
- }\r
- return false;\r
- }\r
-\r
- public int hashCode(){\r
- return Arrays.hashCode(values);\r
- }\r
-\r
- @SuppressWarnings("unchecked")\r
- public static <T> KGram<T>[] buildKGram(T[] values, int kvalue){\r
- Set<KGram<T>> kgrams = new LinkedHashSet<KGram<T>>();\r
-\r
- if(values.length >= kvalue){\r
- int max = values.length - (kvalue - 1);\r
- for(int i = 0; i < max; i++){\r
- KGram<T> kgram = new KGram<T>(kvalue);\r
- for(int j = 0; j < kvalue; j++){\r
- kgram.set(j, values[i + j]);\r
- }\r
- kgrams.add(kgram);\r
- }\r
- }\r
- return kgrams.toArray(new KGram[kgrams.size()]);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.kgram;
+
+/*
+ * $Id$
+ */
+
+import java.io.Serializable;
+import java.lang.reflect.Array;
+import java.util.Arrays;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+/**
+ * This class represents k-gram of the some sequence.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class KGram<T> implements Serializable{
+ private static final long serialVersionUID = 273465874532523L;
+ // private List<T> list = new ArrayList<T>();
+ private int maxLength = 4;
+ private T[] values;
+
+ /**
+ * constructor.
+ * @param kvalue the number of elements of this object.
+ */
+ public KGram(int kvalue){
+ setKValue(kvalue);
+ }
+
+ /**
+ * sets k-value.
+ * @param kvalue the number of elements of this object.
+ */
+ public void setKValue(int kvalue){
+ this.maxLength = kvalue;
+ }
+
+ /**
+ * returns k-value which is the number of elements.
+ * @return the number of elements.
+ */
+ public int getKValue(){
+ return maxLength;
+ }
+
+ /**
+ * returns string representation of this object.
+ */
+ public String toString(){
+ StringBuffer buffer = new StringBuffer("{ ");
+ for(int i = 0; i < maxLength; i++){
+ if(i != 0) buffer.append(", ");
+ buffer.append(get(i));
+ }
+ buffer.append(" }");
+ return new String(buffer);
+ }
+
+ /**
+ * sets a element to given index.
+ * @param index element index.
+ * @param value element value.
+ */
+ @SuppressWarnings("unchecked")
+ public void set(int index, T value){
+ if(index < 0 || index >= maxLength){
+ throw new ArrayIndexOutOfBoundsException("expected 0-" + (maxLength - 1) + ": " + index);
+ }
+ if(value == null){
+ throw new NullPointerException("null value");
+ }
+ if(values == null){
+ values = (T[])Array.newInstance(value.getClass(), getKValue());
+ }
+ values[index] = value;
+ }
+
+ /**
+ * returns an object of given index.
+ */
+ public T get(int index){
+ T returnValue = null;
+ if(index < 0 || index >= maxLength){
+ throw new ArrayIndexOutOfBoundsException("expected 0-" + (maxLength - 1) + ": " + index);
+ }
+ if(values != null){
+ returnValue = values[index];
+ }
+
+ return returnValue;
+ }
+
+ /**
+ * returns an array of elements this object has.
+ * @return
+ */
+ @SuppressWarnings("unchecked")
+ public T[] toArray(){
+ if(values == null){
+ throw new IllegalStateException("this object has no elements.");
+ }
+ T[] newarray = (T[])Array.newInstance(values[0].getClass(), getKValue());
+ System.arraycopy(values, 0, newarray, 0, getKValue());
+ return newarray;
+ }
+
+ @SuppressWarnings("unchecked")
+ public boolean equals(Object o){
+ if(o instanceof KGram){
+ KGram kgram = (KGram)o;
+ boolean flag = getKValue() == kgram.getKValue();
+ for(int i = 0; !flag && i < maxLength; i++){
+ if(!get(i).equals(kgram.get(i))){
+ flag = false;
+ }
+ }
+ return flag;
+ }
+ return false;
+ }
+
+ public int hashCode(){
+ return Arrays.hashCode(values);
+ }
+
+ @SuppressWarnings("unchecked")
+ public static <T> KGram<T>[] buildKGram(T[] values, int kvalue){
+ Set<KGram<T>> kgrams = new LinkedHashSet<KGram<T>>();
+
+ if(values.length >= kvalue){
+ int max = values.length - (kvalue - 1);
+ for(int i = 0; i < max; i++){
+ KGram<T> kgram = new KGram<T>(kvalue);
+ for(int j = 0; j < kvalue; j++){
+ kgram.set(j, values[i + j]);
+ }
+ kgrams.add(kgram);
+ }
+ }
+ return kgrams.toArray(new KGram[kgrams.size()]);
+ }
+}
-package jp.naist.se.stigmata.birthmarks.kgram;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class KGramBasedBirthmarkElement<T> extends BirthmarkElement{\r
- private static final long serialVersionUID = 28546543857543634L;\r
-\r
- private KGram<T> kgram;\r
-\r
- public KGramBasedBirthmarkElement(KGram<T> kgram){\r
- super(kgram.toString());\r
- this.kgram = kgram;\r
- }\r
-\r
- @SuppressWarnings("unchecked")\r
- public boolean equals(Object o){\r
- return o instanceof KGramBasedBirthmarkElement &&\r
- kgram.equals(((KGramBasedBirthmarkElement)o).kgram);\r
- }\r
-\r
- public int hashCode(){\r
- int v = kgram.hashCode();\r
-\r
- return (v & 0xff << 24) | (v >> 8); \r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.kgram;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkElement;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class KGramBasedBirthmarkElement<T> extends BirthmarkElement{
+ private static final long serialVersionUID = 28546543857543634L;
+
+ private KGram<T> kgram;
+
+ public KGramBasedBirthmarkElement(KGram<T> kgram){
+ super(kgram.toString());
+ this.kgram = kgram;
+ }
+
+ @SuppressWarnings("unchecked")
+ public boolean equals(Object o){
+ return o instanceof KGramBasedBirthmarkElement &&
+ kgram.equals(((KGramBasedBirthmarkElement)o).kgram);
+ }
+
+ public int hashCode(){
+ int v = kgram.hashCode();
+
+ return (v & 0xff << 24) | (v >> 8);
+ }
+}
-package jp.naist.se.stigmata.birthmarks.kgram;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.ArrayList;\r
-import java.util.HashSet;\r
-import java.util.List;\r
-import java.util.Set;\r
-\r
-import jp.naist.se.stigmata.Birthmark;\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.birthmarks.BirthmarkExtractVisitor;\r
-\r
-import org.objectweb.asm.ClassVisitor;\r
-import org.objectweb.asm.MethodVisitor;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class KGramBasedBirthmarkExtractVisitor extends BirthmarkExtractVisitor{\r
- private int kvalue;\r
- private List<Integer> opcodes = new ArrayList<Integer>();\r
-\r
- public KGramBasedBirthmarkExtractVisitor(ClassVisitor visitor, Birthmark birthmark, BirthmarkEnvironment environment){\r
- super(visitor, birthmark, environment);\r
- }\r
-\r
- public int getKValue(){\r
- return kvalue;\r
- }\r
-\r
- public void setKValue(int kvalue){\r
- this.kvalue = kvalue;\r
- }\r
-\r
- public void visitEnd(){\r
- Set<KGram<Integer>> kgrams = new HashSet<KGram<Integer>>();\r
- if(opcodes.size() >= getKValue()){\r
- int kvalue = getKValue();\r
- int max = opcodes.size() - (kvalue - 1);\r
- for(int i = 0; i < max; i++){\r
- KGram<Integer> kgram = new KGram<Integer>(kvalue);\r
- for(int j = 0; j < kvalue; j++){\r
- kgram.set(j, opcodes.get(i + j));\r
- }\r
- kgrams.add(kgram);\r
- }\r
- }\r
- for(KGram<Integer> kgram: kgrams){\r
- addElement(new KGramBasedBirthmarkElement<Integer>(kgram));\r
- }\r
- }\r
-\r
- @Override\r
- public MethodVisitor visitMethod(int arg0, String arg1, String arg2, String arg3, String[] arg4){\r
- MethodVisitor visitor = super.visitMethod(arg0, arg1, arg2, arg3, arg4);\r
- MethodVisitor opcodeVisitor = new OpcodeExtractionMethodVisitor(visitor, opcodes);\r
-\r
- return opcodeVisitor;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.kgram;
+
+/*
+ * $Id$
+ */
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
+
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.MethodVisitor;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class KGramBasedBirthmarkExtractVisitor extends BirthmarkExtractVisitor{
+ private int kvalue;
+ private List<Integer> opcodes = new ArrayList<Integer>();
+
+ public KGramBasedBirthmarkExtractVisitor(ClassVisitor visitor, Birthmark birthmark, BirthmarkEnvironment environment){
+ super(visitor, birthmark, environment);
+ }
+
+ public int getKValue(){
+ return kvalue;
+ }
+
+ public void setKValue(int kvalue){
+ this.kvalue = kvalue;
+ }
+
+ public void visitEnd(){
+ Set<KGram<Integer>> kgrams = new HashSet<KGram<Integer>>();
+ if(opcodes.size() >= getKValue()){
+ int kvalue = getKValue();
+ int max = opcodes.size() - (kvalue - 1);
+ for(int i = 0; i < max; i++){
+ KGram<Integer> kgram = new KGram<Integer>(kvalue);
+ for(int j = 0; j < kvalue; j++){
+ kgram.set(j, opcodes.get(i + j));
+ }
+ kgrams.add(kgram);
+ }
+ }
+ for(KGram<Integer> kgram: kgrams){
+ addElement(new KGramBasedBirthmarkElement<Integer>(kgram));
+ }
+ }
+
+ @Override
+ public MethodVisitor visitMethod(int arg0, String arg1, String arg2, String arg3, String[] arg4){
+ MethodVisitor visitor = super.visitMethod(arg0, arg1, arg2, arg3, arg4);
+ MethodVisitor opcodeVisitor = new OpcodeExtractionMethodVisitor(visitor, opcodes);
+
+ return opcodeVisitor;
+ }
+}
-package jp.naist.se.stigmata.birthmarks.kgram;
+package jp.sourceforge.stigmata.birthmarks.kgram;
/*
* $Id$
*/
-import jp.naist.se.stigmata.Birthmark;
-import jp.naist.se.stigmata.BirthmarkEnvironment;
-import jp.naist.se.stigmata.ExtractionUnit;
-import jp.naist.se.stigmata.birthmarks.ASMBirthmarkExtractor;
-import jp.naist.se.stigmata.birthmarks.BirthmarkExtractVisitor;
-import jp.naist.se.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.ExtractionUnit;
+import jp.sourceforge.stigmata.birthmarks.ASMBirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
import org.objectweb.asm.ClassWriter;
-package jp.naist.se.stigmata.birthmarks.kgram;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkComparator;\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-import jp.naist.se.stigmata.BirthmarkExtractor;\r
-import jp.naist.se.stigmata.birthmarks.AbstractBirthmarkService;\r
-import jp.naist.se.stigmata.birthmarks.comparators.LogicalAndBirthmarkComparator;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class KGramBasedBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{\r
- private BirthmarkComparator comparator = new LogicalAndBirthmarkComparator(this);\r
- private BirthmarkExtractor extractor = new KGramBasedBirthmarkExtractor(this);\r
-\r
- public String getType(){\r
- return "kgram";\r
- }\r
-\r
- public String getDefaultDescription(){\r
- return "k-gram based birthmark.";\r
- }\r
-\r
- public BirthmarkExtractor getExtractor(){\r
- return extractor;\r
- }\r
-\r
- public BirthmarkComparator getComparator(){\r
- return comparator;\r
- }\r
-\r
- public boolean isExpert(){\r
- return false;\r
- }\r
-\r
- public boolean isUserDefined(){\r
- return false;\r
- }\r
-\r
- @Override\r
- public BirthmarkElement buildBirthmarkElement(String value) {\r
- value = value.trim();\r
- if(value.startsWith("{") && value.endsWith("}")){\r
- String[] param = value.substring(1, value.length() - 1).split(", *");\r
- KGram<Integer> kgram = new KGram<Integer>(param.length);\r
- for(int i = 0; i < param.length; i++){\r
- kgram.set(i, new Integer(param[i].trim()));\r
- }\r
- return new KGramBasedBirthmarkElement<Integer>(kgram);\r
- }\r
- return null;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.kgram;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkComparator;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.AbstractBirthmarkService;
+import jp.sourceforge.stigmata.birthmarks.comparators.LogicalAndBirthmarkComparator;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class KGramBasedBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{
+ private BirthmarkComparator comparator = new LogicalAndBirthmarkComparator(this);
+ private BirthmarkExtractor extractor = new KGramBasedBirthmarkExtractor(this);
+
+ public String getType(){
+ return "kgram";
+ }
+
+ public String getDefaultDescription(){
+ return "k-gram based birthmark.";
+ }
+
+ public BirthmarkExtractor getExtractor(){
+ return extractor;
+ }
+
+ public BirthmarkComparator getComparator(){
+ return comparator;
+ }
+
+ public boolean isExpert(){
+ return false;
+ }
+
+ public boolean isUserDefined(){
+ return false;
+ }
+
+ @Override
+ public BirthmarkElement buildBirthmarkElement(String value) {
+ value = value.trim();
+ if(value.startsWith("{") && value.endsWith("}")){
+ String[] param = value.substring(1, value.length() - 1).split(", *");
+ KGram<Integer> kgram = new KGram<Integer>(param.length);
+ for(int i = 0; i < param.length; i++){
+ kgram.set(i, new Integer(param[i].trim()));
+ }
+ return new KGramBasedBirthmarkElement<Integer>(kgram);
+ }
+ return null;
+ }
+}
-package jp.naist.se.stigmata.birthmarks.kgram;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.List;\r
-\r
-import org.objectweb.asm.Label;\r
-import org.objectweb.asm.MethodAdapter;\r
-import org.objectweb.asm.MethodVisitor;\r
-import org.objectweb.asm.Opcodes;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class OpcodeExtractionMethodVisitor extends MethodAdapter{\r
- private List<Integer> opcodes;\r
-\r
- public OpcodeExtractionMethodVisitor(MethodVisitor visitor, List<Integer> opcodes){\r
- super(visitor);\r
- this.opcodes = opcodes;\r
- }\r
-\r
- @Override\r
- public void visitFieldInsn(int opcode, String owner, String name, String desc){\r
- opcodes.add(opcode);\r
- super.visitFieldInsn(opcode, owner, name, desc);\r
- }\r
-\r
- @Override\r
- public void visitIincInsn(int var, int increment){\r
- opcodes.add(Opcodes.IINC);\r
- super.visitIincInsn(var, increment);\r
- }\r
-\r
- @Override\r
- public void visitInsn(int opcode){\r
- opcodes.add(opcode);\r
- super.visitInsn(opcode);\r
- }\r
-\r
- @Override\r
- public void visitIntInsn(int opcode, int operand){\r
- opcodes.add(opcode);\r
- super.visitIntInsn(opcode, operand);\r
- }\r
-\r
- @Override\r
- public void visitJumpInsn(int opcode, Label label){\r
- opcodes.add(opcode);\r
- super.visitJumpInsn(opcode, label);\r
- }\r
-\r
- @Override\r
- public void visitLdcInsn(Object value){\r
- opcodes.add(Opcodes.LDC);\r
- super.visitLdcInsn(value);\r
- }\r
-\r
- @Override\r
- public void visitLookupSwitchInsn(Label defaultHandle, int[] keys, Label[] labels){\r
- opcodes.add(Opcodes.LOOKUPSWITCH);\r
- super.visitLookupSwitchInsn(defaultHandle, keys, labels);\r
- }\r
-\r
- @Override\r
- public void visitMethodInsn(int opcode, String owner, String name, String desc){\r
- opcodes.add(opcode);\r
- super.visitMethodInsn(opcode, owner, name, desc);\r
- }\r
-\r
- @Override\r
- public void visitMultiANewArrayInsn(String desc, int dims){\r
- opcodes.add(Opcodes.MULTIANEWARRAY);\r
- super.visitMultiANewArrayInsn(desc, dims);\r
- }\r
-\r
- @Override\r
- public void visitTableSwitchInsn(int min, int max, Label defaultLabel, Label[] labels){\r
- opcodes.add(Opcodes.TABLESWITCH);\r
- super.visitTableSwitchInsn(min, max, defaultLabel, labels);\r
- }\r
-\r
- @Override\r
- public void visitTypeInsn(int opcode, String desc){\r
- opcodes.add(opcode);\r
- super.visitTypeInsn(opcode, desc);\r
- }\r
-\r
- @Override\r
- public void visitVarInsn(int opcode, int var){\r
- opcodes.add(opcode);\r
- super.visitVarInsn(opcode, var);\r
- }\r
-\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.kgram;
+
+/*
+ * $Id$
+ */
+
+import java.util.List;
+
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodAdapter;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class OpcodeExtractionMethodVisitor extends MethodAdapter{
+ private List<Integer> opcodes;
+
+ public OpcodeExtractionMethodVisitor(MethodVisitor visitor, List<Integer> opcodes){
+ super(visitor);
+ this.opcodes = opcodes;
+ }
+
+ @Override
+ public void visitFieldInsn(int opcode, String owner, String name, String desc){
+ opcodes.add(opcode);
+ super.visitFieldInsn(opcode, owner, name, desc);
+ }
+
+ @Override
+ public void visitIincInsn(int var, int increment){
+ opcodes.add(Opcodes.IINC);
+ super.visitIincInsn(var, increment);
+ }
+
+ @Override
+ public void visitInsn(int opcode){
+ opcodes.add(opcode);
+ super.visitInsn(opcode);
+ }
+
+ @Override
+ public void visitIntInsn(int opcode, int operand){
+ opcodes.add(opcode);
+ super.visitIntInsn(opcode, operand);
+ }
+
+ @Override
+ public void visitJumpInsn(int opcode, Label label){
+ opcodes.add(opcode);
+ super.visitJumpInsn(opcode, label);
+ }
+
+ @Override
+ public void visitLdcInsn(Object value){
+ opcodes.add(Opcodes.LDC);
+ super.visitLdcInsn(value);
+ }
+
+ @Override
+ public void visitLookupSwitchInsn(Label defaultHandle, int[] keys, Label[] labels){
+ opcodes.add(Opcodes.LOOKUPSWITCH);
+ super.visitLookupSwitchInsn(defaultHandle, keys, labels);
+ }
+
+ @Override
+ public void visitMethodInsn(int opcode, String owner, String name, String desc){
+ opcodes.add(opcode);
+ super.visitMethodInsn(opcode, owner, name, desc);
+ }
+
+ @Override
+ public void visitMultiANewArrayInsn(String desc, int dims){
+ opcodes.add(Opcodes.MULTIANEWARRAY);
+ super.visitMultiANewArrayInsn(desc, dims);
+ }
+
+ @Override
+ public void visitTableSwitchInsn(int min, int max, Label defaultLabel, Label[] labels){
+ opcodes.add(Opcodes.TABLESWITCH);
+ super.visitTableSwitchInsn(min, max, defaultLabel, labels);
+ }
+
+ @Override
+ public void visitTypeInsn(int opcode, String desc){
+ opcodes.add(opcode);
+ super.visitTypeInsn(opcode, desc);
+ }
+
+ @Override
+ public void visitVarInsn(int opcode, int var){
+ opcodes.add(opcode);
+ super.visitVarInsn(opcode, var);
+ }
+
+}
-package jp.naist.se.stigmata.birthmarks.smc;
+package jp.sourceforge.stigmata.birthmarks.smc;
/*
* $Id$
import java.io.Serializable;
-import jp.naist.se.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.BirthmarkElement;
/**
*
-package jp.naist.se.stigmata.birthmarks.smc;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.Birthmark;\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.birthmarks.BirthmarkExtractVisitor;\r
-\r
-import org.objectweb.asm.ClassVisitor;\r
-import org.objectweb.asm.MethodAdapter;\r
-import org.objectweb.asm.MethodVisitor;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class SequentialMethodCallBirthmarkExtractVisitor extends BirthmarkExtractVisitor{\r
- public SequentialMethodCallBirthmarkExtractVisitor(ClassVisitor visitor, Birthmark birthmark, BirthmarkEnvironment environment){\r
- super(visitor, birthmark, environment);\r
- }\r
-\r
- public MethodVisitor visitMethod(int access, String name, String desc,\r
- String signature, String[] exceptions){\r
-\r
- MethodVisitor visitor = super.visitMethod(access, name, desc, signature, exceptions);\r
-\r
- return new MethodAdapter(visitor){\r
- public void visitMethodInsn(int opcode, String owner, String name, String desc){\r
- String className = owner.replace('/', '.');\r
- if(getEnvironment().getWellknownClassManager().isWellKnownClass(className)){\r
- addElement(className, name, desc);\r
- }\r
- super.visitMethodInsn(opcode, owner, name, desc);\r
- }\r
- };\r
- }\r
-\r
- protected void addElement(String className, String methodName, String description){\r
- addElement(new MethodCallBirthmarkElement(className, methodName, description));\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.smc;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
+
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.MethodAdapter;
+import org.objectweb.asm.MethodVisitor;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class SequentialMethodCallBirthmarkExtractVisitor extends BirthmarkExtractVisitor{
+ public SequentialMethodCallBirthmarkExtractVisitor(ClassVisitor visitor, Birthmark birthmark, BirthmarkEnvironment environment){
+ super(visitor, birthmark, environment);
+ }
+
+ public MethodVisitor visitMethod(int access, String name, String desc,
+ String signature, String[] exceptions){
+
+ MethodVisitor visitor = super.visitMethod(access, name, desc, signature, exceptions);
+
+ return new MethodAdapter(visitor){
+ public void visitMethodInsn(int opcode, String owner, String name, String desc){
+ String className = owner.replace('/', '.');
+ if(getEnvironment().getWellknownClassManager().isWellKnownClass(className)){
+ addElement(className, name, desc);
+ }
+ super.visitMethodInsn(opcode, owner, name, desc);
+ }
+ };
+ }
+
+ protected void addElement(String className, String methodName, String description){
+ addElement(new MethodCallBirthmarkElement(className, methodName, description));
+ }
+}
-package jp.naist.se.stigmata.birthmarks.smc;
+package jp.sourceforge.stigmata.birthmarks.smc;
/*
* $Id$
*/
-import jp.naist.se.stigmata.Birthmark;
-import jp.naist.se.stigmata.BirthmarkEnvironment;
-import jp.naist.se.stigmata.ExtractionUnit;
-import jp.naist.se.stigmata.birthmarks.ASMBirthmarkExtractor;
-import jp.naist.se.stigmata.birthmarks.BirthmarkExtractVisitor;
-import jp.naist.se.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.ExtractionUnit;
+import jp.sourceforge.stigmata.birthmarks.ASMBirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
import org.objectweb.asm.ClassWriter;
-package jp.naist.se.stigmata.birthmarks.smc;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkComparator;\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-import jp.naist.se.stigmata.BirthmarkExtractor;\r
-import jp.naist.se.stigmata.birthmarks.AbstractBirthmarkService;\r
-import jp.naist.se.stigmata.birthmarks.comparators.PlainBirthmarkComparator;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class SequentialMethodCallBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{\r
- private BirthmarkComparator comparator = new PlainBirthmarkComparator(this);\r
- private BirthmarkExtractor extractor = new SequentialMethodCallBirthmarkExtractor(this);\r
-\r
- public String getType(){\r
- return "smc";\r
- }\r
-\r
- public String getDefaultDescription(){\r
- return "Sequence of method call which order is appeared in method definition.";\r
- }\r
-\r
- public BirthmarkExtractor getExtractor(){\r
- return extractor;\r
- }\r
-\r
- public BirthmarkComparator getComparator(){\r
- return comparator;\r
- }\r
-\r
- public boolean isExpert(){\r
- return false;\r
- }\r
-\r
- public boolean isUserDefined(){\r
- return false;\r
- }\r
-\r
- @Override\r
- public BirthmarkElement buildBirthmarkElement(String value) {\r
- String className = value.substring(0, value.indexOf('#'));\r
- String methodName = value.substring(value.indexOf('#') + 1, value.lastIndexOf('!'));\r
- String signature = value.substring(value.lastIndexOf('!') + 1);\r
-\r
- return new MethodCallBirthmarkElement(className, methodName, signature);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.smc;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkComparator;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.AbstractBirthmarkService;
+import jp.sourceforge.stigmata.birthmarks.comparators.PlainBirthmarkComparator;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class SequentialMethodCallBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{
+ private BirthmarkComparator comparator = new PlainBirthmarkComparator(this);
+ private BirthmarkExtractor extractor = new SequentialMethodCallBirthmarkExtractor(this);
+
+ public String getType(){
+ return "smc";
+ }
+
+ public String getDefaultDescription(){
+ return "Sequence of method call which order is appeared in method definition.";
+ }
+
+ public BirthmarkExtractor getExtractor(){
+ return extractor;
+ }
+
+ public BirthmarkComparator getComparator(){
+ return comparator;
+ }
+
+ public boolean isExpert(){
+ return false;
+ }
+
+ public boolean isUserDefined(){
+ return false;
+ }
+
+ @Override
+ public BirthmarkElement buildBirthmarkElement(String value) {
+ String className = value.substring(0, value.indexOf('#'));
+ String methodName = value.substring(value.indexOf('#') + 1, value.lastIndexOf('!'));
+ String signature = value.substring(value.lastIndexOf('!') + 1);
+
+ return new MethodCallBirthmarkElement(className, methodName, signature);
+ }
+}
-package jp.naist.se.stigmata.birthmarks.uc;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-import jp.naist.se.stigmata.birthmarks.PlainBirthmark;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-class UsedClassesBirthmark extends PlainBirthmark{\r
- private static final long serialVersionUID = -1043130948373105655L;\r
-\r
- public UsedClassesBirthmark(String type){\r
- super(type);\r
- }\r
-\r
- @Override\r
- public synchronized void addElement(BirthmarkElement element){\r
- int c = getElementCount();\r
- String s = (String)element.getValue();\r
- boolean addFlag = false;\r
- for(int i = 0; i < c; i++){\r
- BirthmarkElement e = getElement(i);\r
- String v = (String)e.getValue();\r
- if(s.equals(v)){\r
- addFlag = true;\r
- break;\r
- }\r
- }\r
- if(!addFlag){\r
- for(int i = 0; i < c; i++){\r
- if(s.compareTo((String)getElement(i).getValue()) < 0){\r
- super.addElement(i, element);\r
- break;\r
- }\r
- }\r
- }\r
- if(!addFlag && c == getElementCount()){\r
- super.addElement(element);\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.uc;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.birthmarks.PlainBirthmark;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+class UsedClassesBirthmark extends PlainBirthmark{
+ private static final long serialVersionUID = -1043130948373105655L;
+
+ public UsedClassesBirthmark(String type){
+ super(type);
+ }
+
+ @Override
+ public synchronized void addElement(BirthmarkElement element){
+ int c = getElementCount();
+ String s = (String)element.getValue();
+ boolean addFlag = false;
+ for(int i = 0; i < c; i++){
+ BirthmarkElement e = getElement(i);
+ String v = (String)e.getValue();
+ if(s.equals(v)){
+ addFlag = true;
+ break;
+ }
+ }
+ if(!addFlag){
+ for(int i = 0; i < c; i++){
+ if(s.compareTo((String)getElement(i).getValue()) < 0){
+ super.addElement(i, element);
+ break;
+ }
+ }
+ }
+ if(!addFlag && c == getElementCount()){
+ super.addElement(element);
+ }
+ }
+}
-package jp.naist.se.stigmata.birthmarks.uc;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.Birthmark;\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.birthmarks.BirthmarkExtractVisitor;\r
-\r
-import org.objectweb.asm.ClassVisitor;\r
-import org.objectweb.asm.FieldVisitor;\r
-import org.objectweb.asm.Label;\r
-import org.objectweb.asm.MethodAdapter;\r
-import org.objectweb.asm.MethodVisitor;\r
-import org.objectweb.asm.Type;\r
-import org.objectweb.asm.signature.SignatureReader;\r
-import org.objectweb.asm.signature.SignatureWriter;\r
-\r
-/**\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class UsedClassesBirthmarkExtractVisitor extends BirthmarkExtractVisitor{\r
- public UsedClassesBirthmarkExtractVisitor(ClassVisitor visitor, Birthmark birthmark,\r
- BirthmarkEnvironment environment){\r
- super(visitor, birthmark, environment);\r
- }\r
-\r
- public void visit(int version, int access, String name, String signature,\r
- String superName, String[] interfaces){\r
- addSignatureClass(signature);\r
-\r
- if(getEnvironment().getWellknownClassManager().isWellKnownClass(superName)){\r
- add(superName);\r
- }\r
- for(String i: interfaces){\r
- if(getEnvironment().getWellknownClassManager().isWellKnownClass(i)){\r
- add(i);\r
- }\r
- }\r
- }\r
-\r
- public FieldVisitor visitField(int access, String name, String desc,\r
- String signature, Object value){\r
- FieldVisitor visitor = super.visitField(access, name, desc, signature, value);\r
-\r
- addDescriptor(desc);\r
- addSignatureClass(signature);\r
-\r
- return visitor;\r
- }\r
-\r
- public MethodVisitor visitMethod(int access, String name, String desc,\r
- String signature, String[] exceptions){\r
- if(exceptions != null){\r
- for(String exception: exceptions){\r
- if(getEnvironment().getWellknownClassManager().isWellKnownClass(exception)){\r
- add(exception);\r
- }\r
- }\r
- }\r
- addMethodDescriptor(desc);\r
- addSignatureClass(signature);\r
-\r
- MethodVisitor visitor = super.visitMethod(access, name, desc, signature, exceptions);\r
-\r
- return new MethodAdapter(visitor){\r
- public void visitTypeInsn(int opcode, String desc){\r
- Type type = Type.getType("L" + desc + ";");\r
- if(checkType(type)){\r
- add(desc);\r
- }\r
- super.visitTypeInsn(opcode, desc);\r
- }\r
-\r
- public void visitTryCatchBlock(Label start, Label end, Label handle, String desc){\r
- Type type = Type.getType("L" + desc + ";");\r
- if(checkType(type)){\r
- add(getType(type));\r
- }\r
- super.visitTryCatchBlock(start, end, handle, desc);\r
- }\r
-\r
- public void visitMultiANewArrayInsn(String desc, int dims){\r
- Type type = Type.getType(desc);\r
- if(checkType(type)){\r
- add(getType(type));\r
- }\r
- super.visitMultiANewArrayInsn(desc, dims);\r
- }\r
-\r
- public void visitLocalVariable(String name, String desc, String signature,\r
- Label start, Label end, int index){\r
- if(checkType(Type.getType(desc))){\r
- add(desc);\r
- }\r
- addSignatureClass(signature);\r
-\r
- super.visitLocalVariable(name, desc, signature, start, end, index);\r
- }\r
-\r
- public void visitFieldInsn(int opcode, String owner, String name, String desc){\r
- if(getEnvironment().getWellknownClassManager().isWellKnownClass(owner)){\r
- add(owner);\r
- }\r
- addDescriptor(desc);\r
- super.visitFieldInsn(opcode, owner, name, desc);\r
- }\r
- public void visitMethodInsn(int opcode, String owner, String name, String desc){\r
- String className = normalize(owner);\r
- if(getEnvironment().getWellknownClassManager().isWellKnownClass(className)){\r
- add(className);\r
- }\r
- addMethodDescriptor(desc);\r
- super.visitMethodInsn(opcode, owner, name, desc);\r
- }\r
- };\r
- }\r
-\r
- private void addSignatureClass(String signature){\r
- if(signature != null){\r
- SignatureReader in = new SignatureReader(signature);\r
- SignatureWriter writer = new SignatureWriter(){\r
- public void visitClassType(String classType){\r
- if(getEnvironment().getWellknownClassManager().isWellKnownClass(classType)){\r
- add(classType);\r
- }\r
- }\r
- };\r
- in.accept(writer);\r
- }\r
- }\r
-\r
- private void addMethodDescriptor(String desc){\r
- Type returnType = Type.getReturnType(desc);\r
- Type[] args = Type.getArgumentTypes(desc);\r
- if(checkType(returnType)){\r
- add(getType(returnType));\r
- }\r
- for(Type arg: args){\r
- if(checkType(arg)){\r
- add(getType(arg));\r
- }\r
- }\r
- }\r
-\r
- private void addDescriptor(String desc){\r
- Type type = Type.getType(desc);\r
- if(checkType(type)){\r
- add(desc);\r
- }\r
- }\r
-\r
- private String getType(Type type){\r
- if(type.getSort() == Type.ARRAY){\r
- while(type.getSort() != Type.ARRAY){\r
- type = type.getElementType();\r
- }\r
- }\r
-\r
- if(type.getSort() == Type.OBJECT){\r
- return normalize(type.getClassName());\r
- }\r
-\r
- return null;\r
- }\r
-\r
- private boolean checkType(Type type){\r
- if(type.getSort() == Type.ARRAY){\r
- while(type.getSort() != Type.ARRAY){\r
- type = type.getElementType();\r
- }\r
- }\r
-\r
- if(type.getSort() == Type.OBJECT){\r
- String className = type.getClassName();\r
- if(getEnvironment().getWellknownClassManager().isWellKnownClass(className)){\r
- return true;\r
- }\r
- }\r
- return false;\r
- }\r
-\r
- private String normalize(String name){\r
- if(name.startsWith("L") && name.endsWith(";")){\r
- name = name.substring(1, name.length() - 1);\r
- }\r
- name = name.replace('/', '.');\r
-\r
- return name;\r
- }\r
-\r
- private void add(String name){\r
- addElement(new BirthmarkElement(normalize(name)));\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.uc;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
+
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.FieldVisitor;
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodAdapter;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Type;
+import org.objectweb.asm.signature.SignatureReader;
+import org.objectweb.asm.signature.SignatureWriter;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class UsedClassesBirthmarkExtractVisitor extends BirthmarkExtractVisitor{
+ public UsedClassesBirthmarkExtractVisitor(ClassVisitor visitor, Birthmark birthmark,
+ BirthmarkEnvironment environment){
+ super(visitor, birthmark, environment);
+ }
+
+ public void visit(int version, int access, String name, String signature,
+ String superName, String[] interfaces){
+ addSignatureClass(signature);
+
+ if(getEnvironment().getWellknownClassManager().isWellKnownClass(superName)){
+ add(superName);
+ }
+ for(String i: interfaces){
+ if(getEnvironment().getWellknownClassManager().isWellKnownClass(i)){
+ add(i);
+ }
+ }
+ }
+
+ public FieldVisitor visitField(int access, String name, String desc,
+ String signature, Object value){
+ FieldVisitor visitor = super.visitField(access, name, desc, signature, value);
+
+ addDescriptor(desc);
+ addSignatureClass(signature);
+
+ return visitor;
+ }
+
+ public MethodVisitor visitMethod(int access, String name, String desc,
+ String signature, String[] exceptions){
+ if(exceptions != null){
+ for(String exception: exceptions){
+ if(getEnvironment().getWellknownClassManager().isWellKnownClass(exception)){
+ add(exception);
+ }
+ }
+ }
+ addMethodDescriptor(desc);
+ addSignatureClass(signature);
+
+ MethodVisitor visitor = super.visitMethod(access, name, desc, signature, exceptions);
+
+ return new MethodAdapter(visitor){
+ public void visitTypeInsn(int opcode, String desc){
+ Type type = Type.getType("L" + desc + ";");
+ if(checkType(type)){
+ add(desc);
+ }
+ super.visitTypeInsn(opcode, desc);
+ }
+
+ public void visitTryCatchBlock(Label start, Label end, Label handle, String desc){
+ Type type = Type.getType("L" + desc + ";");
+ if(checkType(type)){
+ add(getType(type));
+ }
+ super.visitTryCatchBlock(start, end, handle, desc);
+ }
+
+ public void visitMultiANewArrayInsn(String desc, int dims){
+ Type type = Type.getType(desc);
+ if(checkType(type)){
+ add(getType(type));
+ }
+ super.visitMultiANewArrayInsn(desc, dims);
+ }
+
+ public void visitLocalVariable(String name, String desc, String signature,
+ Label start, Label end, int index){
+ if(checkType(Type.getType(desc))){
+ add(desc);
+ }
+ addSignatureClass(signature);
+
+ super.visitLocalVariable(name, desc, signature, start, end, index);
+ }
+
+ public void visitFieldInsn(int opcode, String owner, String name, String desc){
+ if(getEnvironment().getWellknownClassManager().isWellKnownClass(owner)){
+ add(owner);
+ }
+ addDescriptor(desc);
+ super.visitFieldInsn(opcode, owner, name, desc);
+ }
+ public void visitMethodInsn(int opcode, String owner, String name, String desc){
+ String className = normalize(owner);
+ if(getEnvironment().getWellknownClassManager().isWellKnownClass(className)){
+ add(className);
+ }
+ addMethodDescriptor(desc);
+ super.visitMethodInsn(opcode, owner, name, desc);
+ }
+ };
+ }
+
+ private void addSignatureClass(String signature){
+ if(signature != null){
+ SignatureReader in = new SignatureReader(signature);
+ SignatureWriter writer = new SignatureWriter(){
+ public void visitClassType(String classType){
+ if(getEnvironment().getWellknownClassManager().isWellKnownClass(classType)){
+ add(classType);
+ }
+ }
+ };
+ in.accept(writer);
+ }
+ }
+
+ private void addMethodDescriptor(String desc){
+ Type returnType = Type.getReturnType(desc);
+ Type[] args = Type.getArgumentTypes(desc);
+ if(checkType(returnType)){
+ add(getType(returnType));
+ }
+ for(Type arg: args){
+ if(checkType(arg)){
+ add(getType(arg));
+ }
+ }
+ }
+
+ private void addDescriptor(String desc){
+ Type type = Type.getType(desc);
+ if(checkType(type)){
+ add(desc);
+ }
+ }
+
+ private String getType(Type type){
+ if(type.getSort() == Type.ARRAY){
+ while(type.getSort() != Type.ARRAY){
+ type = type.getElementType();
+ }
+ }
+
+ if(type.getSort() == Type.OBJECT){
+ return normalize(type.getClassName());
+ }
+
+ return null;
+ }
+
+ private boolean checkType(Type type){
+ if(type.getSort() == Type.ARRAY){
+ while(type.getSort() != Type.ARRAY){
+ type = type.getElementType();
+ }
+ }
+
+ if(type.getSort() == Type.OBJECT){
+ String className = type.getClassName();
+ if(getEnvironment().getWellknownClassManager().isWellKnownClass(className)){
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private String normalize(String name){
+ if(name.startsWith("L") && name.endsWith(";")){
+ name = name.substring(1, name.length() - 1);
+ }
+ name = name.replace('/', '.');
+
+ return name;
+ }
+
+ private void add(String name){
+ addElement(new BirthmarkElement(normalize(name)));
+ }
+}
-package jp.naist.se.stigmata.birthmarks.uc;
+package jp.sourceforge.stigmata.birthmarks.uc;
/*
* $Id$
*/
-import jp.naist.se.stigmata.Birthmark;
-import jp.naist.se.stigmata.BirthmarkEnvironment;
-import jp.naist.se.stigmata.ExtractionUnit;
-import jp.naist.se.stigmata.birthmarks.ASMBirthmarkExtractor;
-import jp.naist.se.stigmata.birthmarks.BirthmarkExtractVisitor;
-import jp.naist.se.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.ExtractionUnit;
+import jp.sourceforge.stigmata.birthmarks.ASMBirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
import org.objectweb.asm.ClassWriter;
-package jp.naist.se.stigmata.birthmarks.uc;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkComparator;\r
-import jp.naist.se.stigmata.BirthmarkExtractor;\r
-import jp.naist.se.stigmata.birthmarks.AbstractBirthmarkService;\r
-import jp.naist.se.stigmata.birthmarks.comparators.LogicalAndBirthmarkComparator;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class UsedClassesBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{\r
- private BirthmarkComparator comparator = new LogicalAndBirthmarkComparator(this);\r
- private BirthmarkExtractor extractor = new UsedClassesBirthmarkExtractor(this);\r
-\r
- public String getType(){\r
- return "uc";\r
- }\r
-\r
- public String getDefaultDescription(){\r
- return "Set of used classes in target class.";\r
- }\r
-\r
- public BirthmarkExtractor getExtractor(){\r
- return extractor;\r
- }\r
-\r
- public BirthmarkComparator getComparator(){\r
- return comparator;\r
- }\r
-\r
- public boolean isExpert(){\r
- return false;\r
- }\r
-\r
- public boolean isUserDefined(){\r
- return false;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.uc;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkComparator;
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+import jp.sourceforge.stigmata.birthmarks.AbstractBirthmarkService;
+import jp.sourceforge.stigmata.birthmarks.comparators.LogicalAndBirthmarkComparator;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class UsedClassesBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{
+ private BirthmarkComparator comparator = new LogicalAndBirthmarkComparator(this);
+ private BirthmarkExtractor extractor = new UsedClassesBirthmarkExtractor(this);
+
+ public String getType(){
+ return "uc";
+ }
+
+ public String getDefaultDescription(){
+ return "Set of used classes in target class.";
+ }
+
+ public BirthmarkExtractor getExtractor(){
+ return extractor;
+ }
+
+ public BirthmarkComparator getComparator(){
+ return comparator;
+ }
+
+ public boolean isExpert(){
+ return false;
+ }
+
+ public boolean isUserDefined(){
+ return false;
+ }
+}
-package jp.naist.se.stigmata.event;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-/**\r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkEngineAdapter implements BirthmarkEngineListener{\r
-\r
- public void operationDone(BirthmarkEngineEvent e){\r
- }\r
-\r
- public void operationStart(BirthmarkEngineEvent e){\r
- }\r
-\r
- public void subOperationDone(BirthmarkEngineEvent e){\r
- }\r
-\r
- public void subOperationStart(BirthmarkEngineEvent e){\r
- }\r
-}\r
+package jp.sourceforge.stigmata.event;
+
+/*
+ * $Id$
+ */
+
+/**
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkEngineAdapter implements BirthmarkEngineListener{
+
+ public void operationDone(BirthmarkEngineEvent e){
+ }
+
+ public void operationStart(BirthmarkEngineEvent e){
+ }
+
+ public void subOperationDone(BirthmarkEngineEvent e){
+ }
+
+ public void subOperationStart(BirthmarkEngineEvent e){
+ }
+}
-package jp.naist.se.stigmata.event;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.EventObject;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkEngineEvent extends EventObject{\r
- private static final long serialVersionUID = -1260793588721638917L;\r
-\r
- private OperationType type;\r
- private OperationStage stage;\r
- private WarningMessages message;\r
-\r
- public BirthmarkEngineEvent(OperationStage stage, OperationType type, WarningMessages message){\r
- super(type.ordinal());\r
- this.type = type;\r
- this.stage = stage;\r
- this.message = message;\r
- }\r
-\r
- public OperationStage getStage(){\r
- return stage;\r
- }\r
-\r
- public OperationType getType(){\r
- return type;\r
- }\r
-\r
- public WarningMessages getMessage(){\r
- return message;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.event;
+
+/*
+ * $Id$
+ */
+
+import java.util.EventObject;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkEngineEvent extends EventObject{
+ private static final long serialVersionUID = -1260793588721638917L;
+
+ private OperationType type;
+ private OperationStage stage;
+ private WarningMessages message;
+
+ public BirthmarkEngineEvent(OperationStage stage, OperationType type, WarningMessages message){
+ super(type.ordinal());
+ this.type = type;
+ this.stage = stage;
+ this.message = message;
+ }
+
+ public OperationStage getStage(){
+ return stage;
+ }
+
+ public OperationType getType(){
+ return type;
+ }
+
+ public WarningMessages getMessage(){
+ return message;
+ }
+}
-package jp.naist.se.stigmata.event;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.EventListener;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public interface BirthmarkEngineListener extends EventListener{\r
- public void operationStart(BirthmarkEngineEvent e);\r
-\r
- public void subOperationStart(BirthmarkEngineEvent e);\r
-\r
- public void subOperationDone(BirthmarkEngineEvent e);\r
-\r
- public void operationDone(BirthmarkEngineEvent e);\r
-}\r
+package jp.sourceforge.stigmata.event;
+
+/*
+ * $Id$
+ */
+
+import java.util.EventListener;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public interface BirthmarkEngineListener extends EventListener{
+ public void operationStart(BirthmarkEngineEvent e);
+
+ public void subOperationStart(BirthmarkEngineEvent e);
+
+ public void subOperationDone(BirthmarkEngineEvent e);
+
+ public void operationDone(BirthmarkEngineEvent e);
+}
-package jp.naist.se.stigmata.event;\r
-\r
-public enum OperationStage{\r
- OPERATION_START,\r
- SUB_OPERATION_START,\r
- SUB_OPERATION_DONE,\r
- OPERATION_DONE,\r
-}\r
+package jp.sourceforge.stigmata.event;
+
+public enum OperationStage{
+ OPERATION_START,
+ SUB_OPERATION_START,
+ SUB_OPERATION_DONE,
+ OPERATION_DONE,
+}
-package jp.naist.se.stigmata.event;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public enum OperationType{\r
- CONFIGURATION,\r
- EXTRACT_BIRTHMARKS,\r
- COMPARE_BIRTHMARKS,\r
- COMPARE_DETAIL_BIRTHMARKS,\r
- FILTER_BIRTHMARKS,\r
- CREATE_ENVIRONMENT,\r
-}\r
+package jp.sourceforge.stigmata.event;
+
+/*
+ * $Id$
+ */
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public enum OperationType{
+ CONFIGURATION,
+ EXTRACT_BIRTHMARKS,
+ COMPARE_BIRTHMARKS,
+ COMPARE_DETAIL_BIRTHMARKS,
+ FILTER_BIRTHMARKS,
+ CREATE_ENVIRONMENT,
+}
-package jp.naist.se.stigmata.event;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.HashMap;\r
-import java.util.Iterator;\r
-import java.util.Map;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class WarningMessages{\r
- private OperationType type;\r
- private Map<Exception, String> messages = new HashMap<Exception, String>();\r
-\r
- public WarningMessages(OperationType type){\r
- this.type = type;\r
- }\r
-\r
- public void addMessage(Exception e, String string){\r
- messages.put(e, string);\r
- }\r
-\r
- public Iterator<Exception> exceptions(){\r
- return messages.keySet().iterator();\r
- }\r
-\r
- public String getString(Exception e){\r
- return messages.get(e);\r
- }\r
-\r
- public OperationType getType(){\r
- return type;\r
- }\r
-\r
- public void setType(OperationType type){\r
- this.type = type;\r
- }\r
-\r
- public int getWarningCount(){\r
- return messages.size();\r
- }\r
-}\r
+package jp.sourceforge.stigmata.event;
+
+/*
+ * $Id$
+ */
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class WarningMessages{
+ private OperationType type;
+ private Map<Exception, String> messages = new HashMap<Exception, String>();
+
+ public WarningMessages(OperationType type){
+ this.type = type;
+ }
+
+ public void addMessage(Exception e, String string){
+ messages.put(e, string);
+ }
+
+ public Iterator<Exception> exceptions(){
+ return messages.keySet().iterator();
+ }
+
+ public String getString(Exception e){
+ return messages.get(e);
+ }
+
+ public OperationType getType(){
+ return type;
+ }
+
+ public void setType(OperationType type){
+ this.type = type;
+ }
+
+ public int getWarningCount(){
+ return messages.size();
+ }
+}
-package jp.naist.se.stigmata.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.ComparisonPairFilter;\r
-import jp.naist.se.stigmata.spi.ComparisonPairFilterSpi;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public abstract class AbstractComparisonPairFilter implements ComparisonPairFilter{\r
- private ComparisonPairFilterSpi service;\r
- private Criterion criterion = Criterion.EQUALS_AS;\r
-\r
- public AbstractComparisonPairFilter(ComparisonPairFilterSpi service){\r
- this.service = service;\r
- }\r
-\r
- public ComparisonPairFilterSpi getService(){\r
- return service;\r
- }\r
-\r
- public Criterion getCriterion(){\r
- return criterion;\r
- }\r
-\r
- public void setCriterion(Criterion criterion){\r
- if(!isAcceptable(criterion)){\r
- throw new IllegalArgumentException("illegal criterion: "\r
- + criterion + ": accepts only " + getAcceptableCriteria());\r
- }\r
- this.criterion = criterion;\r
- }\r
-\r
- public boolean isAcceptable(Criterion criterion){\r
- Criterion[] criteria = getAcceptableCriteria();\r
- for(int i = 0; i < criteria.length; i++){\r
- if(criteria[i] == criterion){\r
- return true;\r
- }\r
- }\r
- return false;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.filter;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.ComparisonPairFilter;
+import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public abstract class AbstractComparisonPairFilter implements ComparisonPairFilter{
+ private ComparisonPairFilterSpi service;
+ private Criterion criterion = Criterion.EQUALS_AS;
+
+ public AbstractComparisonPairFilter(ComparisonPairFilterSpi service){
+ this.service = service;
+ }
+
+ public ComparisonPairFilterSpi getService(){
+ return service;
+ }
+
+ public Criterion getCriterion(){
+ return criterion;
+ }
+
+ public void setCriterion(Criterion criterion){
+ if(!isAcceptable(criterion)){
+ throw new IllegalArgumentException("illegal criterion: "
+ + criterion + ": accepts only " + getAcceptableCriteria());
+ }
+ this.criterion = criterion;
+ }
+
+ public boolean isAcceptable(Criterion criterion){
+ Criterion[] criteria = getAcceptableCriteria();
+ for(int i = 0; i < criteria.length; i++){
+ if(criteria[i] == criterion){
+ return true;
+ }
+ }
+ return false;
+ }
+}
-package jp.naist.se.stigmata.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.Locale;\r
-\r
-import jp.naist.se.stigmata.spi.AbstractServiceProvider;\r
-import jp.naist.se.stigmata.spi.ComparisonPairFilterSpi;\r
-import jp.naist.se.stigmata.utils.LocalizedDescriptionManager;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-abstract class AbstractComparisonPairFilterService extends AbstractServiceProvider implements ComparisonPairFilterSpi{\r
- public String getDescription(Locale locale){\r
- return LocalizedDescriptionManager.getInstance().getDescription(\r
- locale, getFilterName(), LocalizedDescriptionManager.ServiceCategory.filter\r
- );\r
- }\r
-\r
- public String getDisplayFilterName(){\r
- return getDisplayFilterName(Locale.getDefault());\r
- }\r
-\r
- public String getDisplayFilterName(Locale locale){\r
- return LocalizedDescriptionManager.getInstance().getDisplayType(\r
- locale, getFilterName(), LocalizedDescriptionManager.ServiceCategory.filter\r
- );\r
- }\r
-}\r
+package jp.sourceforge.stigmata.filter;
+
+/*
+ * $Id$
+ */
+
+import java.util.Locale;
+
+import jp.sourceforge.stigmata.spi.AbstractServiceProvider;
+import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
+import jp.sourceforge.stigmata.utils.LocalizedDescriptionManager;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+abstract class AbstractComparisonPairFilterService extends AbstractServiceProvider implements ComparisonPairFilterSpi{
+ public String getDescription(Locale locale){
+ return LocalizedDescriptionManager.getInstance().getDescription(
+ locale, getFilterName(), LocalizedDescriptionManager.ServiceCategory.filter
+ );
+ }
+
+ public String getDisplayFilterName(){
+ return getDisplayFilterName(Locale.getDefault());
+ }
+
+ public String getDisplayFilterName(Locale locale){
+ return LocalizedDescriptionManager.getInstance().getDisplayType(
+ locale, getFilterName(), LocalizedDescriptionManager.ServiceCategory.filter
+ );
+ }
+}
-package jp.naist.se.stigmata.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import jp.naist.se.stigmata.ComparisonPair;\r
-import jp.naist.se.stigmata.spi.ComparisonPairFilterSpi;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkElementCountComparisonPairFilter extends AbstractComparisonPairFilter{\r
- private static final List<Criterion> CRITERIA = new ArrayList<Criterion>();\r
-\r
- private int threshold = 0;\r
- private FilterTarget target;\r
- private String birthmarkType;\r
-\r
- static{\r
- CRITERIA.add(Criterion.GREATER_EQUALS);\r
- CRITERIA.add(Criterion.GREATER_THAN);\r
- CRITERIA.add(Criterion.LESS_EQUALS);\r
- CRITERIA.add(Criterion.LESS_THAN);\r
- CRITERIA.add(Criterion.EQUALS_AS);\r
- CRITERIA.add(Criterion.NOT_EQUALS_AS);\r
- }\r
-\r
- public BirthmarkElementCountComparisonPairFilter(ComparisonPairFilterSpi service){\r
- super(service);\r
- }\r
-\r
- public String getBirthmarkType(){\r
- return birthmarkType;\r
- }\r
-\r
- public void setBirthmarkType(String birthmarkType){\r
- this.birthmarkType = birthmarkType;\r
- }\r
-\r
- public static Criterion[] getValidCriteria(){\r
- return CRITERIA.toArray(new Criterion[CRITERIA.size()]);\r
- }\r
-\r
- public Criterion[] getAcceptableCriteria(){\r
- return getValidCriteria();\r
- }\r
-\r
- private boolean isFilteredTwo(ComparisonPair pair){\r
- boolean flag = false;\r
-\r
- String type = getBirthmarkType();\r
- if(pair.getTarget1().hasBirthmark(type) && pair.getTarget2().hasBirthmark(type)){\r
- int elem1 = pair.getTarget1().getBirthmark(type).getElementCount();\r
- int elem2 = pair.getTarget2().getBirthmark(type).getElementCount();\r
-\r
- switch(getCriterion()){\r
- case GREATER_EQUALS:\r
- flag = (target == FilterTarget.BOTH_TARGETS && elem1 >= threshold && elem2 >= threshold) ||\r
- (target == FilterTarget.ONE_OF_TARGETS && (elem1 >= threshold || elem2 >= threshold));\r
- break;\r
- case GREATER_THAN:\r
- flag = (target == FilterTarget.BOTH_TARGETS && elem1 > threshold && elem2 > threshold) ||\r
- (target == FilterTarget.ONE_OF_TARGETS && (elem1 > threshold || elem2 > threshold));\r
- break;\r
- case LESS_EQUALS:\r
- flag = (target == FilterTarget.BOTH_TARGETS && elem1 <= threshold && elem2 <= threshold) ||\r
- (target == FilterTarget.ONE_OF_TARGETS && (elem1 <= threshold || elem2 <= threshold));\r
- break;\r
- case LESS_THAN:\r
- flag = (target == FilterTarget.BOTH_TARGETS && elem1 < threshold && elem2 < threshold) ||\r
- (target == FilterTarget.ONE_OF_TARGETS && (elem1 < threshold || elem2 < threshold));\r
- break;\r
- case EQUALS_AS:\r
- flag = (target == FilterTarget.BOTH_TARGETS && elem1 == threshold && elem2 == threshold) ||\r
- (target == FilterTarget.ONE_OF_TARGETS && (elem1 == threshold || elem2 == threshold));\r
- break;\r
- case NOT_EQUALS_AS:\r
- flag = (target == FilterTarget.BOTH_TARGETS && elem1 != threshold && elem2 != threshold) ||\r
- (target == FilterTarget.ONE_OF_TARGETS && (elem1 != threshold || elem2 != threshold));\r
- break;\r
- default:\r
- flag = false;\r
- break;\r
- }\r
- }\r
- return flag;\r
- }\r
-\r
- public boolean isFiltered(ComparisonPair pair){\r
- if(target == FilterTarget.BOTH_TARGETS || target == FilterTarget.ONE_OF_TARGETS){\r
- return isFilteredTwo(pair);\r
- }\r
- boolean flag = false;\r
- String type = getBirthmarkType();\r
- if(pair.getTarget1().hasBirthmark(type) && pair.getTarget2().hasBirthmark(type)){\r
- int total = 0;\r
- int threshold = getThreshold();\r
- if(target == FilterTarget.TARGET_1){\r
- total = pair.getTarget1().getBirthmark(type).getElementCount();\r
- }\r
- if(target == FilterTarget.TARGET_2){\r
- total = pair.getTarget2().getBirthmark(type).getElementCount();\r
- }\r
- switch(getCriterion()){\r
- case GREATER_EQUALS:\r
- flag = total >= threshold;\r
- break;\r
- case GREATER_THAN:\r
- flag = total > threshold;\r
- break;\r
- case LESS_EQUALS:\r
- flag = total <= threshold;\r
- break;\r
- case LESS_THAN:\r
- flag = total < threshold;\r
- break;\r
- case EQUALS_AS:\r
- flag = total == threshold;\r
- break;\r
- case NOT_EQUALS_AS:\r
- flag = total != threshold;\r
- break;\r
- default:\r
- flag = false;\r
- break;\r
- }\r
- }\r
- return flag;\r
- }\r
-\r
- public int getThreshold(){\r
- return threshold;\r
- }\r
-\r
- public void setThreshold(int threshold){\r
- if(threshold < 0){\r
- throw new IllegalArgumentException("threshold must be positive value: " + threshold);\r
- }\r
- this.threshold = threshold;\r
- }\r
-\r
- public FilterTarget getTarget(){\r
- return target;\r
- }\r
-\r
- public void setTarget(FilterTarget target){\r
- this.target = target;\r
- }\r
-\r
- public String toString(){\r
- StringBuilder sb = new StringBuilder();\r
- switch(getTarget()){\r
- case TARGET_1: sb.append("target1"); break;\r
- case TARGET_2: sb.append("target2"); break;\r
- case BOTH_TARGETS: sb.append("(target1&target2)"); break;\r
- case ONE_OF_TARGETS: sb.append("(target1|target2)");\r
- }\r
- sb.append(".").append(birthmarkType);\r
- sb.append(".size");\r
- switch(getCriterion()){\r
- case GREATER_EQUALS: sb.append(" >= "); break;\r
- case GREATER_THAN: sb.append(" > "); break;\r
- case LESS_EQUALS: sb.append(" <= "); break;\r
- case LESS_THAN: sb.append(" < "); break;\r
- case EQUALS_AS: sb.append(" == "); break;\r
- case NOT_EQUALS_AS: sb.append(" != "); break;\r
- }\r
- sb.append(Integer.toString(getThreshold()));\r
-\r
- return new String(sb);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.filter;
+
+/*
+ * $Id$
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import jp.sourceforge.stigmata.ComparisonPair;
+import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkElementCountComparisonPairFilter extends AbstractComparisonPairFilter{
+ private static final List<Criterion> CRITERIA = new ArrayList<Criterion>();
+
+ private int threshold = 0;
+ private FilterTarget target;
+ private String birthmarkType;
+
+ static{
+ CRITERIA.add(Criterion.GREATER_EQUALS);
+ CRITERIA.add(Criterion.GREATER_THAN);
+ CRITERIA.add(Criterion.LESS_EQUALS);
+ CRITERIA.add(Criterion.LESS_THAN);
+ CRITERIA.add(Criterion.EQUALS_AS);
+ CRITERIA.add(Criterion.NOT_EQUALS_AS);
+ }
+
+ public BirthmarkElementCountComparisonPairFilter(ComparisonPairFilterSpi service){
+ super(service);
+ }
+
+ public String getBirthmarkType(){
+ return birthmarkType;
+ }
+
+ public void setBirthmarkType(String birthmarkType){
+ this.birthmarkType = birthmarkType;
+ }
+
+ public static Criterion[] getValidCriteria(){
+ return CRITERIA.toArray(new Criterion[CRITERIA.size()]);
+ }
+
+ public Criterion[] getAcceptableCriteria(){
+ return getValidCriteria();
+ }
+
+ private boolean isFilteredTwo(ComparisonPair pair){
+ boolean flag = false;
+
+ String type = getBirthmarkType();
+ if(pair.getTarget1().hasBirthmark(type) && pair.getTarget2().hasBirthmark(type)){
+ int elem1 = pair.getTarget1().getBirthmark(type).getElementCount();
+ int elem2 = pair.getTarget2().getBirthmark(type).getElementCount();
+
+ switch(getCriterion()){
+ case GREATER_EQUALS:
+ flag = (target == FilterTarget.BOTH_TARGETS && elem1 >= threshold && elem2 >= threshold) ||
+ (target == FilterTarget.ONE_OF_TARGETS && (elem1 >= threshold || elem2 >= threshold));
+ break;
+ case GREATER_THAN:
+ flag = (target == FilterTarget.BOTH_TARGETS && elem1 > threshold && elem2 > threshold) ||
+ (target == FilterTarget.ONE_OF_TARGETS && (elem1 > threshold || elem2 > threshold));
+ break;
+ case LESS_EQUALS:
+ flag = (target == FilterTarget.BOTH_TARGETS && elem1 <= threshold && elem2 <= threshold) ||
+ (target == FilterTarget.ONE_OF_TARGETS && (elem1 <= threshold || elem2 <= threshold));
+ break;
+ case LESS_THAN:
+ flag = (target == FilterTarget.BOTH_TARGETS && elem1 < threshold && elem2 < threshold) ||
+ (target == FilterTarget.ONE_OF_TARGETS && (elem1 < threshold || elem2 < threshold));
+ break;
+ case EQUALS_AS:
+ flag = (target == FilterTarget.BOTH_TARGETS && elem1 == threshold && elem2 == threshold) ||
+ (target == FilterTarget.ONE_OF_TARGETS && (elem1 == threshold || elem2 == threshold));
+ break;
+ case NOT_EQUALS_AS:
+ flag = (target == FilterTarget.BOTH_TARGETS && elem1 != threshold && elem2 != threshold) ||
+ (target == FilterTarget.ONE_OF_TARGETS && (elem1 != threshold || elem2 != threshold));
+ break;
+ default:
+ flag = false;
+ break;
+ }
+ }
+ return flag;
+ }
+
+ public boolean isFiltered(ComparisonPair pair){
+ if(target == FilterTarget.BOTH_TARGETS || target == FilterTarget.ONE_OF_TARGETS){
+ return isFilteredTwo(pair);
+ }
+ boolean flag = false;
+ String type = getBirthmarkType();
+ if(pair.getTarget1().hasBirthmark(type) && pair.getTarget2().hasBirthmark(type)){
+ int total = 0;
+ int threshold = getThreshold();
+ if(target == FilterTarget.TARGET_1){
+ total = pair.getTarget1().getBirthmark(type).getElementCount();
+ }
+ if(target == FilterTarget.TARGET_2){
+ total = pair.getTarget2().getBirthmark(type).getElementCount();
+ }
+ switch(getCriterion()){
+ case GREATER_EQUALS:
+ flag = total >= threshold;
+ break;
+ case GREATER_THAN:
+ flag = total > threshold;
+ break;
+ case LESS_EQUALS:
+ flag = total <= threshold;
+ break;
+ case LESS_THAN:
+ flag = total < threshold;
+ break;
+ case EQUALS_AS:
+ flag = total == threshold;
+ break;
+ case NOT_EQUALS_AS:
+ flag = total != threshold;
+ break;
+ default:
+ flag = false;
+ break;
+ }
+ }
+ return flag;
+ }
+
+ public int getThreshold(){
+ return threshold;
+ }
+
+ public void setThreshold(int threshold){
+ if(threshold < 0){
+ throw new IllegalArgumentException("threshold must be positive value: " + threshold);
+ }
+ this.threshold = threshold;
+ }
+
+ public FilterTarget getTarget(){
+ return target;
+ }
+
+ public void setTarget(FilterTarget target){
+ this.target = target;
+ }
+
+ public String toString(){
+ StringBuilder sb = new StringBuilder();
+ switch(getTarget()){
+ case TARGET_1: sb.append("target1"); break;
+ case TARGET_2: sb.append("target2"); break;
+ case BOTH_TARGETS: sb.append("(target1&target2)"); break;
+ case ONE_OF_TARGETS: sb.append("(target1|target2)");
+ }
+ sb.append(".").append(birthmarkType);
+ sb.append(".size");
+ switch(getCriterion()){
+ case GREATER_EQUALS: sb.append(" >= "); break;
+ case GREATER_THAN: sb.append(" > "); break;
+ case LESS_EQUALS: sb.append(" <= "); break;
+ case LESS_THAN: sb.append(" < "); break;
+ case EQUALS_AS: sb.append(" == "); break;
+ case NOT_EQUALS_AS: sb.append(" != "); break;
+ }
+ sb.append(Integer.toString(getThreshold()));
+
+ return new String(sb);
+ }
+}
-package jp.naist.se.stigmata.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.ComparisonPairFilter;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkElementCountComparisonPairFilterService extends AbstractComparisonPairFilterService{\r
-\r
- public ComparisonPairFilter getFilter(){\r
- return new BirthmarkElementCountComparisonPairFilter(this);\r
- }\r
-\r
- public String getFilterClassName(){\r
- return BirthmarkElementCountComparisonPairFilter.class.getName();\r
- }\r
-\r
- public String getFilterName(){\r
- return "elementcount";\r
- }\r
-}\r
+package jp.sourceforge.stigmata.filter;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.ComparisonPairFilter;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkElementCountComparisonPairFilterService extends AbstractComparisonPairFilterService{
+
+ public ComparisonPairFilter getFilter(){
+ return new BirthmarkElementCountComparisonPairFilter(this);
+ }
+
+ public String getFilterClassName(){
+ return BirthmarkElementCountComparisonPairFilter.class.getName();
+ }
+
+ public String getFilterName(){
+ return "elementcount";
+ }
+}
-package jp.naist.se.stigmata.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.lang.reflect.InvocationTargetException;\r
-import java.util.ArrayList;\r
-import java.util.HashMap;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.ComparisonPairFilter;\r
-import jp.naist.se.stigmata.ComparisonPairFilterSet;\r
-import jp.naist.se.stigmata.spi.ComparisonPairFilterSpi;\r
-\r
-import org.apache.commons.beanutils.BeanUtils;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ComparisonPairFilterManager{\r
- private Map<String, ComparisonPairFilterSpi> services = new HashMap<String, ComparisonPairFilterSpi>();\r
- private Map<String, ComparisonPairFilterSet> filters = new HashMap<String, ComparisonPairFilterSet>();\r
- private ComparisonPairFilterManager parent;\r
-\r
- public ComparisonPairFilterManager(BirthmarkEnvironment env, ComparisonPairFilterManager parent){\r
- this.parent = parent;\r
- for(Iterator<ComparisonPairFilterSpi> i = env.lookupProviders(ComparisonPairFilterSpi.class); i.hasNext(); ){\r
- ComparisonPairFilterSpi service = i.next();\r
- if(getService(service.getFilterName()) != null){\r
- services.put(service.getFilterName(), service);\r
- }\r
- }\r
- }\r
-\r
- public ComparisonPairFilterManager(BirthmarkEnvironment env){\r
- for(Iterator<ComparisonPairFilterSpi> i = env.lookupProviders(ComparisonPairFilterSpi.class); i.hasNext(); ){\r
- ComparisonPairFilterSpi service = i.next();\r
- services.put(service.getFilterName(), service);\r
- }\r
- }\r
-\r
- public synchronized ComparisonPairFilterSet[] getFilterSets(){\r
- List<ComparisonPairFilterSet> list = new ArrayList<ComparisonPairFilterSet>();\r
- if(parent != null){\r
- for(ComparisonPairFilterSet fs: parent.getFilterSets()){\r
- if(filters.get(fs.getName()) == null){\r
- list.add(fs);\r
- }\r
- }\r
- }\r
- list.addAll(filters.values());\r
- return list.toArray(new ComparisonPairFilterSet[list.size()]);\r
- }\r
-\r
- public synchronized ComparisonPairFilterSet[] getFilterSets(String[] names){\r
- List<ComparisonPairFilterSet> list = new ArrayList<ComparisonPairFilterSet>();\r
- for(int i = 0; i < names.length; i++){\r
- list.add(getFilterSet(names[i]));\r
- }\r
- return list.toArray(new ComparisonPairFilterSet[list.size()]);\r
- }\r
-\r
- public void addFilterSet(ComparisonPairFilterSet filterset){\r
- filters.put(filterset.getName(), filterset);\r
- }\r
-\r
- public void removeFilterSet(String filterSetName){\r
- if(filters.get(filterSetName) != null){\r
- filters.remove(filterSetName);\r
- }\r
- else{\r
- if(parent != null && parent.getFilterSet(filterSetName) != null){\r
- filters.remove(filterSetName);\r
- }\r
- }\r
- }\r
-\r
- public ComparisonPairFilterSet getFilterSet(String filterSetName){\r
- ComparisonPairFilterSet filter = filters.get(filterSetName);\r
- if(filter == null && parent != null){\r
- filter = parent.getFilterSet(filterSetName);\r
- }\r
- return filter;\r
- }\r
-\r
- public ComparisonPairFilter buildFilter(String filterName, String criterion, Map<String, String> values){\r
- Criterion c = Criterion.valueOf(criterion);\r
- if(c != null){\r
- return buildFilter(filterName, c, values);\r
- }\r
- throw new IllegalArgumentException("criterion not found: " + criterion);\r
- }\r
-\r
- public ComparisonPairFilter buildFilter(String filterName, Criterion criterion, Map<String, String> values){\r
- ComparisonPairFilter filter = createFilter(filterName);\r
- if(filter != null){\r
- filter.setCriterion(criterion);\r
- for(Map.Entry<String, String> entry: values.entrySet()){\r
- try{\r
- Object value = entry.getValue();\r
- if(entry.getKey().equals("target")){\r
- value = FilterTarget.valueOf(String.valueOf(value));\r
- }\r
- BeanUtils.setProperty(filter, entry.getKey(), value);\r
- }catch(IllegalAccessException e){\r
- e.printStackTrace();\r
- filter = null;\r
- }catch(InvocationTargetException e){\r
- e.printStackTrace();\r
- filter = null;\r
- }\r
- }\r
- }\r
- return filter;\r
- }\r
-\r
- public ComparisonPairFilter createFilter(String filterName){\r
- if(hasService(filterName)){\r
- return getService(filterName).getFilter();\r
- }\r
- return null;\r
- }\r
-\r
- public ComparisonPairFilterSpi removeService(String name){\r
- if(parent != null && parent.hasService(name)){\r
- parent.removeService(name);\r
- }\r
- return services.remove(name);\r
- }\r
-\r
- public void addService(ComparisonPairFilterSpi service){\r
- if(parent == null || parent.getService(service.getFilterName()) == null){\r
- services.put(service.getFilterName(), service);\r
- }\r
- }\r
-\r
- public boolean hasService(String name){\r
- return (parent != null && parent.hasService(name)) || services.get(name) != null;\r
- }\r
-\r
- public ComparisonPairFilterSpi getService(String name){\r
- ComparisonPairFilterSpi service = null;\r
- if(parent != null){\r
- service = parent.getService(name);\r
- }\r
- if(service == null){\r
- service = services.get(name);\r
- }\r
- return service;\r
- }\r
-\r
-}\r
+package jp.sourceforge.stigmata.filter;
+
+/*
+ * $Id$
+ */
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.ComparisonPairFilter;
+import jp.sourceforge.stigmata.ComparisonPairFilterSet;
+import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
+
+import org.apache.commons.beanutils.BeanUtils;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ComparisonPairFilterManager{
+ private Map<String, ComparisonPairFilterSpi> services = new HashMap<String, ComparisonPairFilterSpi>();
+ private Map<String, ComparisonPairFilterSet> filters = new HashMap<String, ComparisonPairFilterSet>();
+ private ComparisonPairFilterManager parent;
+
+ public ComparisonPairFilterManager(BirthmarkEnvironment env, ComparisonPairFilterManager parent){
+ this.parent = parent;
+ for(Iterator<ComparisonPairFilterSpi> i = env.lookupProviders(ComparisonPairFilterSpi.class); i.hasNext(); ){
+ ComparisonPairFilterSpi service = i.next();
+ if(getService(service.getFilterName()) != null){
+ services.put(service.getFilterName(), service);
+ }
+ }
+ }
+
+ public ComparisonPairFilterManager(BirthmarkEnvironment env){
+ for(Iterator<ComparisonPairFilterSpi> i = env.lookupProviders(ComparisonPairFilterSpi.class); i.hasNext(); ){
+ ComparisonPairFilterSpi service = i.next();
+ services.put(service.getFilterName(), service);
+ }
+ }
+
+ public synchronized ComparisonPairFilterSet[] getFilterSets(){
+ List<ComparisonPairFilterSet> list = new ArrayList<ComparisonPairFilterSet>();
+ if(parent != null){
+ for(ComparisonPairFilterSet fs: parent.getFilterSets()){
+ if(filters.get(fs.getName()) == null){
+ list.add(fs);
+ }
+ }
+ }
+ list.addAll(filters.values());
+ return list.toArray(new ComparisonPairFilterSet[list.size()]);
+ }
+
+ public synchronized ComparisonPairFilterSet[] getFilterSets(String[] names){
+ List<ComparisonPairFilterSet> list = new ArrayList<ComparisonPairFilterSet>();
+ for(int i = 0; i < names.length; i++){
+ list.add(getFilterSet(names[i]));
+ }
+ return list.toArray(new ComparisonPairFilterSet[list.size()]);
+ }
+
+ public void addFilterSet(ComparisonPairFilterSet filterset){
+ filters.put(filterset.getName(), filterset);
+ }
+
+ public void removeFilterSet(String filterSetName){
+ if(filters.get(filterSetName) != null){
+ filters.remove(filterSetName);
+ }
+ else{
+ if(parent != null && parent.getFilterSet(filterSetName) != null){
+ filters.remove(filterSetName);
+ }
+ }
+ }
+
+ public ComparisonPairFilterSet getFilterSet(String filterSetName){
+ ComparisonPairFilterSet filter = filters.get(filterSetName);
+ if(filter == null && parent != null){
+ filter = parent.getFilterSet(filterSetName);
+ }
+ return filter;
+ }
+
+ public ComparisonPairFilter buildFilter(String filterName, String criterion, Map<String, String> values){
+ Criterion c = Criterion.valueOf(criterion);
+ if(c != null){
+ return buildFilter(filterName, c, values);
+ }
+ throw new IllegalArgumentException("criterion not found: " + criterion);
+ }
+
+ public ComparisonPairFilter buildFilter(String filterName, Criterion criterion, Map<String, String> values){
+ ComparisonPairFilter filter = createFilter(filterName);
+ if(filter != null){
+ filter.setCriterion(criterion);
+ for(Map.Entry<String, String> entry: values.entrySet()){
+ try{
+ Object value = entry.getValue();
+ if(entry.getKey().equals("target")){
+ value = FilterTarget.valueOf(String.valueOf(value));
+ }
+ BeanUtils.setProperty(filter, entry.getKey(), value);
+ }catch(IllegalAccessException e){
+ e.printStackTrace();
+ filter = null;
+ }catch(InvocationTargetException e){
+ e.printStackTrace();
+ filter = null;
+ }
+ }
+ }
+ return filter;
+ }
+
+ public ComparisonPairFilter createFilter(String filterName){
+ if(hasService(filterName)){
+ return getService(filterName).getFilter();
+ }
+ return null;
+ }
+
+ public ComparisonPairFilterSpi removeService(String name){
+ if(parent != null && parent.hasService(name)){
+ parent.removeService(name);
+ }
+ return services.remove(name);
+ }
+
+ public void addService(ComparisonPairFilterSpi service){
+ if(parent == null || parent.getService(service.getFilterName()) == null){
+ services.put(service.getFilterName(), service);
+ }
+ }
+
+ public boolean hasService(String name){
+ return (parent != null && parent.hasService(name)) || services.get(name) != null;
+ }
+
+ public ComparisonPairFilterSpi getService(String name){
+ ComparisonPairFilterSpi service = null;
+ if(parent != null){
+ service = parent.getService(name);
+ }
+ if(service == null){
+ service = services.get(name);
+ }
+ return service;
+ }
+
+}
-package jp.naist.se.stigmata.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-\r
-/**\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public enum Criterion{\r
- LESS_THAN,\r
- LESS_EQUALS,\r
- GREATER_THAN,\r
- GREATER_EQUALS,\r
- EQUALS_AS,\r
- NOT_EQUALS_AS,\r
- STARTS_WITH,\r
- NOT_STARTS_WITH,\r
- ENDS_WITH,\r
- NOT_ENDS_WITH,\r
- MATCH,\r
- NOT_MATCH;\r
-}\r
+package jp.sourceforge.stigmata.filter;
+
+/*
+ * $Id$
+ */
+
+
+/**
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public enum Criterion{
+ LESS_THAN,
+ LESS_EQUALS,
+ GREATER_THAN,
+ GREATER_EQUALS,
+ EQUALS_AS,
+ NOT_EQUALS_AS,
+ STARTS_WITH,
+ NOT_STARTS_WITH,
+ ENDS_WITH,
+ NOT_ENDS_WITH,
+ MATCH,
+ NOT_MATCH;
+}
-package jp.naist.se.stigmata.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-/**\r
- * This enum represents filter target.\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public enum FilterTarget{\r
- TARGET_1, TARGET_2, BOTH_TARGETS, ONE_OF_TARGETS,\r
+package jp.sourceforge.stigmata.filter;
+
+/*
+ * $Id$
+ */
+
+/**
+ * This enum represents filter target.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public enum FilterTarget{
+ TARGET_1, TARGET_2, BOTH_TARGETS, ONE_OF_TARGETS,
}
\ No newline at end of file
-package jp.naist.se.stigmata.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.ArrayList;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.ComparisonPair;\r
-import jp.naist.se.stigmata.ComparisonPairFilterSet;\r
-import jp.naist.se.stigmata.ComparisonResultSet;\r
-\r
-/**\r
- * Filtering {@link ComparisonResultSet <code>ComparisonResultSet</code>}.\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class FilteredComparisonResultSet implements ComparisonResultSet{\r
- private ComparisonResultSet resultset;\r
- private List<ComparisonPairFilterSet> filters = new ArrayList<ComparisonPairFilterSet>(); \r
-\r
- /**\r
- * constructor.\r
- * \r
- * @param resultset filtering target\r
- */\r
- public FilteredComparisonResultSet(ComparisonResultSet resultset){\r
- this.resultset = resultset;\r
- }\r
-\r
- /**\r
- * constructor.\r
- * @param resultset filtering target\r
- * @param filters filtering rule\r
- */\r
- public FilteredComparisonResultSet(ComparisonResultSet resultset, ComparisonPairFilterSet[] filters){\r
- this.resultset = resultset;\r
- for(int i = 0; i < filters.length; i++){\r
- addFilterSet(filters[i]);\r
- }\r
- }\r
-\r
- public void addFilterSet(ComparisonPairFilterSet filter){\r
- filters.add(filter);\r
- }\r
-\r
- public void removeFilterSet(ComparisonPairFilterSet filter){\r
- filters.remove(filter);\r
- }\r
-\r
- public ComparisonPair getPairAt(int index){\r
- int currentIndex = 0;\r
- for(Iterator<ComparisonPair> i = iterator(); i.hasNext(); ){\r
- ComparisonPair pair = i.next();\r
- if(currentIndex == index){\r
- return pair;\r
- }\r
- currentIndex++;\r
- }\r
- return null;\r
- }\r
-\r
- public ComparisonPair[] getPairs(){\r
- List<ComparisonPair> list = new ArrayList<ComparisonPair>();\r
- for(Iterator<ComparisonPair> i = iterator(); i.hasNext(); ){\r
- list.add(i.next());\r
- }\r
- return list.toArray(new ComparisonPair[list.size()]);\r
- }\r
-\r
- public int getPairCount(){\r
- return resultset.getPairCount();\r
- }\r
-\r
- public BirthmarkContext getContext(){\r
- return resultset.getContext();\r
- }\r
-\r
- public BirthmarkEnvironment getEnvironment(){\r
- return resultset.getEnvironment();\r
- }\r
-\r
- public Iterator<ComparisonPair> iterator(){\r
- return new FilteredIterator(resultset.iterator());\r
- }\r
-\r
- public synchronized BirthmarkSet[] getPairSources(){\r
- List<BirthmarkSet> list = new ArrayList<BirthmarkSet>();\r
- for(Iterator<BirthmarkSet> i = pairSources(); i.hasNext(); ){\r
- list.add(i.next());\r
- }\r
- return list.toArray(new BirthmarkSet[list.size()]);\r
- }\r
-\r
- public Iterator<BirthmarkSet> pairSources(){\r
- return resultset.pairSources();\r
- }\r
-\r
- private class FilteredIterator implements Iterator<ComparisonPair>{\r
- private Iterator<ComparisonPair> iterator;\r
- private ComparisonPair next;\r
-\r
- public FilteredIterator(Iterator<ComparisonPair> iterator){\r
- this.iterator = iterator;\r
- \r
- next = findNext();\r
- }\r
-\r
- public boolean hasNext(){\r
- return next != null;\r
- }\r
-\r
- public ComparisonPair next(){\r
- ComparisonPair returnValue = next;\r
- next = findNext();\r
- return returnValue;\r
- }\r
-\r
- public void remove(){\r
- throw new InternalError("not implemented");\r
- }\r
-\r
- private ComparisonPair findNext(){\r
- boolean nowFinding = true;\r
- while(nowFinding && iterator.hasNext()){\r
- ComparisonPair nextPair = iterator.next();\r
- // return the pair which the all filters is passed\r
- if(isAllFilterPassed(nextPair)){\r
- nowFinding = false; // found next value!\r
- next = nextPair;\r
- }\r
- }\r
- if(nowFinding && !iterator.hasNext()){\r
- next = null;\r
- }\r
- return next;\r
- }\r
-\r
- private boolean isAllFilterPassed(ComparisonPair pair){\r
- boolean flag = true;\r
- for(Iterator<ComparisonPairFilterSet> i = filters.iterator(); i.hasNext(); ){\r
- ComparisonPairFilterSet filter = i.next();\r
- if(!filter.isFiltered(pair)){\r
- flag = false;\r
- break;\r
- }\r
- }\r
- return flag;\r
- }\r
- };\r
-}\r
+package jp.sourceforge.stigmata.filter;
+
+/*
+ * $Id$
+ */
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.ComparisonPair;
+import jp.sourceforge.stigmata.ComparisonPairFilterSet;
+import jp.sourceforge.stigmata.ComparisonResultSet;
+
+/**
+ * Filtering {@link ComparisonResultSet <code>ComparisonResultSet</code>}.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class FilteredComparisonResultSet implements ComparisonResultSet{
+ private ComparisonResultSet resultset;
+ private List<ComparisonPairFilterSet> filters = new ArrayList<ComparisonPairFilterSet>();
+
+ /**
+ * constructor.
+ *
+ * @param resultset filtering target
+ */
+ public FilteredComparisonResultSet(ComparisonResultSet resultset){
+ this.resultset = resultset;
+ }
+
+ /**
+ * constructor.
+ * @param resultset filtering target
+ * @param filters filtering rule
+ */
+ public FilteredComparisonResultSet(ComparisonResultSet resultset, ComparisonPairFilterSet[] filters){
+ this.resultset = resultset;
+ for(int i = 0; i < filters.length; i++){
+ addFilterSet(filters[i]);
+ }
+ }
+
+ public void addFilterSet(ComparisonPairFilterSet filter){
+ filters.add(filter);
+ }
+
+ public void removeFilterSet(ComparisonPairFilterSet filter){
+ filters.remove(filter);
+ }
+
+ public ComparisonPair getPairAt(int index){
+ int currentIndex = 0;
+ for(Iterator<ComparisonPair> i = iterator(); i.hasNext(); ){
+ ComparisonPair pair = i.next();
+ if(currentIndex == index){
+ return pair;
+ }
+ currentIndex++;
+ }
+ return null;
+ }
+
+ public ComparisonPair[] getPairs(){
+ List<ComparisonPair> list = new ArrayList<ComparisonPair>();
+ for(Iterator<ComparisonPair> i = iterator(); i.hasNext(); ){
+ list.add(i.next());
+ }
+ return list.toArray(new ComparisonPair[list.size()]);
+ }
+
+ public int getPairCount(){
+ return resultset.getPairCount();
+ }
+
+ public BirthmarkContext getContext(){
+ return resultset.getContext();
+ }
+
+ public BirthmarkEnvironment getEnvironment(){
+ return resultset.getEnvironment();
+ }
+
+ public Iterator<ComparisonPair> iterator(){
+ return new FilteredIterator(resultset.iterator());
+ }
+
+ public synchronized BirthmarkSet[] getPairSources(){
+ List<BirthmarkSet> list = new ArrayList<BirthmarkSet>();
+ for(Iterator<BirthmarkSet> i = pairSources(); i.hasNext(); ){
+ list.add(i.next());
+ }
+ return list.toArray(new BirthmarkSet[list.size()]);
+ }
+
+ public Iterator<BirthmarkSet> pairSources(){
+ return resultset.pairSources();
+ }
+
+ private class FilteredIterator implements Iterator<ComparisonPair>{
+ private Iterator<ComparisonPair> iterator;
+ private ComparisonPair next;
+
+ public FilteredIterator(Iterator<ComparisonPair> iterator){
+ this.iterator = iterator;
+
+ next = findNext();
+ }
+
+ public boolean hasNext(){
+ return next != null;
+ }
+
+ public ComparisonPair next(){
+ ComparisonPair returnValue = next;
+ next = findNext();
+ return returnValue;
+ }
+
+ public void remove(){
+ throw new InternalError("not implemented");
+ }
+
+ private ComparisonPair findNext(){
+ boolean nowFinding = true;
+ while(nowFinding && iterator.hasNext()){
+ ComparisonPair nextPair = iterator.next();
+ // return the pair which the all filters is passed
+ if(isAllFilterPassed(nextPair)){
+ nowFinding = false; // found next value!
+ next = nextPair;
+ }
+ }
+ if(nowFinding && !iterator.hasNext()){
+ next = null;
+ }
+ return next;
+ }
+
+ private boolean isAllFilterPassed(ComparisonPair pair){
+ boolean flag = true;
+ for(Iterator<ComparisonPairFilterSet> i = filters.iterator(); i.hasNext(); ){
+ ComparisonPairFilterSet filter = i.next();
+ if(!filter.isFiltered(pair)){
+ flag = false;
+ break;
+ }
+ }
+ return flag;
+ }
+ };
+}
-package jp.naist.se.stigmata.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import jp.naist.se.stigmata.ComparisonPair;\r
-import jp.naist.se.stigmata.spi.ComparisonPairFilterSpi;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class SimilarityComparisonPairFilter extends AbstractComparisonPairFilter{\r
- private static final double EQUALS_THRESHOLD = 5E-5;\r
-\r
- private static List<Criterion> CRITERIA = new ArrayList<Criterion>();\r
- static{\r
- CRITERIA.add(Criterion.GREATER_EQUALS);\r
- CRITERIA.add(Criterion.GREATER_THAN);\r
- CRITERIA.add(Criterion.LESS_EQUALS);\r
- CRITERIA.add(Criterion.LESS_THAN);\r
- CRITERIA.add(Criterion.EQUALS_AS);\r
- CRITERIA.add(Criterion.NOT_EQUALS_AS); \r
- };\r
-\r
- private double threshold;\r
-\r
- public SimilarityComparisonPairFilter(ComparisonPairFilterSpi service){\r
- super(service);\r
- setThreshold(0.8d);\r
- }\r
- \r
- public boolean isFiltered(ComparisonPair pair){\r
- double similarity = pair.calculateSimilarity();\r
- boolean flag;\r
- switch(getCriterion()){\r
- case GREATER_EQUALS:\r
- flag = similarity >= getThreshold();\r
- break;\r
- case GREATER_THAN:\r
- flag = similarity > getThreshold();\r
- break;\r
- case LESS_EQUALS:\r
- flag = similarity <= getThreshold();\r
- break;\r
- case LESS_THAN:\r
- flag = similarity < getThreshold();\r
- break;\r
- case EQUALS_AS:\r
- flag = (similarity - getThreshold()) <= EQUALS_THRESHOLD;\r
- break;\r
- case NOT_EQUALS_AS:\r
- flag = (similarity - getThreshold()) > EQUALS_THRESHOLD;\r
- break;\r
- default:\r
- flag = false;\r
- break;\r
- }\r
- return flag;\r
- }\r
-\r
- public static Criterion[] getValidCriteria(){\r
- return CRITERIA.toArray(new Criterion[CRITERIA.size()]);\r
- }\r
-\r
- public Criterion[] getAcceptableCriteria(){\r
- return getValidCriteria();\r
- }\r
-\r
- public double getThreshold(){\r
- return threshold;\r
- }\r
-\r
- public void setThreshold(double threshold){\r
- if(threshold < 0d || threshold >= 1.0d){\r
- throw new IllegalArgumentException("threshold must be 0.0-1.0");\r
- }\r
- this.threshold = threshold;\r
- }\r
-\r
- public String toString(){\r
- StringBuffer sb = new StringBuffer();\r
- sb.append("similarity");\r
- switch(getCriterion()){\r
- case GREATER_EQUALS: sb.append(" >= "); break;\r
- case GREATER_THAN: sb.append(" > "); break;\r
- case LESS_EQUALS: sb.append(" <= "); break;\r
- case LESS_THAN: sb.append(" < "); break;\r
- case EQUALS_AS: sb.append(" == "); break;\r
- case NOT_EQUALS_AS: sb.append(" != "); break;\r
- }\r
- sb.append(getThreshold());\r
- return new String(sb);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.filter;
+
+/*
+ * $Id$
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import jp.sourceforge.stigmata.ComparisonPair;
+import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class SimilarityComparisonPairFilter extends AbstractComparisonPairFilter{
+ private static final double EQUALS_THRESHOLD = 5E-5;
+
+ private static List<Criterion> CRITERIA = new ArrayList<Criterion>();
+ static{
+ CRITERIA.add(Criterion.GREATER_EQUALS);
+ CRITERIA.add(Criterion.GREATER_THAN);
+ CRITERIA.add(Criterion.LESS_EQUALS);
+ CRITERIA.add(Criterion.LESS_THAN);
+ CRITERIA.add(Criterion.EQUALS_AS);
+ CRITERIA.add(Criterion.NOT_EQUALS_AS);
+ };
+
+ private double threshold;
+
+ public SimilarityComparisonPairFilter(ComparisonPairFilterSpi service){
+ super(service);
+ setThreshold(0.8d);
+ }
+
+ public boolean isFiltered(ComparisonPair pair){
+ double similarity = pair.calculateSimilarity();
+ boolean flag;
+ switch(getCriterion()){
+ case GREATER_EQUALS:
+ flag = similarity >= getThreshold();
+ break;
+ case GREATER_THAN:
+ flag = similarity > getThreshold();
+ break;
+ case LESS_EQUALS:
+ flag = similarity <= getThreshold();
+ break;
+ case LESS_THAN:
+ flag = similarity < getThreshold();
+ break;
+ case EQUALS_AS:
+ flag = (similarity - getThreshold()) <= EQUALS_THRESHOLD;
+ break;
+ case NOT_EQUALS_AS:
+ flag = (similarity - getThreshold()) > EQUALS_THRESHOLD;
+ break;
+ default:
+ flag = false;
+ break;
+ }
+ return flag;
+ }
+
+ public static Criterion[] getValidCriteria(){
+ return CRITERIA.toArray(new Criterion[CRITERIA.size()]);
+ }
+
+ public Criterion[] getAcceptableCriteria(){
+ return getValidCriteria();
+ }
+
+ public double getThreshold(){
+ return threshold;
+ }
+
+ public void setThreshold(double threshold){
+ if(threshold < 0d || threshold >= 1.0d){
+ throw new IllegalArgumentException("threshold must be 0.0-1.0");
+ }
+ this.threshold = threshold;
+ }
+
+ public String toString(){
+ StringBuffer sb = new StringBuffer();
+ sb.append("similarity");
+ switch(getCriterion()){
+ case GREATER_EQUALS: sb.append(" >= "); break;
+ case GREATER_THAN: sb.append(" > "); break;
+ case LESS_EQUALS: sb.append(" <= "); break;
+ case LESS_THAN: sb.append(" < "); break;
+ case EQUALS_AS: sb.append(" == "); break;
+ case NOT_EQUALS_AS: sb.append(" != "); break;
+ }
+ sb.append(getThreshold());
+ return new String(sb);
+ }
+}
-package jp.naist.se.stigmata.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.ComparisonPairFilter;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class SimilarityComparisonPairFilterService extends AbstractComparisonPairFilterService{\r
- public ComparisonPairFilter getFilter(){\r
- return new SimilarityComparisonPairFilter(this);\r
- }\r
-\r
- public String getFilterClassName(){\r
- return SimilarityComparisonPairFilter.class.getName();\r
- }\r
-\r
- public String getFilterName(){\r
- return "similarity";\r
- }\r
-}\r
+package jp.sourceforge.stigmata.filter;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.ComparisonPairFilter;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class SimilarityComparisonPairFilterService extends AbstractComparisonPairFilterService{
+ public ComparisonPairFilter getFilter(){
+ return new SimilarityComparisonPairFilter(this);
+ }
+
+ public String getFilterClassName(){
+ return SimilarityComparisonPairFilter.class.getName();
+ }
+
+ public String getFilterName(){
+ return "similarity";
+ }
+}
-package jp.naist.se.stigmata.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import jp.naist.se.stigmata.ComparisonPair;\r
-import jp.naist.se.stigmata.spi.ComparisonPairFilterSpi;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class TargetNameComparisonPairFilter extends AbstractComparisonPairFilter{\r
- private static final List<Criterion> CRITERIA = new ArrayList<Criterion>();\r
-\r
- static{\r
- CRITERIA.add(Criterion.STARTS_WITH);\r
- CRITERIA.add(Criterion.NOT_STARTS_WITH); \r
- CRITERIA.add(Criterion.ENDS_WITH);\r
- CRITERIA.add(Criterion.NOT_ENDS_WITH);\r
- CRITERIA.add(Criterion.EQUALS_AS);\r
- CRITERIA.add(Criterion.NOT_EQUALS_AS);\r
- CRITERIA.add(Criterion.MATCH);\r
- CRITERIA.add(Criterion.NOT_MATCH);\r
- };\r
- private FilterTarget target = FilterTarget.BOTH_TARGETS;\r
- private String value;\r
-\r
- public TargetNameComparisonPairFilter(ComparisonPairFilterSpi service){\r
- super(service);\r
- }\r
-\r
- public Criterion[] getAcceptableCriteria(){\r
- return getValidCriteria();\r
- }\r
-\r
- public static Criterion[] getValidCriteria(){\r
- return CRITERIA.toArray(new Criterion[CRITERIA.size()]);\r
- }\r
-\r
- public boolean isFiltered(ComparisonPair pair){\r
- String v = value;\r
- if(v == null) v = "";\r
- boolean flag;\r
- if(getTarget() == FilterTarget.TARGET_1){\r
- flag = checkMatch(pair.getTarget1().getName(), v);\r
- }\r
- else if(getTarget() == FilterTarget.TARGET_2){\r
- flag = checkMatch(pair.getTarget2().getName(), v);\r
- }\r
- else{\r
- flag = checkMatch(pair.getTarget1().getName(), pair.getTarget2().getName(), v);\r
- }\r
- return flag;\r
- }\r
-\r
- public String getValue(){\r
- return value;\r
- }\r
-\r
- public void setValue(String value){\r
- this.value = value;\r
- }\r
-\r
- public FilterTarget getTarget(){\r
- return target;\r
- }\r
-\r
- public void setTarget(FilterTarget target){\r
- this.target = target;\r
- }\r
-\r
- private boolean checkMatch(String name1, String name2, String value){\r
- boolean flag1;\r
- boolean flag2;\r
- switch(getCriterion()){\r
- case STARTS_WITH:\r
- flag1 = name1.startsWith(value);\r
- flag2 = name2.startsWith(value);\r
- break;\r
- case ENDS_WITH:\r
- flag1 = name1.endsWith(value);\r
- flag2 = name2.endsWith(value);\r
- break;\r
- case EQUALS_AS:\r
- flag1 = name1.equals(value);\r
- flag2 = name2.equals(value);\r
- break;\r
- case NOT_EQUALS_AS:\r
- flag1 = !name1.equals(value);\r
- flag2 = !name2.equals(value);\r
- break;\r
- case MATCH:\r
- flag1 = name1.equals(name2);\r
- flag2 = flag1;\r
- break;\r
- case NOT_MATCH:\r
- flag1 = !name1.equals(name2);\r
- flag2 = flag1;\r
- break;\r
- default:\r
- flag1 = false;\r
- flag2 = false;\r
- break;\r
- }\r
- \r
- boolean flag;\r
- if(getTarget() == FilterTarget.BOTH_TARGETS){\r
- flag = flag1 && flag2;\r
- }\r
- else{\r
- flag = flag1 || flag2;\r
- }\r
- return flag;\r
- }\r
-\r
- private boolean checkMatch(String name, String value){\r
- boolean flag;\r
- switch(getCriterion()){\r
- case STARTS_WITH:\r
- flag = name.startsWith(value);\r
- break;\r
- case ENDS_WITH:\r
- flag = name.endsWith(value);\r
- break;\r
- case EQUALS_AS:\r
- flag = name.equals(value);\r
- break;\r
- case NOT_EQUALS_AS:\r
- flag = !name.equals(value);\r
- break;\r
- default:\r
- flag = false;\r
- break;\r
- }\r
- return flag;\r
- }\r
-\r
- public String toString(){\r
- if(getCriterion() == Criterion.MATCH || getCriterion() == Criterion.NOT_MATCH){\r
- String value = " match ";\r
- if(getCriterion() == Criterion.NOT_MATCH) value = " not match ";\r
- return "target1.name" + value + "target2.name";\r
- }\r
- StringBuilder sb = new StringBuilder();\r
- switch(getTarget()){\r
- case TARGET_1: sb.append("target1.name"); break;\r
- case TARGET_2: sb.append("target2.name"); break;\r
- case BOTH_TARGETS: sb.append("(target1&target2).name"); break;\r
- case ONE_OF_TARGETS: sb.append("(target1|target2).name"); break; \r
- }\r
- switch(getCriterion()){\r
- case STARTS_WITH: sb.append(" starts with "); break;\r
- case NOT_STARTS_WITH: sb.append(" not starts with "); break;\r
- case ENDS_WITH: sb.append(" ends with "); break;\r
- case NOT_ENDS_WITH: sb.append(" not ends with "); break;\r
- case EQUALS_AS: sb.append(" equals as "); break;\r
- case NOT_EQUALS_AS: sb.append(" not equals as "); break;\r
- }\r
- sb.append(getValue());\r
-\r
- return new String(sb);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.filter;
+
+/*
+ * $Id$
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import jp.sourceforge.stigmata.ComparisonPair;
+import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class TargetNameComparisonPairFilter extends AbstractComparisonPairFilter{
+ private static final List<Criterion> CRITERIA = new ArrayList<Criterion>();
+
+ static{
+ CRITERIA.add(Criterion.STARTS_WITH);
+ CRITERIA.add(Criterion.NOT_STARTS_WITH);
+ CRITERIA.add(Criterion.ENDS_WITH);
+ CRITERIA.add(Criterion.NOT_ENDS_WITH);
+ CRITERIA.add(Criterion.EQUALS_AS);
+ CRITERIA.add(Criterion.NOT_EQUALS_AS);
+ CRITERIA.add(Criterion.MATCH);
+ CRITERIA.add(Criterion.NOT_MATCH);
+ };
+ private FilterTarget target = FilterTarget.BOTH_TARGETS;
+ private String value;
+
+ public TargetNameComparisonPairFilter(ComparisonPairFilterSpi service){
+ super(service);
+ }
+
+ public Criterion[] getAcceptableCriteria(){
+ return getValidCriteria();
+ }
+
+ public static Criterion[] getValidCriteria(){
+ return CRITERIA.toArray(new Criterion[CRITERIA.size()]);
+ }
+
+ public boolean isFiltered(ComparisonPair pair){
+ String v = value;
+ if(v == null) v = "";
+ boolean flag;
+ if(getTarget() == FilterTarget.TARGET_1){
+ flag = checkMatch(pair.getTarget1().getName(), v);
+ }
+ else if(getTarget() == FilterTarget.TARGET_2){
+ flag = checkMatch(pair.getTarget2().getName(), v);
+ }
+ else{
+ flag = checkMatch(pair.getTarget1().getName(), pair.getTarget2().getName(), v);
+ }
+ return flag;
+ }
+
+ public String getValue(){
+ return value;
+ }
+
+ public void setValue(String value){
+ this.value = value;
+ }
+
+ public FilterTarget getTarget(){
+ return target;
+ }
+
+ public void setTarget(FilterTarget target){
+ this.target = target;
+ }
+
+ private boolean checkMatch(String name1, String name2, String value){
+ boolean flag1;
+ boolean flag2;
+ switch(getCriterion()){
+ case STARTS_WITH:
+ flag1 = name1.startsWith(value);
+ flag2 = name2.startsWith(value);
+ break;
+ case ENDS_WITH:
+ flag1 = name1.endsWith(value);
+ flag2 = name2.endsWith(value);
+ break;
+ case EQUALS_AS:
+ flag1 = name1.equals(value);
+ flag2 = name2.equals(value);
+ break;
+ case NOT_EQUALS_AS:
+ flag1 = !name1.equals(value);
+ flag2 = !name2.equals(value);
+ break;
+ case MATCH:
+ flag1 = name1.equals(name2);
+ flag2 = flag1;
+ break;
+ case NOT_MATCH:
+ flag1 = !name1.equals(name2);
+ flag2 = flag1;
+ break;
+ default:
+ flag1 = false;
+ flag2 = false;
+ break;
+ }
+
+ boolean flag;
+ if(getTarget() == FilterTarget.BOTH_TARGETS){
+ flag = flag1 && flag2;
+ }
+ else{
+ flag = flag1 || flag2;
+ }
+ return flag;
+ }
+
+ private boolean checkMatch(String name, String value){
+ boolean flag;
+ switch(getCriterion()){
+ case STARTS_WITH:
+ flag = name.startsWith(value);
+ break;
+ case ENDS_WITH:
+ flag = name.endsWith(value);
+ break;
+ case EQUALS_AS:
+ flag = name.equals(value);
+ break;
+ case NOT_EQUALS_AS:
+ flag = !name.equals(value);
+ break;
+ default:
+ flag = false;
+ break;
+ }
+ return flag;
+ }
+
+ public String toString(){
+ if(getCriterion() == Criterion.MATCH || getCriterion() == Criterion.NOT_MATCH){
+ String value = " match ";
+ if(getCriterion() == Criterion.NOT_MATCH) value = " not match ";
+ return "target1.name" + value + "target2.name";
+ }
+ StringBuilder sb = new StringBuilder();
+ switch(getTarget()){
+ case TARGET_1: sb.append("target1.name"); break;
+ case TARGET_2: sb.append("target2.name"); break;
+ case BOTH_TARGETS: sb.append("(target1&target2).name"); break;
+ case ONE_OF_TARGETS: sb.append("(target1|target2).name"); break;
+ }
+ switch(getCriterion()){
+ case STARTS_WITH: sb.append(" starts with "); break;
+ case NOT_STARTS_WITH: sb.append(" not starts with "); break;
+ case ENDS_WITH: sb.append(" ends with "); break;
+ case NOT_ENDS_WITH: sb.append(" not ends with "); break;
+ case EQUALS_AS: sb.append(" equals as "); break;
+ case NOT_EQUALS_AS: sb.append(" not equals as "); break;
+ }
+ sb.append(getValue());
+
+ return new String(sb);
+ }
+}
-package jp.naist.se.stigmata.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.ComparisonPairFilter;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class TargetNameComparisonPairFilterService extends AbstractComparisonPairFilterService{\r
-\r
- public ComparisonPairFilter getFilter(){\r
- return new TargetNameComparisonPairFilter(this);\r
- }\r
-\r
- public String getFilterClassName(){\r
- return TargetNameComparisonPairFilter.class.getName();\r
- }\r
-\r
- public String getFilterName(){\r
- return "name";\r
- }\r
-}\r
+package jp.sourceforge.stigmata.filter;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.ComparisonPairFilter;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class TargetNameComparisonPairFilterService extends AbstractComparisonPairFilterService{
+
+ public ComparisonPairFilter getFilter(){
+ return new TargetNameComparisonPairFilter(this);
+ }
+
+ public String getFilterClassName(){
+ return TargetNameComparisonPairFilter.class.getName();
+ }
+
+ public String getFilterName(){
+ return "name";
+ }
+}
-package jp.naist.se.stigmata.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import jp.naist.se.stigmata.ComparisonPair;\r
-import jp.naist.se.stigmata.spi.ComparisonPairFilterSpi;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class TotalElementCountComparisonPairFilter extends AbstractComparisonPairFilter{\r
- private static final List<Criterion> CRITERIA = new ArrayList<Criterion>();\r
- static{\r
- CRITERIA.add(Criterion.GREATER_EQUALS);\r
- CRITERIA.add(Criterion.GREATER_THAN);\r
- CRITERIA.add(Criterion.LESS_EQUALS);\r
- CRITERIA.add(Criterion.LESS_THAN);\r
- CRITERIA.add(Criterion.EQUALS_AS);\r
- CRITERIA.add(Criterion.NOT_EQUALS_AS); \r
- CRITERIA.add(Criterion.MATCH);\r
- CRITERIA.add(Criterion.NOT_MATCH);\r
- };\r
-\r
- private int threshold = 0;\r
- private FilterTarget target;\r
-\r
- public TotalElementCountComparisonPairFilter(ComparisonPairFilterSpi service){\r
- super(service);\r
- }\r
-\r
- public Criterion[] getAcceptableCriteria(){\r
- return getValidCriteria();\r
- }\r
-\r
- public static Criterion[] getValidCriteria(){\r
- return CRITERIA.toArray(new Criterion[CRITERIA.size()]);\r
- }\r
-\r
- public boolean isFiltered(ComparisonPair pair){\r
- boolean flag;\r
- if(getTarget() == FilterTarget.TARGET_1){\r
- flag = checkFiltered(pair.getTarget1().getSumOfElementCount());\r
- }\r
- else if(getTarget() == FilterTarget.TARGET_2){\r
- flag = checkFiltered(pair.getTarget2().getSumOfElementCount());\r
- }\r
- else{\r
- flag = checkFiltered(pair.getTarget1().getSumOfElementCount(), pair.getTarget2().getSumOfElementCount());\r
- }\r
- return flag;\r
- }\r
-\r
- private boolean checkFiltered(int e1, int e2){\r
- boolean flag1;\r
- boolean flag2;\r
- int t = getThreshold();\r
- switch(getCriterion()){\r
- case GREATER_EQUALS:\r
- flag1 = e1 >= t; flag2 = e2 >= t;\r
- break;\r
- case GREATER_THAN:\r
- flag1 = e1 > t; flag2 = e2 > t;\r
- break;\r
- case LESS_EQUALS:\r
- flag1 = e1 <= t; flag2 = e2 <= t;\r
- break;\r
- case LESS_THAN:\r
- flag1 = e1 < t; flag2 = e2 < t;\r
- break;\r
- case EQUALS_AS:\r
- flag1 = e1 == t; flag2 = e2 == t;\r
- break;\r
- case NOT_EQUALS_AS:\r
- flag1 = e1 != t; flag2 = e2 != t;\r
- break;\r
- case MATCH:\r
- flag1 = e1 == e2; flag2 = flag1;\r
- break;\r
- case NOT_MATCH:\r
- flag1 = e1 != e2; flag2 = flag1;\r
- break;\r
- default:\r
- flag1 = false;\r
- flag2 = false;\r
- break;\r
- }\r
- return (getTarget() == FilterTarget.BOTH_TARGETS && flag1 && flag2) ||\r
- (getTarget() == FilterTarget.ONE_OF_TARGETS && (flag1 || flag2));\r
- }\r
-\r
- private boolean checkFiltered(int total){\r
- boolean flag = false;\r
- switch(getCriterion()){\r
- case GREATER_EQUALS:\r
- flag = total >= getThreshold();\r
- break;\r
- case GREATER_THAN:\r
- flag = total > getThreshold();\r
- break;\r
- case LESS_EQUALS:\r
- flag = total <= getThreshold();\r
- break;\r
- case LESS_THAN:\r
- flag = total < getThreshold();\r
- break;\r
- case EQUALS_AS:\r
- flag = total == getThreshold();\r
- break;\r
- case NOT_EQUALS_AS:\r
- flag = total != getThreshold();\r
- break;\r
- default:\r
- flag = false;\r
- break;\r
- }\r
- return flag;\r
- }\r
-\r
- public int getThreshold(){\r
- return threshold;\r
- }\r
-\r
- public void setThreshold(int threshold){\r
- if(threshold < 0){\r
- throw new IllegalArgumentException("threshold must be positive value: " + threshold);\r
- }\r
- this.threshold = threshold;\r
- }\r
-\r
- public FilterTarget getTarget(){\r
- return target;\r
- }\r
-\r
- public void setTarget(FilterTarget target){\r
- this.target = target;\r
- }\r
-\r
- public String toString(){\r
- StringBuilder sb = new StringBuilder();\r
- switch(getTarget()){\r
- case TARGET_1: sb.append("target1"); break;\r
- case TARGET_2: sb.append("target2"); break;\r
- case BOTH_TARGETS: sb.append("(target1&target2)"); break;\r
- case ONE_OF_TARGETS: sb.append("(target1|target2)"); break;\r
- }\r
- sb.append(".element");\r
- switch(getCriterion()){\r
- case GREATER_EQUALS: sb.append(" >= "); break;\r
- case GREATER_THAN: sb.append(" > "); break;\r
- case LESS_EQUALS: sb.append(" <= "); break;\r
- case LESS_THAN: sb.append(" < "); break;\r
- case EQUALS_AS: sb.append(" == "); break;\r
- case NOT_EQUALS_AS: sb.append(" != "); break;\r
- }\r
- sb.append(Integer.toString(getThreshold()));\r
-\r
- return new String(sb);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.filter;
+
+/*
+ * $Id$
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import jp.sourceforge.stigmata.ComparisonPair;
+import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class TotalElementCountComparisonPairFilter extends AbstractComparisonPairFilter{
+ private static final List<Criterion> CRITERIA = new ArrayList<Criterion>();
+ static{
+ CRITERIA.add(Criterion.GREATER_EQUALS);
+ CRITERIA.add(Criterion.GREATER_THAN);
+ CRITERIA.add(Criterion.LESS_EQUALS);
+ CRITERIA.add(Criterion.LESS_THAN);
+ CRITERIA.add(Criterion.EQUALS_AS);
+ CRITERIA.add(Criterion.NOT_EQUALS_AS);
+ CRITERIA.add(Criterion.MATCH);
+ CRITERIA.add(Criterion.NOT_MATCH);
+ };
+
+ private int threshold = 0;
+ private FilterTarget target;
+
+ public TotalElementCountComparisonPairFilter(ComparisonPairFilterSpi service){
+ super(service);
+ }
+
+ public Criterion[] getAcceptableCriteria(){
+ return getValidCriteria();
+ }
+
+ public static Criterion[] getValidCriteria(){
+ return CRITERIA.toArray(new Criterion[CRITERIA.size()]);
+ }
+
+ public boolean isFiltered(ComparisonPair pair){
+ boolean flag;
+ if(getTarget() == FilterTarget.TARGET_1){
+ flag = checkFiltered(pair.getTarget1().getSumOfElementCount());
+ }
+ else if(getTarget() == FilterTarget.TARGET_2){
+ flag = checkFiltered(pair.getTarget2().getSumOfElementCount());
+ }
+ else{
+ flag = checkFiltered(pair.getTarget1().getSumOfElementCount(), pair.getTarget2().getSumOfElementCount());
+ }
+ return flag;
+ }
+
+ private boolean checkFiltered(int e1, int e2){
+ boolean flag1;
+ boolean flag2;
+ int t = getThreshold();
+ switch(getCriterion()){
+ case GREATER_EQUALS:
+ flag1 = e1 >= t; flag2 = e2 >= t;
+ break;
+ case GREATER_THAN:
+ flag1 = e1 > t; flag2 = e2 > t;
+ break;
+ case LESS_EQUALS:
+ flag1 = e1 <= t; flag2 = e2 <= t;
+ break;
+ case LESS_THAN:
+ flag1 = e1 < t; flag2 = e2 < t;
+ break;
+ case EQUALS_AS:
+ flag1 = e1 == t; flag2 = e2 == t;
+ break;
+ case NOT_EQUALS_AS:
+ flag1 = e1 != t; flag2 = e2 != t;
+ break;
+ case MATCH:
+ flag1 = e1 == e2; flag2 = flag1;
+ break;
+ case NOT_MATCH:
+ flag1 = e1 != e2; flag2 = flag1;
+ break;
+ default:
+ flag1 = false;
+ flag2 = false;
+ break;
+ }
+ return (getTarget() == FilterTarget.BOTH_TARGETS && flag1 && flag2) ||
+ (getTarget() == FilterTarget.ONE_OF_TARGETS && (flag1 || flag2));
+ }
+
+ private boolean checkFiltered(int total){
+ boolean flag = false;
+ switch(getCriterion()){
+ case GREATER_EQUALS:
+ flag = total >= getThreshold();
+ break;
+ case GREATER_THAN:
+ flag = total > getThreshold();
+ break;
+ case LESS_EQUALS:
+ flag = total <= getThreshold();
+ break;
+ case LESS_THAN:
+ flag = total < getThreshold();
+ break;
+ case EQUALS_AS:
+ flag = total == getThreshold();
+ break;
+ case NOT_EQUALS_AS:
+ flag = total != getThreshold();
+ break;
+ default:
+ flag = false;
+ break;
+ }
+ return flag;
+ }
+
+ public int getThreshold(){
+ return threshold;
+ }
+
+ public void setThreshold(int threshold){
+ if(threshold < 0){
+ throw new IllegalArgumentException("threshold must be positive value: " + threshold);
+ }
+ this.threshold = threshold;
+ }
+
+ public FilterTarget getTarget(){
+ return target;
+ }
+
+ public void setTarget(FilterTarget target){
+ this.target = target;
+ }
+
+ public String toString(){
+ StringBuilder sb = new StringBuilder();
+ switch(getTarget()){
+ case TARGET_1: sb.append("target1"); break;
+ case TARGET_2: sb.append("target2"); break;
+ case BOTH_TARGETS: sb.append("(target1&target2)"); break;
+ case ONE_OF_TARGETS: sb.append("(target1|target2)"); break;
+ }
+ sb.append(".element");
+ switch(getCriterion()){
+ case GREATER_EQUALS: sb.append(" >= "); break;
+ case GREATER_THAN: sb.append(" > "); break;
+ case LESS_EQUALS: sb.append(" <= "); break;
+ case LESS_THAN: sb.append(" < "); break;
+ case EQUALS_AS: sb.append(" == "); break;
+ case NOT_EQUALS_AS: sb.append(" != "); break;
+ }
+ sb.append(Integer.toString(getThreshold()));
+
+ return new String(sb);
+ }
+}
-package jp.naist.se.stigmata.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.ComparisonPairFilter;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class TotalElementCountComparisonPairFilterService extends AbstractComparisonPairFilterService{\r
-\r
- public ComparisonPairFilter getFilter(){\r
- return new TotalElementCountComparisonPairFilter(this);\r
- }\r
-\r
- public String getFilterClassName(){\r
- return TotalElementCountComparisonPairFilter.class.getName();\r
- }\r
-\r
- public String getFilterName(){\r
- return "totalelementcount";\r
- }\r
-}\r
+package jp.sourceforge.stigmata.filter;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.ComparisonPairFilter;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class TotalElementCountComparisonPairFilterService extends AbstractComparisonPairFilterService{
+
+ public ComparisonPairFilter getFilter(){
+ return new TotalElementCountComparisonPairFilter(this);
+ }
+
+ public String getFilterClassName(){
+ return TotalElementCountComparisonPairFilter.class.getName();
+ }
+
+ public String getFilterName(){
+ return "totalelementcount";
+ }
+}
-package jp.naist.se.stigmata.hook;
+package jp.sourceforge.stigmata.hook;
/*
* $Id$
*/
-import jp.naist.se.stigmata.spi.StigmataHookSpi;
+import jp.sourceforge.stigmata.spi.StigmataHookSpi;
/**
*
-package jp.naist.se.stigmata.hook;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class MultipleStigmataHook implements StigmataHook, StigmataRuntimeHook{\r
- private List<StigmataHook> hooks = new ArrayList<StigmataHook>();\r
- private List<StigmataRuntimeHook> runtimeHooks = new ArrayList<StigmataRuntimeHook>();\r
-\r
- public void onHook(Phase phase, BirthmarkContext context){\r
- for(StigmataRuntimeHook hook: runtimeHooks){\r
- if(hook != null){\r
- hook.onHook(phase, context);\r
- }\r
- }\r
- }\r
-\r
- public void onHook(Phase phase, BirthmarkEnvironment env){\r
- for(StigmataHook hook: hooks){\r
- if(hook != null){\r
- hook.onHook(phase, env);\r
- }\r
- }\r
- }\r
-\r
- public void addHook(StigmataHook hook){\r
- hooks.add(hook);\r
- }\r
-\r
- public void removeHook(StigmataHook hook){\r
- hooks.remove(hook);\r
- }\r
-\r
- public int getHookCount(){\r
- return hooks.size();\r
- }\r
-\r
- public StigmataHook getHook(int index){\r
- return hooks.get(index);\r
- }\r
-\r
- public void addRuntimeHook(StigmataRuntimeHook hook){\r
- runtimeHooks.add(hook);\r
- }\r
-\r
- public void removeRuntimeHook(StigmataRuntimeHook hook){\r
- runtimeHooks.remove(hook);\r
- }\r
-\r
- public int getRuntimeHookCount(){\r
- return runtimeHooks.size();\r
- }\r
-\r
- public StigmataRuntimeHook getRuntimeHook(int index){\r
- return runtimeHooks.get(index);\r
- }\r
+package jp.sourceforge.stigmata.hook;
+
+/*
+ * $Id$
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class MultipleStigmataHook implements StigmataHook, StigmataRuntimeHook{
+ private List<StigmataHook> hooks = new ArrayList<StigmataHook>();
+ private List<StigmataRuntimeHook> runtimeHooks = new ArrayList<StigmataRuntimeHook>();
+
+ public void onHook(Phase phase, BirthmarkContext context){
+ for(StigmataRuntimeHook hook: runtimeHooks){
+ if(hook != null){
+ hook.onHook(phase, context);
+ }
+ }
+ }
+
+ public void onHook(Phase phase, BirthmarkEnvironment env){
+ for(StigmataHook hook: hooks){
+ if(hook != null){
+ hook.onHook(phase, env);
+ }
+ }
+ }
+
+ public void addHook(StigmataHook hook){
+ hooks.add(hook);
+ }
+
+ public void removeHook(StigmataHook hook){
+ hooks.remove(hook);
+ }
+
+ public int getHookCount(){
+ return hooks.size();
+ }
+
+ public StigmataHook getHook(int index){
+ return hooks.get(index);
+ }
+
+ public void addRuntimeHook(StigmataRuntimeHook hook){
+ runtimeHooks.add(hook);
+ }
+
+ public void removeRuntimeHook(StigmataRuntimeHook hook){
+ runtimeHooks.remove(hook);
+ }
+
+ public int getRuntimeHookCount(){
+ return runtimeHooks.size();
+ }
+
+ public StigmataRuntimeHook getRuntimeHook(int index){
+ return runtimeHooks.get(index);
+ }
}
\ No newline at end of file
-package jp.naist.se.stigmata.hook;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public enum Phase{\r
- SETUP,\r
- TEAR_DOWN,\r
- BEFORE_EXTRACTION,\r
- AFTER_EXTRACTION,\r
- BEFORE_COMPARISON,\r
- AFTER_COMPARISON,\r
- BEFORE_FILTERING,\r
- AFTER_FILTERING,\r
+package jp.sourceforge.stigmata.hook;
+
+/*
+ * $Id$
+ */
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public enum Phase{
+ SETUP,
+ TEAR_DOWN,
+ BEFORE_EXTRACTION,
+ AFTER_EXTRACTION,
+ BEFORE_COMPARISON,
+ AFTER_COMPARISON,
+ BEFORE_FILTERING,
+ AFTER_FILTERING,
}
\ No newline at end of file
-package jp.naist.se.stigmata.hook;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date\r
- */\r
-public interface StigmataHook{\r
- public void onHook(Phase phase, BirthmarkEnvironment env);\r
+package jp.sourceforge.stigmata.hook;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date
+ */
+public interface StigmataHook{
+ public void onHook(Phase phase, BirthmarkEnvironment env);
}
\ No newline at end of file
-package jp.naist.se.stigmata.hook;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.Iterator;\r
-\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.spi.StigmataHookSpi;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date\r
- */\r
-public class StigmataHookManager{\r
- private static final StigmataHookManager manager = new StigmataHookManager();\r
-\r
- /**\r
- * private constructor for singleton pattern.\r
- */\r
- private StigmataHookManager(){\r
- }\r
-\r
- public static StigmataHookManager getInstance(){\r
- return manager;\r
- }\r
-\r
- public void runHook(Phase phase, BirthmarkContext context){\r
- StigmataRuntimeHook hook = buildHook(phase, context.getEnvironment());\r
- hook.onHook(phase, context);\r
- }\r
-\r
- public void runHook(Phase phase, BirthmarkEnvironment env){\r
- StigmataHook hook = buildHook(phase, env);\r
- hook.onHook(phase, env);\r
- }\r
-\r
- private MultipleStigmataHook buildHook(Phase phase, BirthmarkEnvironment env){\r
- MultipleStigmataHook hooks = new MultipleStigmataHook();\r
-\r
- for(Iterator<StigmataHookSpi> i = env.lookupProviders(StigmataHookSpi.class); i.hasNext(); ){\r
- StigmataHookSpi service = i.next();\r
-\r
- switch(phase){\r
- case SETUP:\r
- hooks.addHook(service.onSetup());\r
- break;\r
- case TEAR_DOWN:\r
- hooks.addHook(service.onTearDown());\r
- break;\r
- case BEFORE_EXTRACTION:\r
- hooks.addRuntimeHook(service.beforeExtraction());\r
- break;\r
- case AFTER_EXTRACTION:\r
- hooks.addRuntimeHook(service.afterExtraction());\r
- break;\r
- case BEFORE_COMPARISON:\r
- hooks.addRuntimeHook(service.beforeComparison());\r
- break;\r
- case AFTER_COMPARISON:\r
- hooks.addRuntimeHook(service.afterComparison());\r
- break;\r
- case BEFORE_FILTERING:\r
- hooks.addRuntimeHook(service.beforeFiltering());\r
- break;\r
- case AFTER_FILTERING:\r
- hooks.addRuntimeHook(service.afterFiltering());\r
- break;\r
- default:\r
- throw new InternalError("invalid phase: " + phase);\r
- }\r
- }\r
- return hooks;\r
- }\r
+package jp.sourceforge.stigmata.hook;
+
+/*
+ * $Id$
+ */
+
+import java.util.Iterator;
+
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.spi.StigmataHookSpi;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date
+ */
+public class StigmataHookManager{
+ private static final StigmataHookManager manager = new StigmataHookManager();
+
+ /**
+ * private constructor for singleton pattern.
+ */
+ private StigmataHookManager(){
+ }
+
+ public static StigmataHookManager getInstance(){
+ return manager;
+ }
+
+ public void runHook(Phase phase, BirthmarkContext context){
+ StigmataRuntimeHook hook = buildHook(phase, context.getEnvironment());
+ hook.onHook(phase, context);
+ }
+
+ public void runHook(Phase phase, BirthmarkEnvironment env){
+ StigmataHook hook = buildHook(phase, env);
+ hook.onHook(phase, env);
+ }
+
+ private MultipleStigmataHook buildHook(Phase phase, BirthmarkEnvironment env){
+ MultipleStigmataHook hooks = new MultipleStigmataHook();
+
+ for(Iterator<StigmataHookSpi> i = env.lookupProviders(StigmataHookSpi.class); i.hasNext(); ){
+ StigmataHookSpi service = i.next();
+
+ switch(phase){
+ case SETUP:
+ hooks.addHook(service.onSetup());
+ break;
+ case TEAR_DOWN:
+ hooks.addHook(service.onTearDown());
+ break;
+ case BEFORE_EXTRACTION:
+ hooks.addRuntimeHook(service.beforeExtraction());
+ break;
+ case AFTER_EXTRACTION:
+ hooks.addRuntimeHook(service.afterExtraction());
+ break;
+ case BEFORE_COMPARISON:
+ hooks.addRuntimeHook(service.beforeComparison());
+ break;
+ case AFTER_COMPARISON:
+ hooks.addRuntimeHook(service.afterComparison());
+ break;
+ case BEFORE_FILTERING:
+ hooks.addRuntimeHook(service.beforeFiltering());
+ break;
+ case AFTER_FILTERING:
+ hooks.addRuntimeHook(service.afterFiltering());
+ break;
+ default:
+ throw new InternalError("invalid phase: " + phase);
+ }
+ }
+ return hooks;
+ }
}
\ No newline at end of file
-package jp.naist.se.stigmata.hook;\r
-\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date\r
- */\r
-public interface StigmataRuntimeHook{\r
- public void onHook(Phase phase, BirthmarkContext context);\r
+package jp.sourceforge.stigmata.hook;
+
+import jp.sourceforge.stigmata.BirthmarkContext;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date
+ */
+public interface StigmataRuntimeHook{
+ public void onHook(Phase phase, BirthmarkContext context);
}
\ No newline at end of file
-package jp.naist.se.stigmata.printer;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.PrintWriter;\r
-import java.io.StringWriter;\r
-\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public abstract class AbstractBirthmarkServicePrinter implements BirthmarkServicePrinter, Printer{\r
- public abstract void printResult(PrintWriter out, BirthmarkSpi[] spilist);\r
-\r
- public String getResult(BirthmarkSpi[] spilist){\r
- StringWriter writer = new StringWriter();\r
- PrintWriter out = new PrintWriter(writer);\r
-\r
- printResult(out, spilist);\r
-\r
- out.close();\r
- return writer.toString();\r
- }\r
-\r
- public void printHeader(PrintWriter out){\r
- }\r
-\r
- public void printFooter(PrintWriter out){\r
- out.flush();\r
- }\r
-}\r
+package jp.sourceforge.stigmata.printer;
+
+/*
+ * $Id$
+ */
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public abstract class AbstractBirthmarkServicePrinter implements BirthmarkServicePrinter, Printer{
+ public abstract void printResult(PrintWriter out, BirthmarkSpi[] spilist);
+
+ public String getResult(BirthmarkSpi[] spilist){
+ StringWriter writer = new StringWriter();
+ PrintWriter out = new PrintWriter(writer);
+
+ printResult(out, spilist);
+
+ out.close();
+ return writer.toString();
+ }
+
+ public void printHeader(PrintWriter out){
+ }
+
+ public void printFooter(PrintWriter out){
+ out.flush();
+ }
+}
-package jp.naist.se.stigmata.printer;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.PrintWriter;\r
-import java.io.StringWriter;\r
-\r
-import jp.naist.se.stigmata.ComparisonPair;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public abstract class AbstractComparisonPairPrinter implements ComparisonPairPrinter, Printer{\r
-\r
- public abstract void printResult(PrintWriter out, ComparisonPair pair);\r
-\r
- public void printFooter(PrintWriter out){\r
- out.flush();\r
- }\r
-\r
- public void printHeader(PrintWriter out){\r
- }\r
-\r
- public String getResult(ComparisonPair pair){\r
- StringWriter writer = new StringWriter();\r
- PrintWriter out = new PrintWriter(writer);\r
-\r
- printResult(out, pair);\r
-\r
- out.close();\r
- return writer.toString();\r
- }\r
-}\r
+package jp.sourceforge.stigmata.printer;
+
+/*
+ * $Id$
+ */
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import jp.sourceforge.stigmata.ComparisonPair;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public abstract class AbstractComparisonPairPrinter implements ComparisonPairPrinter, Printer{
+
+ public abstract void printResult(PrintWriter out, ComparisonPair pair);
+
+ public void printFooter(PrintWriter out){
+ out.flush();
+ }
+
+ public void printHeader(PrintWriter out){
+ }
+
+ public String getResult(ComparisonPair pair){
+ StringWriter writer = new StringWriter();
+ PrintWriter out = new PrintWriter(writer);
+
+ printResult(out, pair);
+
+ out.close();
+ return writer.toString();
+ }
+}
-package jp.naist.se.stigmata.printer;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.PrintWriter;\r
-import java.io.StringWriter;\r
-\r
-import jp.naist.se.stigmata.ComparisonResultSet;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public abstract class AbstractComparisonResultSetPrinter implements ComparisonResultSetPrinter, Printer{\r
- public abstract void printResult(PrintWriter out, ComparisonResultSet resultset);\r
-\r
- public void printHeader(PrintWriter out){\r
- }\r
-\r
- public void printFooter(PrintWriter out){\r
- out.flush();\r
- }\r
-\r
- public String getResult(ComparisonResultSet resultset){\r
- StringWriter writer = new StringWriter();\r
- PrintWriter out = new PrintWriter(writer);\r
-\r
- printResult(out, resultset);\r
-\r
- out.close();\r
- return writer.toString();\r
- }\r
-}\r
+package jp.sourceforge.stigmata.printer;
+
+/*
+ * $Id$
+ */
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import jp.sourceforge.stigmata.ComparisonResultSet;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public abstract class AbstractComparisonResultSetPrinter implements ComparisonResultSetPrinter, Printer{
+ public abstract void printResult(PrintWriter out, ComparisonResultSet resultset);
+
+ public void printHeader(PrintWriter out){
+ }
+
+ public void printFooter(PrintWriter out){
+ out.flush();
+ }
+
+ public String getResult(ComparisonResultSet resultset){
+ StringWriter writer = new StringWriter();
+ PrintWriter out = new PrintWriter(writer);
+
+ printResult(out, resultset);
+
+ out.close();
+ return writer.toString();
+ }
+}
-package jp.naist.se.stigmata.printer;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.PrintWriter;\r
-import java.io.StringWriter;\r
-\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public abstract class AbstractExtractionResultSetPrinter implements ExtractionResultSetPrinter{\r
- public abstract void printResult(PrintWriter out, ExtractionResultSet ers);\r
-\r
- public void printHeader(PrintWriter out){\r
- }\r
-\r
- public void printFooter(PrintWriter out){\r
- out.flush();\r
- }\r
-\r
- public String getResult(ExtractionResultSet ers){\r
- StringWriter writer = new StringWriter();\r
- PrintWriter out = new PrintWriter(writer);\r
-\r
- printResult(out, ers);\r
-\r
- out.close();\r
- return writer.toString();\r
- }\r
-}\r
+package jp.sourceforge.stigmata.printer;
+
+/*
+ * $Id$
+ */
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import jp.sourceforge.stigmata.ExtractionResultSet;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public abstract class AbstractExtractionResultSetPrinter implements ExtractionResultSetPrinter{
+ public abstract void printResult(PrintWriter out, ExtractionResultSet ers);
+
+ public void printHeader(PrintWriter out){
+ }
+
+ public void printFooter(PrintWriter out){
+ out.flush();
+ }
+
+ public String getResult(ExtractionResultSet ers){
+ StringWriter writer = new StringWriter();
+ PrintWriter out = new PrintWriter(writer);
+
+ printResult(out, ers);
+
+ out.close();
+ return writer.toString();
+ }
+}
-package jp.naist.se.stigmata.printer;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.IOException;\r
-import java.io.PrintWriter;\r
-\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public interface BirthmarkServicePrinter{\r
- public void printResult(PrintWriter out, BirthmarkSpi[] spilist) throws IOException;\r
-\r
- public String getResult(BirthmarkSpi[] spilist);\r
-}\r
+package jp.sourceforge.stigmata.printer;
+
+/*
+ * $Id$
+ */
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public interface BirthmarkServicePrinter{
+ public void printResult(PrintWriter out, BirthmarkSpi[] spilist) throws IOException;
+
+ public String getResult(BirthmarkSpi[] spilist);
+}
-package jp.naist.se.stigmata.printer;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.PrintWriter;\r
-\r
-import jp.naist.se.stigmata.ComparisonPair;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public interface ComparisonPairPrinter{\r
- public String getResult(ComparisonPair pair);\r
-\r
- public void printResult(PrintWriter out, ComparisonPair pair);\r
-}\r
+package jp.sourceforge.stigmata.printer;
+
+/*
+ * $Id$
+ */
+
+import java.io.PrintWriter;
+
+import jp.sourceforge.stigmata.ComparisonPair;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public interface ComparisonPairPrinter{
+ public String getResult(ComparisonPair pair);
+
+ public void printResult(PrintWriter out, ComparisonPair pair);
+}
-package jp.naist.se.stigmata.printer;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.PrintWriter;\r
-\r
-import jp.naist.se.stigmata.ComparisonResultSet;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public interface ComparisonResultSetPrinter{\r
- public void printResult(PrintWriter out, ComparisonResultSet resultset);\r
-\r
- public String getResult(ComparisonResultSet resultset);\r
-}\r
+package jp.sourceforge.stigmata.printer;
+
+/*
+ * $Id$
+ */
+
+import java.io.PrintWriter;
+
+import jp.sourceforge.stigmata.ComparisonResultSet;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public interface ComparisonResultSetPrinter{
+ public void printResult(PrintWriter out, ComparisonResultSet resultset);
+
+ public String getResult(ComparisonResultSet resultset);
+}
-package jp.naist.se.stigmata.printer;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.PrintWriter;\r
-\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public interface ExtractionResultSetPrinter{\r
- public void printResult(PrintWriter out, ExtractionResultSet ers);\r
-\r
- public String getResult(ExtractionResultSet ers);\r
-}\r
+package jp.sourceforge.stigmata.printer;
+
+/*
+ * $Id$
+ */
+
+import java.io.PrintWriter;
+
+import jp.sourceforge.stigmata.ExtractionResultSet;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public interface ExtractionResultSetPrinter{
+ public void printResult(PrintWriter out, ExtractionResultSet ers);
+
+ public String getResult(ExtractionResultSet ers);
+}
-package jp.naist.se.stigmata.printer;\r
-\r
-import java.io.PrintWriter;\r
-\r
-interface Printer{\r
- public void printHeader(PrintWriter out);\r
-\r
- public void printFooter(PrintWriter out);\r
-}\r
+package jp.sourceforge.stigmata.printer;
+
+import java.io.PrintWriter;
+
+interface Printer{
+ public void printHeader(PrintWriter out);
+
+ public void printFooter(PrintWriter out);
+}
-package jp.naist.se.stigmata.printer;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.HashMap;\r
-import java.util.Iterator;\r
-import java.util.Map;\r
-\r
-import javax.imageio.spi.ServiceRegistry;\r
-\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.printer.csv.CsvResultPrinterService;\r
-import jp.naist.se.stigmata.spi.ResultPrinterSpi;\r
-\r
-/**\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class PrinterManager{\r
- private static final PrinterManager manager = new PrinterManager();\r
-\r
- private Map<String, ResultPrinterSpi> formats = new HashMap<String, ResultPrinterSpi>();\r
-\r
- private PrinterManager(){\r
- for(Iterator<ResultPrinterSpi> i = ServiceRegistry.lookupProviders(ResultPrinterSpi.class); i.hasNext(); ){\r
- ResultPrinterSpi spi = i.next();\r
- addService(spi);\r
- }\r
- }\r
-\r
- public static void updateServices(BirthmarkEnvironment environment){\r
- PrinterManager instance = getInstance();\r
- for(Iterator<ResultPrinterSpi> i = environment.lookupProviders(ResultPrinterSpi.class); i.hasNext(); ){\r
- ResultPrinterSpi spi = i.next();\r
- instance.addService(spi);\r
- }\r
- }\r
-\r
- public static ResultPrinterSpi getDefaultFormatService(){\r
- return new CsvResultPrinterService();\r
- }\r
-\r
- public static PrinterManager getInstance(){\r
- return manager;\r
- }\r
-\r
- public ResultPrinterSpi getService(String format){\r
- return formats.get(format);\r
- }\r
-\r
- private void addService(ResultPrinterSpi service){\r
- formats.put(service.getFormat(), service);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.printer;
+
+/*
+ * $Id$
+ */
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.imageio.spi.ServiceRegistry;
+
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.printer.csv.CsvResultPrinterService;
+import jp.sourceforge.stigmata.spi.ResultPrinterSpi;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class PrinterManager{
+ private static final PrinterManager manager = new PrinterManager();
+
+ private Map<String, ResultPrinterSpi> formats = new HashMap<String, ResultPrinterSpi>();
+
+ private PrinterManager(){
+ for(Iterator<ResultPrinterSpi> i = ServiceRegistry.lookupProviders(ResultPrinterSpi.class); i.hasNext(); ){
+ ResultPrinterSpi spi = i.next();
+ addService(spi);
+ }
+ }
+
+ public static void updateServices(BirthmarkEnvironment environment){
+ PrinterManager instance = getInstance();
+ for(Iterator<ResultPrinterSpi> i = environment.lookupProviders(ResultPrinterSpi.class); i.hasNext(); ){
+ ResultPrinterSpi spi = i.next();
+ instance.addService(spi);
+ }
+ }
+
+ public static ResultPrinterSpi getDefaultFormatService(){
+ return new CsvResultPrinterService();
+ }
+
+ public static PrinterManager getInstance(){
+ return manager;
+ }
+
+ public ResultPrinterSpi getService(String format){
+ return formats.get(format);
+ }
+
+ private void addService(ResultPrinterSpi service){
+ formats.put(service.getFormat(), service);
+ }
+}
-package jp.naist.se.stigmata.printer.csv;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.PrintWriter;\r
-\r
-import jp.naist.se.stigmata.printer.AbstractBirthmarkServicePrinter;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkServiceCsvPrinter extends AbstractBirthmarkServicePrinter{\r
- public void printResult(PrintWriter out, BirthmarkSpi[] spilist){\r
- printHeader(out);\r
- for(BirthmarkSpi spi: spilist){\r
- out.print(spi.getType());\r
- out.print(",");\r
- out.print(spi.getDisplayType());\r
- out.print(",");\r
- out.print(spi.getClass().getName());\r
- out.print(",");\r
- out.print(spi.getDescription());\r
- out.println();\r
- }\r
- printFooter(out);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.printer.csv;
+
+/*
+ * $Id$
+ */
+
+import java.io.PrintWriter;
+
+import jp.sourceforge.stigmata.printer.AbstractBirthmarkServicePrinter;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkServiceCsvPrinter extends AbstractBirthmarkServicePrinter{
+ public void printResult(PrintWriter out, BirthmarkSpi[] spilist){
+ printHeader(out);
+ for(BirthmarkSpi spi: spilist){
+ out.print(spi.getType());
+ out.print(",");
+ out.print(spi.getDisplayType());
+ out.print(",");
+ out.print(spi.getClass().getName());
+ out.print(",");
+ out.print(spi.getDescription());
+ out.println();
+ }
+ printFooter(out);
+ }
+}
-package jp.naist.se.stigmata.printer.csv;\r
-\r
-import java.io.PrintWriter;\r
-\r
-import jp.naist.se.stigmata.ComparisonPair;\r
-import jp.naist.se.stigmata.ComparisonPairElement;\r
-import jp.naist.se.stigmata.printer.AbstractComparisonPairPrinter;\r
-\r
-public class ComparisonPairCsvPrinter extends AbstractComparisonPairPrinter{\r
- private ExtractionResultSetCsvPrinter list;\r
-\r
- public ComparisonPairCsvPrinter(ExtractionResultSetCsvPrinter list){\r
- this.list = list;\r
- }\r
-\r
- @Override\r
- public void printResult(PrintWriter out, ComparisonPair pair){\r
- list.printBirthmarkSet(out, pair.getTarget1());\r
- list.printBirthmarkSet(out, pair.getTarget2());\r
-\r
- for(ComparisonPairElement element: pair){\r
- out.print("compare,");\r
- out.print(element.getType());\r
- out.print(",");\r
- out.println(element.getSimilarity());\r
- }\r
- out.flush();\r
- }\r
-}\r
+package jp.sourceforge.stigmata.printer.csv;
+
+import java.io.PrintWriter;
+
+import jp.sourceforge.stigmata.ComparisonPair;
+import jp.sourceforge.stigmata.ComparisonPairElement;
+import jp.sourceforge.stigmata.printer.AbstractComparisonPairPrinter;
+
+public class ComparisonPairCsvPrinter extends AbstractComparisonPairPrinter{
+ private ExtractionResultSetCsvPrinter list;
+
+ public ComparisonPairCsvPrinter(ExtractionResultSetCsvPrinter list){
+ this.list = list;
+ }
+
+ @Override
+ public void printResult(PrintWriter out, ComparisonPair pair){
+ list.printBirthmarkSet(out, pair.getTarget1());
+ list.printBirthmarkSet(out, pair.getTarget2());
+
+ for(ComparisonPairElement element: pair){
+ out.print("compare,");
+ out.print(element.getType());
+ out.print(",");
+ out.println(element.getSimilarity());
+ }
+ out.flush();
+ }
+}
-package jp.naist.se.stigmata.printer.csv;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.PrintWriter;\r
-import java.util.ArrayList;\r
-import java.util.HashMap;\r
-import java.util.LinkedHashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-import jp.naist.se.stigmata.ComparisonPair;\r
-import jp.naist.se.stigmata.ComparisonResultSet;\r
-import jp.naist.se.stigmata.printer.AbstractComparisonResultSetPrinter;\r
-import jp.naist.se.stigmata.result.CertainPairComparisonResultSet;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ComparisonResultSetCsvPrinter extends AbstractComparisonResultSetPrinter{\r
- public ComparisonResultSetCsvPrinter(){\r
- }\r
-\r
- @Override\r
- public void printResult(PrintWriter out, ComparisonResultSet resultset){\r
- if(resultset instanceof CertainPairComparisonResultSet){\r
- printResultImpl(out, (CertainPairComparisonResultSet)resultset);\r
- }\r
- else{\r
- printResultImpl(out, resultset);\r
- }\r
- }\r
-\r
- private void printResultImpl(PrintWriter out, CertainPairComparisonResultSet resultset){\r
- for(ComparisonPair pair: resultset){\r
- out.print(pair.getTarget1().getName());\r
- out.print(",");\r
- out.print(pair.getTarget1().getName());\r
- out.print(",");\r
- out.println(pair.calculateSimilarity());\r
- }\r
- }\r
-\r
- private void printResultImpl(PrintWriter out, ComparisonResultSet resultset){\r
- Map<String, Map<String, Double>> map = new LinkedHashMap<String, Map<String, Double>>();\r
- List<String> names = new ArrayList<String>();\r
-\r
- for(ComparisonPair pair: resultset){\r
- Map<String, Double> val = map.get(pair.getTarget1().getName());\r
- if(val == null){\r
- val = new HashMap<String, Double>();\r
- }\r
- val.put(pair.getTarget2().getName(), new Double(pair.calculateSimilarity()));\r
- if(!names.contains(pair.getTarget2().getName())){\r
- names.add(pair.getTarget2().getName());\r
- }\r
- map.put(pair.getTarget1().getName(), val);\r
- }\r
-\r
- for(String name: names){\r
- out.print(",");\r
- out.print(name);\r
- }\r
- out.println();\r
- for(Map.Entry<String, Map<String, Double>> entry: map.entrySet()){\r
- out.print(entry.getKey());\r
- Map<String, Double> element = entry.getValue();\r
- for(String name: names){\r
- out.print(",");\r
- Double v = element.get(name);\r
- if(v != null){\r
- out.print(v.doubleValue());\r
- }\r
- }\r
- out.println();\r
- }\r
- out.flush();\r
- }\r
-}\r
+package jp.sourceforge.stigmata.printer.csv;
+
+/*
+ * $Id$
+ */
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import jp.sourceforge.stigmata.ComparisonPair;
+import jp.sourceforge.stigmata.ComparisonResultSet;
+import jp.sourceforge.stigmata.printer.AbstractComparisonResultSetPrinter;
+import jp.sourceforge.stigmata.result.CertainPairComparisonResultSet;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ComparisonResultSetCsvPrinter extends AbstractComparisonResultSetPrinter{
+ public ComparisonResultSetCsvPrinter(){
+ }
+
+ @Override
+ public void printResult(PrintWriter out, ComparisonResultSet resultset){
+ if(resultset instanceof CertainPairComparisonResultSet){
+ printResultImpl(out, (CertainPairComparisonResultSet)resultset);
+ }
+ else{
+ printResultImpl(out, resultset);
+ }
+ }
+
+ private void printResultImpl(PrintWriter out, CertainPairComparisonResultSet resultset){
+ for(ComparisonPair pair: resultset){
+ out.print(pair.getTarget1().getName());
+ out.print(",");
+ out.print(pair.getTarget1().getName());
+ out.print(",");
+ out.println(pair.calculateSimilarity());
+ }
+ }
+
+ private void printResultImpl(PrintWriter out, ComparisonResultSet resultset){
+ Map<String, Map<String, Double>> map = new LinkedHashMap<String, Map<String, Double>>();
+ List<String> names = new ArrayList<String>();
+
+ for(ComparisonPair pair: resultset){
+ Map<String, Double> val = map.get(pair.getTarget1().getName());
+ if(val == null){
+ val = new HashMap<String, Double>();
+ }
+ val.put(pair.getTarget2().getName(), new Double(pair.calculateSimilarity()));
+ if(!names.contains(pair.getTarget2().getName())){
+ names.add(pair.getTarget2().getName());
+ }
+ map.put(pair.getTarget1().getName(), val);
+ }
+
+ for(String name: names){
+ out.print(",");
+ out.print(name);
+ }
+ out.println();
+ for(Map.Entry<String, Map<String, Double>> entry: map.entrySet()){
+ out.print(entry.getKey());
+ Map<String, Double> element = entry.getValue();
+ for(String name: names){
+ out.print(",");
+ Double v = element.get(name);
+ if(v != null){
+ out.print(v.doubleValue());
+ }
+ }
+ out.println();
+ }
+ out.flush();
+ }
+}
-package jp.naist.se.stigmata.printer.csv;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.Locale;\r
-\r
-import jp.naist.se.stigmata.printer.BirthmarkServicePrinter;\r
-import jp.naist.se.stigmata.printer.ComparisonPairPrinter;\r
-import jp.naist.se.stigmata.printer.ComparisonResultSetPrinter;\r
-import jp.naist.se.stigmata.printer.ExtractionResultSetPrinter;\r
-import jp.naist.se.stigmata.spi.AbstractServiceProvider;\r
-import jp.naist.se.stigmata.spi.ResultPrinterSpi;\r
-import jp.naist.se.stigmata.utils.LocalizedDescriptionManager;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class CsvResultPrinterService extends AbstractServiceProvider implements ResultPrinterSpi{\r
- private BirthmarkServiceCsvPrinter serviceList = new BirthmarkServiceCsvPrinter();\r
- private ExtractionResultSetCsvPrinter list = new ExtractionResultSetCsvPrinter();\r
- private ComparisonPairCsvPrinter pairPrinter = new ComparisonPairCsvPrinter(list);\r
- private ComparisonResultSetCsvPrinter compare = new ComparisonResultSetCsvPrinter();\r
-\r
- /**\r
- * returns a localized description of the birthmark this service provides.\r
- */\r
- public String getDescription(Locale locale){\r
- return LocalizedDescriptionManager.getInstance().getDescription(\r
- locale, getFormat(), LocalizedDescriptionManager.ServiceCategory.formatter\r
- );\r
- }\r
-\r
- public String getFormat(){\r
- return "csv";\r
- }\r
- \r
- public ComparisonResultSetPrinter getComparisonResultSetPrinter() {\r
- return compare;\r
- }\r
-\r
- public ExtractionResultSetPrinter getExtractionResultSetPrinter() {\r
- return list;\r
- }\r
-\r
- public BirthmarkServicePrinter getBirthmarkServicePrinter() {\r
- return serviceList;\r
- }\r
-\r
- public ComparisonPairPrinter getComparisonPairPrinter(){\r
- return pairPrinter;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.printer.csv;
+
+/*
+ * $Id$
+ */
+
+import java.util.Locale;
+
+import jp.sourceforge.stigmata.printer.BirthmarkServicePrinter;
+import jp.sourceforge.stigmata.printer.ComparisonPairPrinter;
+import jp.sourceforge.stigmata.printer.ComparisonResultSetPrinter;
+import jp.sourceforge.stigmata.printer.ExtractionResultSetPrinter;
+import jp.sourceforge.stigmata.spi.AbstractServiceProvider;
+import jp.sourceforge.stigmata.spi.ResultPrinterSpi;
+import jp.sourceforge.stigmata.utils.LocalizedDescriptionManager;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class CsvResultPrinterService extends AbstractServiceProvider implements ResultPrinterSpi{
+ private BirthmarkServiceCsvPrinter serviceList = new BirthmarkServiceCsvPrinter();
+ private ExtractionResultSetCsvPrinter list = new ExtractionResultSetCsvPrinter();
+ private ComparisonPairCsvPrinter pairPrinter = new ComparisonPairCsvPrinter(list);
+ private ComparisonResultSetCsvPrinter compare = new ComparisonResultSetCsvPrinter();
+
+ /**
+ * returns a localized description of the birthmark this service provides.
+ */
+ public String getDescription(Locale locale){
+ return LocalizedDescriptionManager.getInstance().getDescription(
+ locale, getFormat(), LocalizedDescriptionManager.ServiceCategory.formatter
+ );
+ }
+
+ public String getFormat(){
+ return "csv";
+ }
+
+ public ComparisonResultSetPrinter getComparisonResultSetPrinter() {
+ return compare;
+ }
+
+ public ExtractionResultSetPrinter getExtractionResultSetPrinter() {
+ return list;
+ }
+
+ public BirthmarkServicePrinter getBirthmarkServicePrinter() {
+ return serviceList;
+ }
+
+ public ComparisonPairPrinter getComparisonPairPrinter(){
+ return pairPrinter;
+ }
+}
-package jp.naist.se.stigmata.printer.csv;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.PrintWriter;\r
-import java.util.Iterator;\r
-\r
-import jp.naist.se.stigmata.Birthmark;\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-import jp.naist.se.stigmata.ExtractionTarget;\r
-import jp.naist.se.stigmata.printer.AbstractExtractionResultSetPrinter;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ExtractionResultSetCsvPrinter extends AbstractExtractionResultSetPrinter{\r
- public void printResult(PrintWriter out, ExtractionResultSet ers){\r
- printHeader(out);\r
- for(Iterator<BirthmarkSet> i = ers.birthmarkSets(ExtractionTarget.TARGET_BOTH); i.hasNext(); ){\r
- printBirthmarkSet(out, i.next());\r
- }\r
- printFooter(out);\r
- }\r
-\r
- protected void printBirthmarkSet(PrintWriter out, BirthmarkSet holder){\r
- for(String type: holder.getBirthmarkTypes()){\r
- out.print(holder.getName());\r
- out.print(",");\r
- out.print(holder.getLocation());\r
-\r
- Birthmark birthmark = holder.getBirthmark(type);\r
- out.print(",");\r
- out.print(birthmark.getType());\r
- for(Iterator<BirthmarkElement> elements = birthmark.iterator(); elements.hasNext(); ){\r
- out.print(",");\r
- out.print(elements.next());\r
- }\r
- out.println();\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata.printer.csv;
+
+/*
+ * $Id$
+ */
+
+import java.io.PrintWriter;
+import java.util.Iterator;
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.ExtractionTarget;
+import jp.sourceforge.stigmata.printer.AbstractExtractionResultSetPrinter;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ExtractionResultSetCsvPrinter extends AbstractExtractionResultSetPrinter{
+ public void printResult(PrintWriter out, ExtractionResultSet ers){
+ printHeader(out);
+ for(Iterator<BirthmarkSet> i = ers.birthmarkSets(ExtractionTarget.TARGET_BOTH); i.hasNext(); ){
+ printBirthmarkSet(out, i.next());
+ }
+ printFooter(out);
+ }
+
+ protected void printBirthmarkSet(PrintWriter out, BirthmarkSet holder){
+ for(String type: holder.getBirthmarkTypes()){
+ out.print(holder.getName());
+ out.print(",");
+ out.print(holder.getLocation());
+
+ Birthmark birthmark = holder.getBirthmark(type);
+ out.print(",");
+ out.print(birthmark.getType());
+ for(Iterator<BirthmarkElement> elements = birthmark.iterator(); elements.hasNext(); ){
+ out.print(",");
+ out.print(elements.next());
+ }
+ out.println();
+ }
+ }
+}
-package jp.naist.se.stigmata.printer.xml;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.PrintWriter;\r
-\r
-import jp.naist.se.stigmata.printer.AbstractBirthmarkServicePrinter;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkServiceXmlPrinter extends AbstractBirthmarkServicePrinter{\r
- public void printResult(PrintWriter out, BirthmarkSpi[] spilist){\r
- out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");\r
- out.println("<birthmark-result-set>");\r
- out.println(" <birthmark-services>");\r
- for(BirthmarkSpi spi: spilist){\r
- out.println(" <birthmark-service>");\r
- out.printf(" <type>%s</type>%n", spi.getType());\r
- out.printf(" <display-name>%s</display-name>%n", spi.getDisplayType());\r
- out.printf(" <description>%s</description>%n", spi.getDescription());\r
- out.printf(" <class-name>%s</class-name>%n", spi.getClass().getName());\r
- out.printf(" <extractor>%s</extractor>%n", spi.getExtractorClassName());\r
- out.printf(" <comparator>%s</comparator>%n", spi.getComparatorClassName());\r
- out.println(" </birthmark-service>");\r
- }\r
- out.println(" </birthmark-services>");\r
- out.println("</birthmark-result-set>");\r
-\r
- out.flush();\r
- }\r
-}\r
+package jp.sourceforge.stigmata.printer.xml;
+
+/*
+ * $Id$
+ */
+
+import java.io.PrintWriter;
+
+import jp.sourceforge.stigmata.printer.AbstractBirthmarkServicePrinter;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkServiceXmlPrinter extends AbstractBirthmarkServicePrinter{
+ public void printResult(PrintWriter out, BirthmarkSpi[] spilist){
+ out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
+ out.println("<birthmark-result-set>");
+ out.println(" <birthmark-services>");
+ for(BirthmarkSpi spi: spilist){
+ out.println(" <birthmark-service>");
+ out.printf(" <type>%s</type>%n", spi.getType());
+ out.printf(" <display-name>%s</display-name>%n", spi.getDisplayType());
+ out.printf(" <description>%s</description>%n", spi.getDescription());
+ out.printf(" <class-name>%s</class-name>%n", spi.getClass().getName());
+ out.printf(" <extractor>%s</extractor>%n", spi.getExtractorClassName());
+ out.printf(" <comparator>%s</comparator>%n", spi.getComparatorClassName());
+ out.println(" </birthmark-service>");
+ }
+ out.println(" </birthmark-services>");
+ out.println("</birthmark-result-set>");
+
+ out.flush();
+ }
+}
-package jp.naist.se.stigmata.printer.xml;\r
-\r
-import java.io.PrintWriter;\r
-\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.ComparisonPair;\r
-import jp.naist.se.stigmata.ComparisonPairElement;\r
-import jp.naist.se.stigmata.printer.AbstractComparisonPairPrinter;\r
-\r
-public class ComparisonPairXmlPrinter extends AbstractComparisonPairPrinter{\r
- private ExtractionResultSetXmlPrinter list;\r
-\r
- public ComparisonPairXmlPrinter(ExtractionResultSetXmlPrinter list){\r
- this.list = list;\r
- }\r
-\r
- @Override\r
- public void printResult(PrintWriter out, ComparisonPair pair){\r
- printHeader(out);\r
- out.println(" <extracted-birthmarks>");\r
- list.printBirthmarkSet(out, pair.getTarget1());\r
- list.printBirthmarkSet(out, pair.getTarget2());\r
- out.println(" </extracted-birthmarks>");\r
- out.println(" <comparison-result-set>");\r
- printComparisonPair(out, pair);\r
- out.println(" </comparison-result-set>");\r
- printFooter(out);\r
- }\r
-\r
- @Override\r
- public void printHeader(PrintWriter out){\r
- out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");\r
- out.println("<birthmark-result-set>");\r
- }\r
-\r
- @Override\r
- public void printFooter(PrintWriter out){\r
- out.println("</birthmark-result-set>");\r
- out.flush();\r
- }\r
- public void printComparisonPair(PrintWriter out, ComparisonPair pair){\r
- out.println(" <comparison-result>");\r
- printTarget(out, pair.getTarget1(), 1);\r
- printTarget(out, pair.getTarget2(), 2);\r
- out.println(" <birthmark-similarities>");\r
- for(ComparisonPairElement element: pair){\r
- printPairElement(out, element);\r
- }\r
- out.println(" </birthmark-similarities>");\r
- out.print(" <similarity>");\r
- out.print(pair.calculateSimilarity());\r
- out.println("</similarity>");\r
- out.println(" </comparison-result>");\r
- }\r
-\r
- private void printTarget(PrintWriter out, BirthmarkSet set, int index){\r
- out.printf(" <target%d>%n", index);\r
- out.printf(" <name>%s</name>%n", list.escapeToXmlString(set.getName()));\r
- out.printf(" <location>%s</location>%n", list.escapeToXmlString(set.getLocation()));\r
- out.printf(" </target%d>%n", index);\r
- }\r
-\r
- private void printPairElement(PrintWriter out, ComparisonPairElement e){\r
- out.printf(" <birthmark-similarity type=\"%s\" comparison-count=\"%d\">%g</birthmark-similarity>%n",\r
- e.getType(), e.getComparisonCount(), e.getSimilarity());\r
-\r
- }\r
-}\r
+package jp.sourceforge.stigmata.printer.xml;
+
+import java.io.PrintWriter;
+
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.ComparisonPair;
+import jp.sourceforge.stigmata.ComparisonPairElement;
+import jp.sourceforge.stigmata.printer.AbstractComparisonPairPrinter;
+
+public class ComparisonPairXmlPrinter extends AbstractComparisonPairPrinter{
+ private ExtractionResultSetXmlPrinter list;
+
+ public ComparisonPairXmlPrinter(ExtractionResultSetXmlPrinter list){
+ this.list = list;
+ }
+
+ @Override
+ public void printResult(PrintWriter out, ComparisonPair pair){
+ printHeader(out);
+ out.println(" <extracted-birthmarks>");
+ list.printBirthmarkSet(out, pair.getTarget1());
+ list.printBirthmarkSet(out, pair.getTarget2());
+ out.println(" </extracted-birthmarks>");
+ out.println(" <comparison-result-set>");
+ printComparisonPair(out, pair);
+ out.println(" </comparison-result-set>");
+ printFooter(out);
+ }
+
+ @Override
+ public void printHeader(PrintWriter out){
+ out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
+ out.println("<birthmark-result-set>");
+ }
+
+ @Override
+ public void printFooter(PrintWriter out){
+ out.println("</birthmark-result-set>");
+ out.flush();
+ }
+ public void printComparisonPair(PrintWriter out, ComparisonPair pair){
+ out.println(" <comparison-result>");
+ printTarget(out, pair.getTarget1(), 1);
+ printTarget(out, pair.getTarget2(), 2);
+ out.println(" <birthmark-similarities>");
+ for(ComparisonPairElement element: pair){
+ printPairElement(out, element);
+ }
+ out.println(" </birthmark-similarities>");
+ out.print(" <similarity>");
+ out.print(pair.calculateSimilarity());
+ out.println("</similarity>");
+ out.println(" </comparison-result>");
+ }
+
+ private void printTarget(PrintWriter out, BirthmarkSet set, int index){
+ out.printf(" <target%d>%n", index);
+ out.printf(" <name>%s</name>%n", list.escapeToXmlString(set.getName()));
+ out.printf(" <location>%s</location>%n", list.escapeToXmlString(set.getLocation()));
+ out.printf(" </target%d>%n", index);
+ }
+
+ private void printPairElement(PrintWriter out, ComparisonPairElement e){
+ out.printf(" <birthmark-similarity type=\"%s\" comparison-count=\"%d\">%g</birthmark-similarity>%n",
+ e.getType(), e.getComparisonCount(), e.getSimilarity());
+
+ }
+}
-package jp.naist.se.stigmata.printer.xml;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.PrintWriter;\r
-\r
-import jp.naist.se.stigmata.ComparisonPair;\r
-import jp.naist.se.stigmata.ComparisonResultSet;\r
-import jp.naist.se.stigmata.printer.AbstractComparisonResultSetPrinter;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ComparisonResultSetXmlPrinter extends AbstractComparisonResultSetPrinter{\r
- private ComparisonPairXmlPrinter pairPrinter;\r
-\r
- public ComparisonResultSetXmlPrinter(ComparisonPairXmlPrinter pairPrinter){\r
- this.pairPrinter = pairPrinter;\r
- }\r
-\r
- @Override\r
- public void printHeader(PrintWriter out){\r
- out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");\r
- out.println("<birthmark-result-set>");\r
- out.println(" <comparison-result-set>");\r
- }\r
-\r
- @Override\r
- public void printFooter(PrintWriter out){\r
- out.println(" </comparison-result-set>");\r
- out.println("</birthmark-result-set>");\r
- out.flush();\r
- }\r
-\r
- @Override\r
- public void printResult(PrintWriter out, ComparisonResultSet resultset){\r
- printHeader(out);\r
- for(ComparisonPair pair: resultset){\r
- pairPrinter.printComparisonPair(out, pair);\r
- }\r
- printFooter(out);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.printer.xml;
+
+/*
+ * $Id$
+ */
+
+import java.io.PrintWriter;
+
+import jp.sourceforge.stigmata.ComparisonPair;
+import jp.sourceforge.stigmata.ComparisonResultSet;
+import jp.sourceforge.stigmata.printer.AbstractComparisonResultSetPrinter;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ComparisonResultSetXmlPrinter extends AbstractComparisonResultSetPrinter{
+ private ComparisonPairXmlPrinter pairPrinter;
+
+ public ComparisonResultSetXmlPrinter(ComparisonPairXmlPrinter pairPrinter){
+ this.pairPrinter = pairPrinter;
+ }
+
+ @Override
+ public void printHeader(PrintWriter out){
+ out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
+ out.println("<birthmark-result-set>");
+ out.println(" <comparison-result-set>");
+ }
+
+ @Override
+ public void printFooter(PrintWriter out){
+ out.println(" </comparison-result-set>");
+ out.println("</birthmark-result-set>");
+ out.flush();
+ }
+
+ @Override
+ public void printResult(PrintWriter out, ComparisonResultSet resultset){
+ printHeader(out);
+ for(ComparisonPair pair: resultset){
+ pairPrinter.printComparisonPair(out, pair);
+ }
+ printFooter(out);
+ }
+}
-package jp.naist.se.stigmata.printer.xml;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.PrintWriter;\r
-import java.util.Iterator;\r
-\r
-import jp.naist.se.stigmata.Birthmark;\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-import jp.naist.se.stigmata.ExtractionTarget;\r
-import jp.naist.se.stigmata.printer.AbstractExtractionResultSetPrinter;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ExtractionResultSetXmlPrinter extends AbstractExtractionResultSetPrinter{\r
- public void printResult(PrintWriter out, ExtractionResultSet ers){\r
- printHeader(out);\r
-\r
- out.printf(" <unit>%s</unit>%n", ers.getExtractionUnit());\r
- out.printf(" <birthmark-types>%n");\r
- for(String type: ers.getBirthmarkTypes()){\r
- out.printf(" <birthmark-type>%s</birthmark-type>%n", type);\r
- }\r
- out.printf(" </birthmark-types>%n");\r
- for(Iterator<BirthmarkSet> i = ers.birthmarkSets(ExtractionTarget.TARGET_BOTH); i.hasNext(); ){\r
- printBirthmarkSet(out, i.next());\r
- }\r
- printFooter(out);\r
- }\r
-\r
- public void printHeader(PrintWriter out){\r
- out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");\r
- out.println("<birthmark-result-set>");\r
- out.println(" <extracted-birthmarks>");\r
- }\r
-\r
- public void printFooter(PrintWriter out){\r
- out.println(" </extracted-birthmarks>");\r
- out.println("</birthmark-result-set>");\r
- out.flush();\r
- }\r
-\r
- public void printBirthmarkSet(PrintWriter out, BirthmarkSet set){\r
- out.println(" <extracted-birthmark>");\r
- out.printf(" <name>%s</name>%n", escapeToXmlString(set.getName()));\r
- out.printf(" <location>%s</location>%n", escapeToXmlString(set.getLocation()));\r
- for(Iterator<String> i = set.birthmarkTypes(); i.hasNext(); ){\r
- String type = i.next();\r
- Birthmark birthmark = set.getBirthmark(type);\r
- out.printf(" <birthmark type=\"%s\" count=\"%d\">%n",\r
- birthmark.getType(), birthmark.getElementCount());\r
- for(Iterator<BirthmarkElement> elements = birthmark.iterator(); elements.hasNext(); ){\r
- out.printf(" <element>%s</element>%n",\r
- escapeToXmlString(String.valueOf(elements.next())));\r
- }\r
- out.println(" </birthmark>");\r
- }\r
- out.println(" </extracted-birthmark>");\r
- }\r
-\r
- public String escapeToXmlString(Object o){\r
- if(o != null){\r
- return escapeToXmlString(o.toString());\r
- }\r
- return null;\r
- }\r
-\r
- public String escapeToXmlString(String string){\r
- string = string.replaceAll("&", "&");\r
- string = string.replaceAll("\"", """);\r
- string = string.replaceAll("<", "<");\r
- string = string.replaceAll(">", ">");\r
-\r
- return string;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.printer.xml;
+
+/*
+ * $Id$
+ */
+
+import java.io.PrintWriter;
+import java.util.Iterator;
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.ExtractionTarget;
+import jp.sourceforge.stigmata.printer.AbstractExtractionResultSetPrinter;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ExtractionResultSetXmlPrinter extends AbstractExtractionResultSetPrinter{
+ public void printResult(PrintWriter out, ExtractionResultSet ers){
+ printHeader(out);
+
+ out.printf(" <unit>%s</unit>%n", ers.getExtractionUnit());
+ out.printf(" <birthmark-types>%n");
+ for(String type: ers.getBirthmarkTypes()){
+ out.printf(" <birthmark-type>%s</birthmark-type>%n", type);
+ }
+ out.printf(" </birthmark-types>%n");
+ for(Iterator<BirthmarkSet> i = ers.birthmarkSets(ExtractionTarget.TARGET_BOTH); i.hasNext(); ){
+ printBirthmarkSet(out, i.next());
+ }
+ printFooter(out);
+ }
+
+ public void printHeader(PrintWriter out){
+ out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
+ out.println("<birthmark-result-set>");
+ out.println(" <extracted-birthmarks>");
+ }
+
+ public void printFooter(PrintWriter out){
+ out.println(" </extracted-birthmarks>");
+ out.println("</birthmark-result-set>");
+ out.flush();
+ }
+
+ public void printBirthmarkSet(PrintWriter out, BirthmarkSet set){
+ out.println(" <extracted-birthmark>");
+ out.printf(" <name>%s</name>%n", escapeToXmlString(set.getName()));
+ out.printf(" <location>%s</location>%n", escapeToXmlString(set.getLocation()));
+ for(Iterator<String> i = set.birthmarkTypes(); i.hasNext(); ){
+ String type = i.next();
+ Birthmark birthmark = set.getBirthmark(type);
+ out.printf(" <birthmark type=\"%s\" count=\"%d\">%n",
+ birthmark.getType(), birthmark.getElementCount());
+ for(Iterator<BirthmarkElement> elements = birthmark.iterator(); elements.hasNext(); ){
+ out.printf(" <element>%s</element>%n",
+ escapeToXmlString(String.valueOf(elements.next())));
+ }
+ out.println(" </birthmark>");
+ }
+ out.println(" </extracted-birthmark>");
+ }
+
+ public String escapeToXmlString(Object o){
+ if(o != null){
+ return escapeToXmlString(o.toString());
+ }
+ return null;
+ }
+
+ public String escapeToXmlString(String string){
+ string = string.replaceAll("&", "&");
+ string = string.replaceAll("\"", """);
+ string = string.replaceAll("<", "<");
+ string = string.replaceAll(">", ">");
+
+ return string;
+ }
+}
-package jp.naist.se.stigmata.printer.xml;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.Locale;\r
-\r
-import jp.naist.se.stigmata.printer.BirthmarkServicePrinter;\r
-import jp.naist.se.stigmata.printer.ComparisonPairPrinter;\r
-import jp.naist.se.stigmata.printer.ComparisonResultSetPrinter;\r
-import jp.naist.se.stigmata.printer.ExtractionResultSetPrinter;\r
-import jp.naist.se.stigmata.spi.AbstractServiceProvider;\r
-import jp.naist.se.stigmata.spi.ResultPrinterSpi;\r
-import jp.naist.se.stigmata.utils.LocalizedDescriptionManager;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class XmlResultPrinterService extends AbstractServiceProvider implements ResultPrinterSpi{\r
- private BirthmarkServiceXmlPrinter serviceList = new BirthmarkServiceXmlPrinter();\r
- private ExtractionResultSetXmlPrinter list = new ExtractionResultSetXmlPrinter();\r
- private ComparisonPairXmlPrinter pairPrinter = new ComparisonPairXmlPrinter(list);\r
- private ComparisonResultSetXmlPrinter compare = new ComparisonResultSetXmlPrinter(pairPrinter);\r
-\r
- /**\r
- * returns a localized description of the birthmark this service provides.\r
- */\r
- public String getDescription(Locale locale){\r
- return LocalizedDescriptionManager.getInstance().getDescription(\r
- locale, getFormat(), LocalizedDescriptionManager.ServiceCategory.formatter\r
- );\r
- }\r
-\r
- public String getFormat(){\r
- return "xml";\r
- }\r
-\r
- public ComparisonResultSetPrinter getComparisonResultSetPrinter() {\r
- return compare;\r
- }\r
-\r
- public ExtractionResultSetPrinter getExtractionResultSetPrinter() {\r
- return list;\r
- }\r
-\r
- public BirthmarkServicePrinter getBirthmarkServicePrinter() {\r
- return serviceList;\r
- }\r
-\r
- public ComparisonPairPrinter getComparisonPairPrinter(){\r
- return pairPrinter;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.printer.xml;
+
+/*
+ * $Id$
+ */
+
+import java.util.Locale;
+
+import jp.sourceforge.stigmata.printer.BirthmarkServicePrinter;
+import jp.sourceforge.stigmata.printer.ComparisonPairPrinter;
+import jp.sourceforge.stigmata.printer.ComparisonResultSetPrinter;
+import jp.sourceforge.stigmata.printer.ExtractionResultSetPrinter;
+import jp.sourceforge.stigmata.spi.AbstractServiceProvider;
+import jp.sourceforge.stigmata.spi.ResultPrinterSpi;
+import jp.sourceforge.stigmata.utils.LocalizedDescriptionManager;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class XmlResultPrinterService extends AbstractServiceProvider implements ResultPrinterSpi{
+ private BirthmarkServiceXmlPrinter serviceList = new BirthmarkServiceXmlPrinter();
+ private ExtractionResultSetXmlPrinter list = new ExtractionResultSetXmlPrinter();
+ private ComparisonPairXmlPrinter pairPrinter = new ComparisonPairXmlPrinter(list);
+ private ComparisonResultSetXmlPrinter compare = new ComparisonResultSetXmlPrinter(pairPrinter);
+
+ /**
+ * returns a localized description of the birthmark this service provides.
+ */
+ public String getDescription(Locale locale){
+ return LocalizedDescriptionManager.getInstance().getDescription(
+ locale, getFormat(), LocalizedDescriptionManager.ServiceCategory.formatter
+ );
+ }
+
+ public String getFormat(){
+ return "xml";
+ }
+
+ public ComparisonResultSetPrinter getComparisonResultSetPrinter() {
+ return compare;
+ }
+
+ public ExtractionResultSetPrinter getExtractionResultSetPrinter() {
+ return list;
+ }
+
+ public BirthmarkServicePrinter getBirthmarkServicePrinter() {
+ return serviceList;
+ }
+
+ public ComparisonPairPrinter getComparisonPairPrinter(){
+ return pairPrinter;
+ }
+}
-package jp.naist.se.stigmata.reader;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.net.URL;\r
-import java.util.Iterator;\r
-\r
-/**\r
- * abstract presentation of class file archive's location.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public interface ClassFileArchive extends Iterable<ClassFileEntry>{\r
- public URL getLocation();\r
-\r
- public InputStream getInputStream(ClassFileEntry entry) throws IOException;\r
-\r
- public Iterator<ClassFileEntry> iterator();\r
-\r
- public boolean hasEntry(String className);\r
-\r
- public ClassFileEntry getEntry(String className) throws ClassNotFoundException;\r
-\r
- public String getName();\r
-}\r
+package jp.sourceforge.stigmata.reader;
+
+/*
+ * $Id$
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Iterator;
+
+/**
+ * abstract presentation of class file archive's location.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public interface ClassFileArchive extends Iterable<ClassFileEntry>{
+ public URL getLocation();
+
+ public InputStream getInputStream(ClassFileEntry entry) throws IOException;
+
+ public Iterator<ClassFileEntry> iterator();
+
+ public boolean hasEntry(String className);
+
+ public ClassFileEntry getEntry(String className) throws ClassNotFoundException;
+
+ public String getName();
+}
-package jp.naist.se.stigmata.reader;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.net.URL;\r
-\r
-/**\r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ClassFileEntry{\r
- private URL location;\r
- private String className;\r
-\r
- public ClassFileEntry(String className, URL location){\r
- this.className = className;\r
- setLocation(location);\r
- }\r
-\r
- public String getClassName(){\r
- return className;\r
- }\r
-\r
- public void setLocation(URL location){\r
- this.location = location;\r
- }\r
-\r
- public URL getLocation(){\r
- return location;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.reader;
+
+/*
+ * $Id$
+ */
+
+import java.net.URL;
+
+/**
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ClassFileEntry{
+ private URL location;
+ private String className;
+
+ public ClassFileEntry(String className, URL location){
+ this.className = className;
+ setLocation(location);
+ }
+
+ public String getClassName(){
+ return className;
+ }
+
+ public void setLocation(URL location){
+ this.location = location;
+ }
+
+ public URL getLocation(){
+ return location;
+ }
+}
-package jp.naist.se.stigmata.reader;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.net.URL;\r
-import java.util.ArrayList;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-\r
-import jp.naist.se.stigmata.utils.WarClassLoader;\r
-\r
-/**\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ClasspathContext implements Iterable<URL>{\r
- private static ClasspathContext DEFAULT_CONTEXT = new ClasspathContext(false);\r
-\r
- private ClasspathContext parent;\r
- private List<URL> classpath = new ArrayList<URL>();\r
- private ClassLoader loader = null;\r
-\r
- /**\r
- * private constructor for root context.\r
- */\r
- private ClasspathContext(boolean flag){\r
- }\r
-\r
- public ClasspathContext(){\r
- this(DEFAULT_CONTEXT);\r
- }\r
-\r
- /**\r
- * constructor with parent classpath context.\r
- */\r
- public ClasspathContext(ClasspathContext parent){\r
- this.parent = parent;\r
- }\r
-\r
- /**\r
- * returns parent classpath context.\r
- */\r
- public ClasspathContext getParent(){\r
- return parent;\r
- }\r
-\r
- /**\r
- * returns default classpath context.\r
- */\r
- public static final ClasspathContext getDefaultContext(){\r
- return DEFAULT_CONTEXT;\r
- }\r
-\r
- /**\r
- * adds given url to this context. If this context already has given url or\r
- * parent context has given url, this method do nothing.\r
- */\r
- public synchronized void addClasspath(URL url){\r
- if(!contains(url)){\r
- classpath.add(url);\r
- loader = null;\r
- }\r
- }\r
-\r
- /**\r
- * returns that this context or parent context have given url.\r
- */\r
- public synchronized boolean contains(URL url){\r
- return (parent != null && parent.contains(url)) || classpath.contains(url); \r
- }\r
-\r
- /**\r
- * returns a size of classpath list, which this context and parent context have.\r
- */\r
- public int getClasspathSize(){\r
- int count = classpath.size();\r
- if(parent != null){\r
- count += parent.getClasspathSize();\r
- }\r
- return count;\r
- }\r
-\r
- /**\r
- * returns an array of all of classpathes include parent context.\r
- */\r
- public synchronized URL[] getClasspathList(){\r
- List<URL> list = new ArrayList<URL>();\r
- for(URL url: this){\r
- list.add(url);\r
- }\r
- return list.toArray(new URL[list.size()]);\r
- }\r
-\r
- /**\r
- * clears all of classpathes of this context. not clear parent context.\r
- * If you want to clear this context and parent context, use {@link #clearAll <code>clearAll</code>} method.\r
- * @see clearAll\r
- */\r
- public void clear(){\r
- classpath.clear();\r
- }\r
-\r
- /**\r
- * clears all of classpathes of this context and parent context.\r
- */\r
- public void clearAll(){\r
- clear();\r
- if(parent != null){\r
- parent.clearAll();\r
- }\r
- }\r
-\r
- public Iterator<URL> iterator(){\r
- if(parent == null){\r
- return classpath.iterator();\r
- }\r
- else{\r
- final Iterator<URL> parentIterator = parent.iterator();\r
- final Iterator<URL> thisIterator = classpath.iterator();\r
- return new Iterator<URL>(){\r
- public boolean hasNext(){\r
- boolean next = parentIterator.hasNext();\r
- if(!next){\r
- next = thisIterator.hasNext();\r
- }\r
- return next;\r
- }\r
- public URL next(){\r
- URL nextObject = null;\r
- if(parentIterator.hasNext()){\r
- nextObject = parentIterator.next();\r
- }\r
- else{\r
- nextObject = thisIterator.next();\r
- }\r
- return nextObject;\r
- }\r
- public void remove(){\r
- }\r
- };\r
- }\r
- }\r
-\r
- public synchronized ClassLoader createClassLoader(){\r
- if(loader == null){\r
- List<URL> list = new ArrayList<URL>();\r
- for(URL url: this){\r
- list.add(url);\r
- }\r
-\r
- loader = new WarClassLoader(list.toArray(new URL[list.size()]), getClass().getClassLoader());\r
- }\r
- return loader;\r
- }\r
-\r
- public ClassFileEntry find(String className) throws ClassNotFoundException{\r
- ClassLoader loader = createClassLoader();\r
-\r
- URL resource = loader.getResource(className.replace('.', '/') + ".class");\r
- if(resource != null){\r
- return new ClassFileEntry(className, resource);\r
- }\r
- return null;\r
- }\r
-\r
- public Class<?> findClass(String className) throws ClassNotFoundException{\r
- try{\r
- ClassLoader loader = createClassLoader();\r
-\r
- return loader.loadClass(className);\r
- } catch(NoClassDefFoundError e){\r
- throw new ClassNotFoundException(e.getMessage(), e);\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata.reader;
+
+/*
+ * $Id$
+ */
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import jp.sourceforge.stigmata.utils.WarClassLoader;
+
+/**
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ClasspathContext implements Iterable<URL>{
+ private static ClasspathContext DEFAULT_CONTEXT = new ClasspathContext(false);
+
+ private ClasspathContext parent;
+ private List<URL> classpath = new ArrayList<URL>();
+ private ClassLoader loader = null;
+
+ /**
+ * private constructor for root context.
+ */
+ private ClasspathContext(boolean flag){
+ }
+
+ public ClasspathContext(){
+ this(DEFAULT_CONTEXT);
+ }
+
+ /**
+ * constructor with parent classpath context.
+ */
+ public ClasspathContext(ClasspathContext parent){
+ this.parent = parent;
+ }
+
+ /**
+ * returns parent classpath context.
+ */
+ public ClasspathContext getParent(){
+ return parent;
+ }
+
+ /**
+ * returns default classpath context.
+ */
+ public static final ClasspathContext getDefaultContext(){
+ return DEFAULT_CONTEXT;
+ }
+
+ /**
+ * adds given url to this context. If this context already has given url or
+ * parent context has given url, this method do nothing.
+ */
+ public synchronized void addClasspath(URL url){
+ if(!contains(url)){
+ classpath.add(url);
+ loader = null;
+ }
+ }
+
+ /**
+ * returns that this context or parent context have given url.
+ */
+ public synchronized boolean contains(URL url){
+ return (parent != null && parent.contains(url)) || classpath.contains(url);
+ }
+
+ /**
+ * returns a size of classpath list, which this context and parent context have.
+ */
+ public int getClasspathSize(){
+ int count = classpath.size();
+ if(parent != null){
+ count += parent.getClasspathSize();
+ }
+ return count;
+ }
+
+ /**
+ * returns an array of all of classpathes include parent context.
+ */
+ public synchronized URL[] getClasspathList(){
+ List<URL> list = new ArrayList<URL>();
+ for(URL url: this){
+ list.add(url);
+ }
+ return list.toArray(new URL[list.size()]);
+ }
+
+ /**
+ * clears all of classpathes of this context. not clear parent context.
+ * If you want to clear this context and parent context, use {@link #clearAll <code>clearAll</code>} method.
+ * @see clearAll
+ */
+ public void clear(){
+ classpath.clear();
+ }
+
+ /**
+ * clears all of classpathes of this context and parent context.
+ */
+ public void clearAll(){
+ clear();
+ if(parent != null){
+ parent.clearAll();
+ }
+ }
+
+ public Iterator<URL> iterator(){
+ if(parent == null){
+ return classpath.iterator();
+ }
+ else{
+ final Iterator<URL> parentIterator = parent.iterator();
+ final Iterator<URL> thisIterator = classpath.iterator();
+ return new Iterator<URL>(){
+ public boolean hasNext(){
+ boolean next = parentIterator.hasNext();
+ if(!next){
+ next = thisIterator.hasNext();
+ }
+ return next;
+ }
+ public URL next(){
+ URL nextObject = null;
+ if(parentIterator.hasNext()){
+ nextObject = parentIterator.next();
+ }
+ else{
+ nextObject = thisIterator.next();
+ }
+ return nextObject;
+ }
+ public void remove(){
+ }
+ };
+ }
+ }
+
+ public synchronized ClassLoader createClassLoader(){
+ if(loader == null){
+ List<URL> list = new ArrayList<URL>();
+ for(URL url: this){
+ list.add(url);
+ }
+
+ loader = new WarClassLoader(list.toArray(new URL[list.size()]), getClass().getClassLoader());
+ }
+ return loader;
+ }
+
+ public ClassFileEntry find(String className) throws ClassNotFoundException{
+ ClassLoader loader = createClassLoader();
+
+ URL resource = loader.getResource(className.replace('.', '/') + ".class");
+ if(resource != null){
+ return new ClassFileEntry(className, resource);
+ }
+ return null;
+ }
+
+ public Class<?> findClass(String className) throws ClassNotFoundException{
+ try{
+ ClassLoader loader = createClassLoader();
+
+ return loader.loadClass(className);
+ } catch(NoClassDefFoundError e){
+ throw new ClassNotFoundException(e.getMessage(), e);
+ }
+ }
+}
-package jp.naist.se.stigmata.reader;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.File;\r
-import java.io.FileInputStream;\r
-import java.io.FileNotFoundException;\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.net.MalformedURLException;\r
-import java.net.URL;\r
-import java.util.ArrayList;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-\r
-import org.objectweb.asm.ClassReader;\r
-import org.objectweb.asm.commons.EmptyVisitor;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class DefaultClassFileArchive implements ClassFileArchive{\r
- private File file;\r
- private String className;\r
- \r
- public DefaultClassFileArchive(String file){\r
- this(new File(file));\r
- }\r
- \r
- public DefaultClassFileArchive(File file){\r
- this.file = file;\r
- parseClassName();\r
- }\r
- \r
- public DefaultClassFileArchive(String file, String className){\r
- this(new File(file), className);\r
- }\r
- \r
- public DefaultClassFileArchive(File file, String className){\r
- this.file = file;\r
- this.className = className;\r
- }\r
-\r
- public URL getLocation(){\r
- try {\r
- return file.toURI().toURL();\r
- } catch (MalformedURLException ex) {\r
- }\r
- return null;\r
- }\r
-\r
- public InputStream getInputStream(ClassFileEntry entry) throws IOException{\r
- return new FileInputStream(file);\r
- }\r
-\r
- public Iterator<ClassFileEntry> iterator(){\r
- List<ClassFileEntry> list = new ArrayList<ClassFileEntry>();\r
- list.add(new ClassFileEntry(className, getLocation()));\r
-\r
- return list.iterator();\r
- }\r
-\r
- public boolean hasEntry(String className){\r
- return this.className.equals(className);\r
- }\r
-\r
- public ClassFileEntry getEntry(String className) throws ClassNotFoundException{\r
- return new ClassFileEntry(className, getLocation());\r
- }\r
-\r
- public String getName(){\r
- return className;\r
- }\r
-\r
- private void parseClassName(){\r
- FileInputStream in = null;\r
- try {\r
- in = new FileInputStream(file);\r
- ClassReader reader = new ClassReader(in);\r
- ClassNameExtractVisitor visitor = new ClassNameExtractVisitor();\r
- reader.accept(visitor, true);\r
-\r
- this.className = visitor.getClassName();\r
- } catch (FileNotFoundException ex) {\r
- ex.printStackTrace();\r
- } catch (IOException ex) {\r
- ex.printStackTrace();\r
- } finally{\r
- if(in != null){\r
- try{\r
- in.close();\r
- } catch(IOException e){\r
- }\r
- }\r
- }\r
- }\r
-\r
- private static class ClassNameExtractVisitor extends EmptyVisitor{\r
- private String className;\r
-\r
- public String getClassName(){\r
- return className;\r
- }\r
-\r
- @Override\r
- public void visit(int version, int access, String name, String signature, \r
- String superClassName, String[] interfaces){\r
- className = name;\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata.reader;
+
+/*
+ * $Id$
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.commons.EmptyVisitor;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class DefaultClassFileArchive implements ClassFileArchive{
+ private File file;
+ private String className;
+
+ public DefaultClassFileArchive(String file){
+ this(new File(file));
+ }
+
+ public DefaultClassFileArchive(File file){
+ this.file = file;
+ parseClassName();
+ }
+
+ public DefaultClassFileArchive(String file, String className){
+ this(new File(file), className);
+ }
+
+ public DefaultClassFileArchive(File file, String className){
+ this.file = file;
+ this.className = className;
+ }
+
+ public URL getLocation(){
+ try {
+ return file.toURI().toURL();
+ } catch (MalformedURLException ex) {
+ }
+ return null;
+ }
+
+ public InputStream getInputStream(ClassFileEntry entry) throws IOException{
+ return new FileInputStream(file);
+ }
+
+ public Iterator<ClassFileEntry> iterator(){
+ List<ClassFileEntry> list = new ArrayList<ClassFileEntry>();
+ list.add(new ClassFileEntry(className, getLocation()));
+
+ return list.iterator();
+ }
+
+ public boolean hasEntry(String className){
+ return this.className.equals(className);
+ }
+
+ public ClassFileEntry getEntry(String className) throws ClassNotFoundException{
+ return new ClassFileEntry(className, getLocation());
+ }
+
+ public String getName(){
+ return className;
+ }
+
+ private void parseClassName(){
+ FileInputStream in = null;
+ try {
+ in = new FileInputStream(file);
+ ClassReader reader = new ClassReader(in);
+ ClassNameExtractVisitor visitor = new ClassNameExtractVisitor();
+ reader.accept(visitor, true);
+
+ this.className = visitor.getClassName();
+ } catch (FileNotFoundException ex) {
+ ex.printStackTrace();
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ } finally{
+ if(in != null){
+ try{
+ in.close();
+ } catch(IOException e){
+ }
+ }
+ }
+ }
+
+ private static class ClassNameExtractVisitor extends EmptyVisitor{
+ private String className;
+
+ public String getClassName(){
+ return className;
+ }
+
+ @Override
+ public void visit(int version, int access, String name, String signature,
+ String superClassName, String[] interfaces){
+ className = name;
+ }
+ }
+}
-package jp.naist.se.stigmata.reader;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.File;\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.net.MalformedURLException;\r
-import java.net.URL;\r
-import java.util.ArrayList;\r
-import java.util.Enumeration;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import java.util.jar.JarEntry;\r
-import java.util.jar.JarFile;\r
-\r
-/**\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class JarClassFileArchive implements ClassFileArchive{\r
- private File file;\r
- private JarFile jarfile;\r
- private URL jarfileLocation;\r
-\r
- public JarClassFileArchive(String jarfile) throws IOException{\r
- this.file = new File(jarfile);\r
- this.jarfile = new JarFile(jarfile);\r
- this.jarfileLocation = file.toURI().toURL();\r
- }\r
-\r
- public URL getLocation(){\r
- return jarfileLocation;\r
- }\r
-\r
- public String getName(){\r
- return file.getName();\r
- }\r
-\r
- public InputStream getInputStream(ClassFileEntry entry) throws IOException{\r
- if(hasEntry(entry.getClassName())){\r
- return jarfile.getInputStream(jarfile.getEntry(entry.getClassName().replace('.', '/') + ".class"));\r
- }\r
- return null;\r
- }\r
-\r
- public Iterator<ClassFileEntry> iterator(){\r
- List<ClassFileEntry> list = new ArrayList<ClassFileEntry>();\r
- \r
- for(Enumeration<JarEntry> e = jarfile.entries(); e.hasMoreElements(); ){\r
- JarEntry entry = e.nextElement();\r
- if(entry.getName().endsWith(".class")){\r
- URL location = null;\r
- try {\r
- location = new URL("jar:" + getLocation() + "!/" + entry.getName());\r
- String className = entry.getName();\r
- className = className.substring(0, className.length() - ".class".length());\r
- className = className.replace('/', '.');\r
- \r
- list.add(new ClassFileEntry(className, location));\r
- } catch (MalformedURLException ex) {\r
- }\r
- }\r
- }\r
- return list.iterator();\r
- }\r
-\r
- public boolean hasEntry(String className){\r
- return jarfile.getEntry(className.replace('.', '/') + ".class") != null;\r
- }\r
-\r
- public ClassFileEntry getEntry(String className) throws ClassNotFoundException{\r
- if(hasEntry(className)){\r
- String entryName = className.replace('.', '/') + ".class";\r
- try{\r
- URL location = new URL("jar:" + jarfile.getName() + "!/" + entryName);\r
- \r
- return new ClassFileEntry(className, location);\r
- } catch(MalformedURLException e){\r
- }\r
- }\r
- return null;\r
- }\r
-\r
- Enumeration<JarEntry> jarentries(){\r
- return jarfile.entries();\r
- }\r
-\r
- boolean hasJarEntry(String entry){\r
- return jarfile.getEntry(entry) != null;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.reader;
+
+/*
+ * $Id$
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class JarClassFileArchive implements ClassFileArchive{
+ private File file;
+ private JarFile jarfile;
+ private URL jarfileLocation;
+
+ public JarClassFileArchive(String jarfile) throws IOException{
+ this.file = new File(jarfile);
+ this.jarfile = new JarFile(jarfile);
+ this.jarfileLocation = file.toURI().toURL();
+ }
+
+ public URL getLocation(){
+ return jarfileLocation;
+ }
+
+ public String getName(){
+ return file.getName();
+ }
+
+ public InputStream getInputStream(ClassFileEntry entry) throws IOException{
+ if(hasEntry(entry.getClassName())){
+ return jarfile.getInputStream(jarfile.getEntry(entry.getClassName().replace('.', '/') + ".class"));
+ }
+ return null;
+ }
+
+ public Iterator<ClassFileEntry> iterator(){
+ List<ClassFileEntry> list = new ArrayList<ClassFileEntry>();
+
+ for(Enumeration<JarEntry> e = jarfile.entries(); e.hasMoreElements(); ){
+ JarEntry entry = e.nextElement();
+ if(entry.getName().endsWith(".class")){
+ URL location = null;
+ try {
+ location = new URL("jar:" + getLocation() + "!/" + entry.getName());
+ String className = entry.getName();
+ className = className.substring(0, className.length() - ".class".length());
+ className = className.replace('/', '.');
+
+ list.add(new ClassFileEntry(className, location));
+ } catch (MalformedURLException ex) {
+ }
+ }
+ }
+ return list.iterator();
+ }
+
+ public boolean hasEntry(String className){
+ return jarfile.getEntry(className.replace('.', '/') + ".class") != null;
+ }
+
+ public ClassFileEntry getEntry(String className) throws ClassNotFoundException{
+ if(hasEntry(className)){
+ String entryName = className.replace('.', '/') + ".class";
+ try{
+ URL location = new URL("jar:" + jarfile.getName() + "!/" + entryName);
+
+ return new ClassFileEntry(className, location);
+ } catch(MalformedURLException e){
+ }
+ }
+ return null;
+ }
+
+ Enumeration<JarEntry> jarentries(){
+ return jarfile.entries();
+ }
+
+ boolean hasJarEntry(String entry){
+ return jarfile.getEntry(entry) != null;
+ }
+}
-package jp.naist.se.stigmata.reader;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.net.MalformedURLException;\r
-import java.net.URL;\r
-import java.util.ArrayList;\r
-import java.util.Enumeration;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import java.util.jar.JarEntry;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class WarClassFileArchive extends JarClassFileArchive{\r
- public WarClassFileArchive(String jarfile) throws IOException{\r
- super(jarfile);\r
- }\r
-\r
- public InputStream getInputStream(ClassFileEntry entry) throws IOException{\r
- if(hasEntry(entry.getClassName())){\r
- return entry.getLocation().openStream();\r
- }\r
- return null;\r
- }\r
-\r
- public Iterator<ClassFileEntry> iterator(){\r
- List<ClassFileEntry> list = new ArrayList<ClassFileEntry>();\r
-\r
- for(Enumeration<JarEntry> e = jarentries(); e.hasMoreElements(); ){\r
- JarEntry entry = e.nextElement();\r
- if(entry.getName().endsWith(".class")){\r
- URL location = null;\r
- try {\r
- location = new URL("jar:" + getLocation() + "!/" + entry.getName());\r
- String className = entry.getName();\r
- className = className.substring("WEB-INF/classes/".length(), className.length() - ".class".length());\r
- className = className.replace('/', '.');\r
-\r
- list.add(new ClassFileEntry(className, location));\r
- } catch (MalformedURLException ex) {\r
- ex.printStackTrace();\r
- }\r
- }\r
- }\r
- return list.iterator();\r
- }\r
-\r
- public boolean hasEntry(String className){\r
- return hasJarEntry("WEB-INF/classes/" + className.replace('.', '/') + ".class");\r
- }\r
-\r
- public ClassFileEntry getEntry(String className) throws ClassNotFoundException{\r
- if(hasEntry(className)){\r
- String entryName = className.replace('.', '/') + ".class";\r
- try{\r
- URL location = new URL("jar:" + getLocation() + "!/WEB-INF/classes/" + entryName);\r
-\r
- return new ClassFileEntry(className, location);\r
- } catch(MalformedURLException e){\r
- }\r
- }\r
- return null;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.reader;
+
+/*
+ * $Id$
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.jar.JarEntry;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class WarClassFileArchive extends JarClassFileArchive{
+ public WarClassFileArchive(String jarfile) throws IOException{
+ super(jarfile);
+ }
+
+ public InputStream getInputStream(ClassFileEntry entry) throws IOException{
+ if(hasEntry(entry.getClassName())){
+ return entry.getLocation().openStream();
+ }
+ return null;
+ }
+
+ public Iterator<ClassFileEntry> iterator(){
+ List<ClassFileEntry> list = new ArrayList<ClassFileEntry>();
+
+ for(Enumeration<JarEntry> e = jarentries(); e.hasMoreElements(); ){
+ JarEntry entry = e.nextElement();
+ if(entry.getName().endsWith(".class")){
+ URL location = null;
+ try {
+ location = new URL("jar:" + getLocation() + "!/" + entry.getName());
+ String className = entry.getName();
+ className = className.substring("WEB-INF/classes/".length(), className.length() - ".class".length());
+ className = className.replace('/', '.');
+
+ list.add(new ClassFileEntry(className, location));
+ } catch (MalformedURLException ex) {
+ ex.printStackTrace();
+ }
+ }
+ }
+ return list.iterator();
+ }
+
+ public boolean hasEntry(String className){
+ return hasJarEntry("WEB-INF/classes/" + className.replace('.', '/') + ".class");
+ }
+
+ public ClassFileEntry getEntry(String className) throws ClassNotFoundException{
+ if(hasEntry(className)){
+ String entryName = className.replace('.', '/') + ".class";
+ try{
+ URL location = new URL("jar:" + getLocation() + "!/WEB-INF/classes/" + entryName);
+
+ return new ClassFileEntry(className, location);
+ } catch(MalformedURLException e){
+ }
+ }
+ return null;
+ }
+}
-package jp.naist.se.stigmata.result;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.lang.reflect.Array;\r
-import java.util.ArrayList;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.ComparisonPair;\r
-import jp.naist.se.stigmata.ComparisonResultSet;\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-\r
-/**\r
- * Abstract class for ComparisonResultSet.\r
- *\r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public abstract class AbstractComparisonResultSet implements ComparisonResultSet{\r
- protected ExtractionResultSet extraction;\r
- private int count = -1;\r
-\r
- public AbstractComparisonResultSet(ExtractionResultSet extraction){\r
- this.extraction = extraction;\r
- }\r
-\r
- public abstract Iterator<ComparisonPair> iterator();\r
-\r
- public abstract Iterator<BirthmarkSet> pairSources();\r
-\r
- public synchronized BirthmarkSet[] getPairSources(){\r
- return AbstractComparisonResultSet.<BirthmarkSet>getArrays(pairSources(), new BirthmarkSet[0]);\r
- }\r
-\r
- public int getPairCount(){\r
- if(count < 0){\r
- int calculateCount = 0;\r
- for(Iterator<ComparisonPair> i = iterator(); i.hasNext(); ){\r
- calculateCount++;\r
- i.next();\r
- }\r
- this.count = calculateCount;\r
- }\r
- return count;\r
- }\r
-\r
- public synchronized ComparisonPair[] getPairs(){\r
- return AbstractComparisonResultSet.<ComparisonPair>getArrays(iterator(), new ComparisonPair[0]);\r
- }\r
-\r
- public ComparisonPair getPairAt(int index){\r
- int currentIndex = 0;\r
- for(Iterator<ComparisonPair> i = iterator(); i.hasNext(); ){\r
- ComparisonPair pair = i.next();\r
- if(currentIndex == index){\r
- return pair;\r
- }\r
- currentIndex++;\r
- }\r
- return null;\r
- }\r
-\r
- public BirthmarkContext getContext(){\r
- return extraction.getContext();\r
- }\r
-\r
- public BirthmarkEnvironment getEnvironment(){\r
- return extraction.getEnvironment();\r
- }\r
-\r
- @SuppressWarnings("unchecked")\r
- static synchronized <T> T[] getArrays(Iterator<T> i, T[] array){\r
- List<Object> list = new ArrayList<Object>();\r
- while(i.hasNext()){\r
- list.add(i.next());\r
- }\r
-\r
- if(list.size() > array.length){\r
- array = (T[])Array.newInstance(array.getClass().getComponentType(), list.size());\r
- }\r
- for(int index = 0; index < list.size(); index++){\r
- array[index] = (T)list.get(index);\r
- }\r
- return array;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.result;
+
+/*
+ * $Id$
+ */
+
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.ComparisonPair;
+import jp.sourceforge.stigmata.ComparisonResultSet;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+
+/**
+ * Abstract class for ComparisonResultSet.
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public abstract class AbstractComparisonResultSet implements ComparisonResultSet{
+ protected ExtractionResultSet extraction;
+ private int count = -1;
+
+ public AbstractComparisonResultSet(ExtractionResultSet extraction){
+ this.extraction = extraction;
+ }
+
+ public abstract Iterator<ComparisonPair> iterator();
+
+ public abstract Iterator<BirthmarkSet> pairSources();
+
+ public synchronized BirthmarkSet[] getPairSources(){
+ return AbstractComparisonResultSet.<BirthmarkSet>getArrays(pairSources(), new BirthmarkSet[0]);
+ }
+
+ public int getPairCount(){
+ if(count < 0){
+ int calculateCount = 0;
+ for(Iterator<ComparisonPair> i = iterator(); i.hasNext(); ){
+ calculateCount++;
+ i.next();
+ }
+ this.count = calculateCount;
+ }
+ return count;
+ }
+
+ public synchronized ComparisonPair[] getPairs(){
+ return AbstractComparisonResultSet.<ComparisonPair>getArrays(iterator(), new ComparisonPair[0]);
+ }
+
+ public ComparisonPair getPairAt(int index){
+ int currentIndex = 0;
+ for(Iterator<ComparisonPair> i = iterator(); i.hasNext(); ){
+ ComparisonPair pair = i.next();
+ if(currentIndex == index){
+ return pair;
+ }
+ currentIndex++;
+ }
+ return null;
+ }
+
+ public BirthmarkContext getContext(){
+ return extraction.getContext();
+ }
+
+ public BirthmarkEnvironment getEnvironment(){
+ return extraction.getEnvironment();
+ }
+
+ @SuppressWarnings("unchecked")
+ static synchronized <T> T[] getArrays(Iterator<T> i, T[] array){
+ List<Object> list = new ArrayList<Object>();
+ while(i.hasNext()){
+ list.add(i.next());
+ }
+
+ if(list.size() > array.length){
+ array = (T[])Array.newInstance(array.getClass().getComponentType(), list.size());
+ }
+ for(int index = 0; index < list.size(); index++){
+ array[index] = (T)list.get(index);
+ }
+ return array;
+ }
+}
-package jp.naist.se.stigmata.result;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.text.SimpleDateFormat;\r
-import java.util.Calendar;\r
-import java.util.Iterator;\r
-\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.BirthmarkStoreException;\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-import jp.naist.se.stigmata.ExtractionTarget;\r
-import jp.naist.se.stigmata.ExtractionUnit;\r
-\r
-/**\r
- * Abstract class for ExtractionResultSet.\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public abstract class AbstractExtractionResultSet implements ExtractionResultSet{\r
- private BirthmarkContext context;\r
- private boolean tableType = true;\r
- private String id;\r
-\r
- /**\r
- * constructor.\r
- */\r
- public AbstractExtractionResultSet(BirthmarkContext context){\r
- this(context, true);\r
- }\r
-\r
- /**\r
- * constructor.\r
- */\r
- public AbstractExtractionResultSet(BirthmarkContext context, boolean tableType){\r
- this.context = context;\r
- id = generateId();\r
- }\r
-\r
- void setId(String id){\r
- this.id = id;\r
- }\r
-\r
- public String getId(){\r
- return id;\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 void addBirthmarkSet(ExtractionTarget target, BirthmarkSet set) throws BirthmarkStoreException;\r
-\r
- public abstract void removeBirthmarkSet(ExtractionTarget target, BirthmarkSet set);\r
-\r
- public abstract void removeAllBirthmarkSets(ExtractionTarget target);\r
-\r
- public abstract int getBirthmarkSetSize(ExtractionTarget target);\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
- if(currentIndex == index){\r
- return i.next();\r
- }\r
- i.next();\r
- currentIndex++;\r
- }\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
- if(bs.getName().equals(setname)){\r
- return bs;\r
- }\r
- }\r
- return null;\r
- }\r
-\r
- /**\r
- * @return all of BirthmarkSet this instance have. elements is obtained from birthmarkSet.\r
- */\r
- public synchronized BirthmarkSet[] getBirthmarkSets(ExtractionTarget target){\r
- return AbstractComparisonResultSet.<BirthmarkSet>getArrays(birthmarkSets(target), new BirthmarkSet[0]);\r
- }\r
-\r
- public void setBirthmarkSets(ExtractionTarget target, BirthmarkSet[] sets) throws BirthmarkStoreException{\r
- removeAllBirthmarkSets(target);\r
- for(int i = 0; i < sets.length; i++){\r
- addBirthmarkSet(target, sets[i]);\r
- }\r
- }\r
-\r
- public boolean isTableType(){\r
- return tableType;\r
- }\r
-\r
- public void setTableType(boolean flag){\r
- this.tableType = flag;\r
- }\r
-\r
- protected static String generateId(){\r
- SimpleDateFormat cdf = new SimpleDateFormat("yyyyMMdd-HHmmss.SSS");\r
- return cdf.format(Calendar.getInstance().getTime());\r
- }\r
-}\r
+package jp.sourceforge.stigmata.result;
+
+/*
+ * $Id$
+ */
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Iterator;
+
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.BirthmarkStoreException;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.ExtractionTarget;
+import jp.sourceforge.stigmata.ExtractionUnit;
+
+/**
+ * Abstract class for ExtractionResultSet.
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public abstract class AbstractExtractionResultSet implements ExtractionResultSet{
+ private BirthmarkContext context;
+ private boolean tableType = true;
+ private String id;
+
+ /**
+ * constructor.
+ */
+ public AbstractExtractionResultSet(BirthmarkContext context){
+ this(context, true);
+ }
+
+ /**
+ * constructor.
+ */
+ public AbstractExtractionResultSet(BirthmarkContext context, boolean tableType){
+ this.context = context;
+ id = generateId();
+ }
+
+ void setId(String id){
+ this.id = id;
+ }
+
+ public String getId(){
+ return id;
+ }
+
+ /**
+ * returns a birthmark environment.
+ */
+ public BirthmarkEnvironment getEnvironment(){
+ return context.getEnvironment();
+ }
+
+ /**
+ * returns a birthmark context.
+ */
+ public BirthmarkContext getContext(){
+ return context;
+ }
+
+ public abstract void addBirthmarkSet(ExtractionTarget target, BirthmarkSet set) throws BirthmarkStoreException;
+
+ public abstract void removeBirthmarkSet(ExtractionTarget target, BirthmarkSet set);
+
+ public abstract void removeAllBirthmarkSets(ExtractionTarget target);
+
+ public abstract int getBirthmarkSetSize(ExtractionTarget target);
+
+ public abstract Iterator<BirthmarkSet> birthmarkSets(ExtractionTarget target);
+
+ /**
+ * returns the sum of birthmark set size this instance has.
+ * <code>getBirthmarkSetSize(ExtractionTarget.TARGET_BOTH)</code>
+ */
+ public int getBirthmarkSetSize(){
+ return getBirthmarkSetSize(ExtractionTarget.TARGET_BOTH);
+ }
+
+ /**
+ * returns an iterator.
+ * <code>birthmarkSets(ExtractionTarget.TARGET_BOTH)</code>
+ */
+ public Iterator<BirthmarkSet> iterator(){
+ return birthmarkSets(ExtractionTarget.TARGET_BOTH);
+ }
+
+ /**
+ * returns a birthmark set related of given index.
+ * <code>getBirthmarkSet(ExtractionTarget.TARGET_BOTH, index)</code>
+ */
+ public BirthmarkSet getBirthmarkSet(int index){
+ return getBirthmarkSet(ExtractionTarget.TARGET_BOTH, index);
+ }
+
+ /**
+ * returns a birthmark set related with given name.
+ * <code>getBirthmarkSet(ExtractionTarget.TARGET_BOTH, name)</code>
+ */
+ public BirthmarkSet getBirthmarkSet(String name){
+ return getBirthmarkSet(ExtractionTarget.TARGET_BOTH, name);
+ }
+
+ /**
+ * returns all of birthmark sets.
+ * <code>getBirthmarkSets(ExtractionTarget.TARGET_BOTH)</code>
+ */
+ public BirthmarkSet[] getBirthmarkSets(){
+ return getBirthmarkSets(ExtractionTarget.TARGET_BOTH);
+ }
+
+ /**
+ * remove specified birthmark set from this instance.
+ * <code>removeBirthmarkSet(ExtractionTarget.TARGET_BOTH, bs)</code>
+ */
+ public void removeBirthmarkSet(BirthmarkSet bs){
+ removeBirthmarkSet(ExtractionTarget.TARGET_BOTH, bs);
+ }
+
+ /**
+ * remove all of birthmark sets.
+ * <code>removeBirthmarkSet(ExtractionTarget.TARGET_BOTH)</code>
+ */
+ public void removeAllBirthmarkSets(){
+ removeAllBirthmarkSets(ExtractionTarget.TARGET_BOTH);
+ }
+
+ /**
+ * returns an array of extracted birthmark types.
+ */
+ public String[] getBirthmarkTypes(){
+ return context.getBirthmarkTypes();
+ }
+
+ /**
+ * returns an unit of extraction from.
+ */
+ public ExtractionUnit getExtractionUnit(){
+ return context.getExtractionUnit();
+ }
+
+ /**
+ * returns the birthmark set at the specified position in the specified target.
+ */
+ public BirthmarkSet getBirthmarkSet(ExtractionTarget target, int index){
+ int currentIndex = 0;
+ for(Iterator<BirthmarkSet> i = birthmarkSets(target); i.hasNext(); ){
+ if(currentIndex == index){
+ return i.next();
+ }
+ i.next();
+ currentIndex++;
+ }
+ return null;
+ }
+
+ /**
+ * returns the birthmark set related with the specified name in the specified target.
+ */
+ public BirthmarkSet getBirthmarkSet(ExtractionTarget target, String setname){
+ for(Iterator<BirthmarkSet> i = birthmarkSets(target); i.hasNext(); ){
+ BirthmarkSet bs = i.next();
+ if(bs.getName().equals(setname)){
+ return bs;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * @return all of BirthmarkSet this instance have. elements is obtained from birthmarkSet.
+ */
+ public synchronized BirthmarkSet[] getBirthmarkSets(ExtractionTarget target){
+ return AbstractComparisonResultSet.<BirthmarkSet>getArrays(birthmarkSets(target), new BirthmarkSet[0]);
+ }
+
+ public void setBirthmarkSets(ExtractionTarget target, BirthmarkSet[] sets) throws BirthmarkStoreException{
+ removeAllBirthmarkSets(target);
+ for(int i = 0; i < sets.length; i++){
+ addBirthmarkSet(target, sets[i]);
+ }
+ }
+
+ public boolean isTableType(){
+ return tableType;
+ }
+
+ public void setTableType(boolean flag){
+ this.tableType = flag;
+ }
+
+ protected static String generateId(){
+ SimpleDateFormat cdf = new SimpleDateFormat("yyyyMMdd-HHmmss.SSS");
+ return cdf.format(Calendar.getInstance().getTime());
+ }
+}
-package jp.naist.se.stigmata.result;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.net.URL;\r
-import java.util.Collection;\r
-import java.util.HashMap;\r
-import java.util.Iterator;\r
-import java.util.Map;\r
-\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.BirthmarkStoreException;\r
-import jp.naist.se.stigmata.ComparisonPair;\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-import jp.naist.se.stigmata.ExtractionTarget;\r
-import jp.naist.se.stigmata.result.history.ExtractedBirthmarkServiceManager;\r
-\r
-/**\r
- * Concrete class for ComparisonResultSet. This instance compare class files by\r
- * certain pair. The pair is guessed by system with class name, or specified by\r
- * user.\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class CertainPairComparisonResultSet extends AbstractComparisonResultSet{\r
- private int compareCount = -1;\r
- private Collection<BirthmarkSet> sources = null;\r
-\r
- public CertainPairComparisonResultSet(ExtractionResultSet extraction){\r
- super(extraction);\r
- }\r
-\r
- public CertainPairComparisonResultSet(ExtractionResultSet extraction, Map<String, String> nameMap){\r
- super(extraction);\r
- BirthmarkContext context = extraction.getContext();\r
- for(Map.Entry<String, String> entry: nameMap.entrySet()){\r
- context.addNameMapping(entry.getKey(), entry.getValue());\r
- }\r
- }\r
-\r
- /**\r
- * This constructor is the comparison pair list is specified.\r
- */\r
- public CertainPairComparisonResultSet(ComparisonPair[] pairs, BirthmarkContext context){\r
- super(createExtractionResultSet(pairs, context));\r
- }\r
-\r
- /**\r
- * This constructor is the comparison pair was guessed with class name.\r
- */\r
- public CertainPairComparisonResultSet(BirthmarkSet[] targetX,\r
- BirthmarkSet[] targetY, BirthmarkContext context){\r
- super(createExtractionResultSet(targetX, targetY, context));\r
- }\r
-\r
- /**\r
- * This constructor is the comparison pair was specified as mapping.\r
- */\r
- public CertainPairComparisonResultSet(BirthmarkSet[] targetX, BirthmarkSet[] targetY,\r
- Map<String, String> mapping, BirthmarkContext context){\r
- super(createExtractionResultSet(targetX, targetY, context));\r
-\r
- for(Map.Entry<String, String> entry : mapping.entrySet()){\r
- context.addNameMapping(entry.getKey(), entry.getValue());\r
- }\r
- }\r
-\r
- /**\r
- * return comparison count.\r
- */\r
- @Override\r
- public int getPairCount(){\r
- BirthmarkContext context = getContext();\r
- if(compareCount < 0){\r
- int count = 0;\r
- if(context.hasNameMapping()){\r
- count = context.getNameMappingCount();\r
- }\r
- else{\r
- count = super.getPairCount();\r
- }\r
- compareCount = count;\r
- }\r
- return compareCount;\r
- }\r
-\r
- /**\r
- * return the iterator of each pair.\r
- */\r
- @Override\r
- public Iterator<ComparisonPair> iterator(){\r
- Iterator<ComparisonPair> iterator = null;\r
- final BirthmarkContext context = getContext();\r
- if(context.hasNameMapping()){\r
- iterator = new NameMappingIterator(extraction);\r
- }\r
- else{\r
- iterator = new NameFindIterator(extraction);\r
- }\r
- return iterator;\r
- }\r
-\r
- @Override\r
- public Iterator<BirthmarkSet> pairSources(){\r
- if(sources == null){\r
- sources = createSources();\r
- }\r
- return sources.iterator();\r
- }\r
-\r
- public BirthmarkSet[] getPairSources(){\r
- if(sources == null){\r
- sources = createSources();\r
- }\r
- return sources.toArray(new BirthmarkSet[sources.size()]);\r
- }\r
-\r
- private Collection<BirthmarkSet> createSources(){\r
- Map<URL, BirthmarkSet> map = new HashMap<URL, BirthmarkSet>();\r
- for(Iterator<ComparisonPair> i = iterator(); i.hasNext(); ){\r
- ComparisonPair pair = i.next();\r
- addToMap(map, pair.getTarget1());\r
- addToMap(map, pair.getTarget2());\r
- }\r
- return map.values();\r
- }\r
-\r
- private void addToMap(Map<URL, BirthmarkSet> map, BirthmarkSet set){\r
- map.put(set.getLocation(), set);\r
- }\r
-\r
- private static ExtractionResultSet createExtractionResultSet(ComparisonPair[] pairs, BirthmarkContext context){\r
- ExtractedBirthmarkServiceManager historyManager = context.getEnvironment().getHistoryManager();\r
- ExtractionResultSet ers = historyManager.createDefaultResultSet(context);\r
- ers.setTableType(false);\r
- try{\r
- for(int i = 0; i < pairs.length; i++){\r
- ers.addBirthmarkSet(ExtractionTarget.TARGET_X, pairs[i].getTarget1());\r
- ers.addBirthmarkSet(ExtractionTarget.TARGET_Y, pairs[i].getTarget2());\r
- }\r
- }catch(BirthmarkStoreException e){\r
- throw new InternalError("never thrown BirthmarkStoreException is thrown");\r
- }\r
- return ers;\r
- }\r
-\r
- private static ExtractionResultSet createExtractionResultSet(BirthmarkSet[] targetX, BirthmarkSet[] targetY, BirthmarkContext context){\r
- ExtractionResultSet ers = context.getEnvironment().getHistoryManager().createDefaultResultSet(context);\r
- ers.setTableType(true);\r
- try{\r
- ers.setBirthmarkSets(ExtractionTarget.TARGET_X, targetX);\r
- ers.setBirthmarkSets(ExtractionTarget.TARGET_Y, targetY);\r
- }catch(BirthmarkStoreException e){\r
- throw new InternalError("never thrown BirthmarkStoreException is thrown");\r
- }\r
- return ers;\r
- }\r
-\r
- private static class NameFindIterator implements Iterator<ComparisonPair>{\r
- private ComparisonPair next;\r
- private BirthmarkSet setX = null;\r
- private Iterator<BirthmarkSet> iteratorX;\r
- private Iterator<BirthmarkSet> iteratorY;\r
- private ExtractionResultSet extraction;\r
-\r
- public NameFindIterator(ExtractionResultSet extraction){\r
- this.extraction = extraction;\r
- iteratorX = extraction.birthmarkSets(ExtractionTarget.TARGET_X);\r
- setX = iteratorX.next();\r
- next = findNext();\r
- }\r
-\r
- public boolean hasNext(){\r
- return next != null;\r
- }\r
-\r
- public ComparisonPair next(){\r
- ComparisonPair returnValue = next;\r
- next = findNext();\r
- return returnValue;\r
- }\r
-\r
- public void remove(){\r
- }\r
-\r
- private ComparisonPair findNext(){\r
- ComparisonPair next = null;\r
- if(iteratorY == null || !iteratorY.hasNext()){\r
- iteratorY = extraction.birthmarkSets(ExtractionTarget.TARGET_Y);\r
- }\r
-\r
- if(setX != null){\r
- for(; iteratorY.hasNext(); ){\r
- BirthmarkSet setY = iteratorY.next();\r
- if(setX.getName().equals(setY.getName())){\r
- next = new ComparisonPair(setX, setY, extraction.getContext());\r
- break;\r
- }\r
- }\r
-\r
- if(iteratorX.hasNext()){\r
- setX = iteratorX.next();\r
- }\r
- else{\r
- setX = null;\r
- }\r
- if(next == null){\r
- next = findNext();\r
- }\r
- }\r
- return next;\r
- }\r
- };\r
-\r
- private static class NameMappingIterator implements Iterator<ComparisonPair>{\r
- private Iterator<Map.Entry<String, String>> names;\r
- private ComparisonPair nextPair;\r
- private ExtractionResultSet ers;\r
-\r
- public NameMappingIterator(ExtractionResultSet ers){\r
- this.ers = ers;\r
- names = ers.getContext().nameMappingEntries();\r
- nextPair = findNextPair();\r
- }\r
-\r
- public ComparisonPair next(){\r
- ComparisonPair cp = nextPair;\r
- nextPair = findNextPair();\r
- return cp;\r
- }\r
-\r
- public boolean hasNext(){\r
- return nextPair != null;\r
- }\r
-\r
- public void remove(){\r
- }\r
-\r
- private ComparisonPair findNextPair(){\r
- ComparisonPair pair = null;\r
- if(names.hasNext()){\r
- Map.Entry<String, String> entry = names.next();\r
- String n1 = entry.getKey();\r
- String n2 = entry.getValue();\r
-\r
- BirthmarkSet bs1 = ers.getBirthmarkSet(ExtractionTarget.TARGET_X, n1);\r
- BirthmarkSet bs2 = ers.getBirthmarkSet(ExtractionTarget.TARGET_Y, n2);\r
-\r
- if(bs1 == null || bs2 == null){\r
- pair = findNextPair();\r
- }\r
- else{\r
- pair = new ComparisonPair(bs1, bs2, ers.getContext());\r
- }\r
- }\r
- return pair;\r
- }\r
- };\r
-}\r
+package jp.sourceforge.stigmata.result;
+
+/*
+ * $Id$
+ */
+
+import java.net.URL;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.BirthmarkStoreException;
+import jp.sourceforge.stigmata.ComparisonPair;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.ExtractionTarget;
+import jp.sourceforge.stigmata.result.history.ExtractedBirthmarkServiceManager;
+
+/**
+ * Concrete class for ComparisonResultSet. This instance compare class files by
+ * certain pair. The pair is guessed by system with class name, or specified by
+ * user.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class CertainPairComparisonResultSet extends AbstractComparisonResultSet{
+ private int compareCount = -1;
+ private Collection<BirthmarkSet> sources = null;
+
+ public CertainPairComparisonResultSet(ExtractionResultSet extraction){
+ super(extraction);
+ }
+
+ public CertainPairComparisonResultSet(ExtractionResultSet extraction, Map<String, String> nameMap){
+ super(extraction);
+ BirthmarkContext context = extraction.getContext();
+ for(Map.Entry<String, String> entry: nameMap.entrySet()){
+ context.addNameMapping(entry.getKey(), entry.getValue());
+ }
+ }
+
+ /**
+ * This constructor is the comparison pair list is specified.
+ */
+ public CertainPairComparisonResultSet(ComparisonPair[] pairs, BirthmarkContext context){
+ super(createExtractionResultSet(pairs, context));
+ }
+
+ /**
+ * This constructor is the comparison pair was guessed with class name.
+ */
+ public CertainPairComparisonResultSet(BirthmarkSet[] targetX,
+ BirthmarkSet[] targetY, BirthmarkContext context){
+ super(createExtractionResultSet(targetX, targetY, context));
+ }
+
+ /**
+ * This constructor is the comparison pair was specified as mapping.
+ */
+ public CertainPairComparisonResultSet(BirthmarkSet[] targetX, BirthmarkSet[] targetY,
+ Map<String, String> mapping, BirthmarkContext context){
+ super(createExtractionResultSet(targetX, targetY, context));
+
+ for(Map.Entry<String, String> entry : mapping.entrySet()){
+ context.addNameMapping(entry.getKey(), entry.getValue());
+ }
+ }
+
+ /**
+ * return comparison count.
+ */
+ @Override
+ public int getPairCount(){
+ BirthmarkContext context = getContext();
+ if(compareCount < 0){
+ int count = 0;
+ if(context.hasNameMapping()){
+ count = context.getNameMappingCount();
+ }
+ else{
+ count = super.getPairCount();
+ }
+ compareCount = count;
+ }
+ return compareCount;
+ }
+
+ /**
+ * return the iterator of each pair.
+ */
+ @Override
+ public Iterator<ComparisonPair> iterator(){
+ Iterator<ComparisonPair> iterator = null;
+ final BirthmarkContext context = getContext();
+ if(context.hasNameMapping()){
+ iterator = new NameMappingIterator(extraction);
+ }
+ else{
+ iterator = new NameFindIterator(extraction);
+ }
+ return iterator;
+ }
+
+ @Override
+ public Iterator<BirthmarkSet> pairSources(){
+ if(sources == null){
+ sources = createSources();
+ }
+ return sources.iterator();
+ }
+
+ public BirthmarkSet[] getPairSources(){
+ if(sources == null){
+ sources = createSources();
+ }
+ return sources.toArray(new BirthmarkSet[sources.size()]);
+ }
+
+ private Collection<BirthmarkSet> createSources(){
+ Map<URL, BirthmarkSet> map = new HashMap<URL, BirthmarkSet>();
+ for(Iterator<ComparisonPair> i = iterator(); i.hasNext(); ){
+ ComparisonPair pair = i.next();
+ addToMap(map, pair.getTarget1());
+ addToMap(map, pair.getTarget2());
+ }
+ return map.values();
+ }
+
+ private void addToMap(Map<URL, BirthmarkSet> map, BirthmarkSet set){
+ map.put(set.getLocation(), set);
+ }
+
+ private static ExtractionResultSet createExtractionResultSet(ComparisonPair[] pairs, BirthmarkContext context){
+ ExtractedBirthmarkServiceManager historyManager = context.getEnvironment().getHistoryManager();
+ ExtractionResultSet ers = historyManager.createDefaultResultSet(context);
+ ers.setTableType(false);
+ try{
+ for(int i = 0; i < pairs.length; i++){
+ ers.addBirthmarkSet(ExtractionTarget.TARGET_X, pairs[i].getTarget1());
+ ers.addBirthmarkSet(ExtractionTarget.TARGET_Y, pairs[i].getTarget2());
+ }
+ }catch(BirthmarkStoreException e){
+ throw new InternalError("never thrown BirthmarkStoreException is thrown");
+ }
+ return ers;
+ }
+
+ private static ExtractionResultSet createExtractionResultSet(BirthmarkSet[] targetX, BirthmarkSet[] targetY, BirthmarkContext context){
+ ExtractionResultSet ers = context.getEnvironment().getHistoryManager().createDefaultResultSet(context);
+ ers.setTableType(true);
+ try{
+ ers.setBirthmarkSets(ExtractionTarget.TARGET_X, targetX);
+ ers.setBirthmarkSets(ExtractionTarget.TARGET_Y, targetY);
+ }catch(BirthmarkStoreException e){
+ throw new InternalError("never thrown BirthmarkStoreException is thrown");
+ }
+ return ers;
+ }
+
+ private static class NameFindIterator implements Iterator<ComparisonPair>{
+ private ComparisonPair next;
+ private BirthmarkSet setX = null;
+ private Iterator<BirthmarkSet> iteratorX;
+ private Iterator<BirthmarkSet> iteratorY;
+ private ExtractionResultSet extraction;
+
+ public NameFindIterator(ExtractionResultSet extraction){
+ this.extraction = extraction;
+ iteratorX = extraction.birthmarkSets(ExtractionTarget.TARGET_X);
+ setX = iteratorX.next();
+ next = findNext();
+ }
+
+ public boolean hasNext(){
+ return next != null;
+ }
+
+ public ComparisonPair next(){
+ ComparisonPair returnValue = next;
+ next = findNext();
+ return returnValue;
+ }
+
+ public void remove(){
+ }
+
+ private ComparisonPair findNext(){
+ ComparisonPair next = null;
+ if(iteratorY == null || !iteratorY.hasNext()){
+ iteratorY = extraction.birthmarkSets(ExtractionTarget.TARGET_Y);
+ }
+
+ if(setX != null){
+ for(; iteratorY.hasNext(); ){
+ BirthmarkSet setY = iteratorY.next();
+ if(setX.getName().equals(setY.getName())){
+ next = new ComparisonPair(setX, setY, extraction.getContext());
+ break;
+ }
+ }
+
+ if(iteratorX.hasNext()){
+ setX = iteratorX.next();
+ }
+ else{
+ setX = null;
+ }
+ if(next == null){
+ next = findNext();
+ }
+ }
+ return next;
+ }
+ };
+
+ private static class NameMappingIterator implements Iterator<ComparisonPair>{
+ private Iterator<Map.Entry<String, String>> names;
+ private ComparisonPair nextPair;
+ private ExtractionResultSet ers;
+
+ public NameMappingIterator(ExtractionResultSet ers){
+ this.ers = ers;
+ names = ers.getContext().nameMappingEntries();
+ nextPair = findNextPair();
+ }
+
+ public ComparisonPair next(){
+ ComparisonPair cp = nextPair;
+ nextPair = findNextPair();
+ return cp;
+ }
+
+ public boolean hasNext(){
+ return nextPair != null;
+ }
+
+ public void remove(){
+ }
+
+ private ComparisonPair findNextPair(){
+ ComparisonPair pair = null;
+ if(names.hasNext()){
+ Map.Entry<String, String> entry = names.next();
+ String n1 = entry.getKey();
+ String n2 = entry.getValue();
+
+ BirthmarkSet bs1 = ers.getBirthmarkSet(ExtractionTarget.TARGET_X, n1);
+ BirthmarkSet bs2 = ers.getBirthmarkSet(ExtractionTarget.TARGET_Y, n2);
+
+ if(bs1 == null || bs2 == null){
+ pair = findNextPair();
+ }
+ else{
+ pair = new ComparisonPair(bs1, bs2, ers.getContext());
+ }
+ }
+ return pair;
+ }
+ };
+}
-package jp.naist.se.stigmata.result;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkStoreTarget;\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-import jp.naist.se.stigmata.result.history.ExtractedBirthmarkHistory;\r
-import jp.naist.se.stigmata.result.history.MemoryExtractedBirthmarkHistory;\r
-import jp.naist.se.stigmata.spi.ExtractedBirthmarkSpi;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class MemoryExtractedBirthmarkService implements ExtractedBirthmarkSpi{\r
- private MemoryExtractedBirthmarkHistory history = new MemoryExtractedBirthmarkHistory();\r
-\r
- public ExtractionResultSet createResultSet(BirthmarkContext context){\r
- MemoryExtractionResultSet mers = new MemoryExtractionResultSet(context);\r
- history.addResultSet(mers);\r
- return mers;\r
- }\r
-\r
- public ExtractedBirthmarkHistory getHistory(String parameter){\r
- return history;\r
- }\r
-\r
- public ExtractionResultSet getResultSet(String id){\r
- return history.getResultSet(id);\r
- }\r
-\r
- public BirthmarkStoreTarget getTarget(){\r
- return BirthmarkStoreTarget.MEMORY;\r
- }\r
-\r
-}\r
+package jp.sourceforge.stigmata.result;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkStoreTarget;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.result.history.ExtractedBirthmarkHistory;
+import jp.sourceforge.stigmata.result.history.MemoryExtractedBirthmarkHistory;
+import jp.sourceforge.stigmata.spi.ExtractedBirthmarkSpi;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class MemoryExtractedBirthmarkService implements ExtractedBirthmarkSpi{
+ private MemoryExtractedBirthmarkHistory history = new MemoryExtractedBirthmarkHistory();
+
+ public ExtractionResultSet createResultSet(BirthmarkContext context){
+ MemoryExtractionResultSet mers = new MemoryExtractionResultSet(context);
+ history.addResultSet(mers);
+ return mers;
+ }
+
+ public ExtractedBirthmarkHistory getHistory(String parameter){
+ return history;
+ }
+
+ public ExtractionResultSet getResultSet(String id){
+ return history.getResultSet(id);
+ }
+
+ public BirthmarkStoreTarget getTarget(){
+ return BirthmarkStoreTarget.MEMORY;
+ }
+
+}
-package jp.naist.se.stigmata.result;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.ArrayList;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.BirthmarkStoreTarget;\r
-import jp.naist.se.stigmata.ExtractionTarget;\r
-import jp.naist.se.stigmata.utils.MultipleIterator;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class MemoryExtractionResultSet extends AbstractExtractionResultSet{\r
- private List<BirthmarkSet> targetX = new ArrayList<BirthmarkSet>();\r
- private List<BirthmarkSet> targetY = new ArrayList<BirthmarkSet>();\r
-\r
- MemoryExtractionResultSet(BirthmarkContext context){\r
- this(context, true);\r
- }\r
-\r
- MemoryExtractionResultSet(BirthmarkContext context, boolean tableType){\r
- super(context, tableType);\r
- }\r
-\r
- public BirthmarkStoreTarget getStoreTarget(){\r
- return BirthmarkStoreTarget.MEMORY;\r
- }\r
-\r
- public void removeAllBirthmarkSets(ExtractionTarget target){\r
- switch(target){\r
- case TARGET_X:\r
- case TARGET_XY:\r
- targetX.clear();\r
- break;\r
- case TARGET_Y:\r
- targetY.clear();\r
- break;\r
- case TARGET_BOTH:\r
- default:\r
- throw new IllegalArgumentException("unknown target: " + target);\r
- }\r
- }\r
-\r
- public void removeBirthmarkSet(ExtractionTarget target, BirthmarkSet set){\r
- switch(target){\r
- case TARGET_X:\r
- case TARGET_XY:\r
- targetX.remove(set);\r
- break;\r
- case TARGET_Y:\r
- targetY.remove(set);\r
- break;\r
- case TARGET_BOTH:\r
- default:\r
- throw new IllegalArgumentException("unknown target: " + target);\r
- }\r
- }\r
-\r
- public void addBirthmarkSet(ExtractionTarget target, BirthmarkSet set){\r
- switch(target){\r
- case TARGET_X:\r
- case TARGET_XY:\r
- targetX.add(set);\r
- break;\r
- case TARGET_Y:\r
- targetY.add(set);\r
- break;\r
- case TARGET_BOTH:\r
- default:\r
- throw new IllegalArgumentException("unknown target: " + target);\r
- }\r
- }\r
-\r
- public Iterator<BirthmarkSet> birthmarkSets(ExtractionTarget target){\r
- Iterator<BirthmarkSet> iterator;\r
- switch(target){\r
- case TARGET_X:\r
- case TARGET_XY:\r
- iterator = targetX.iterator();\r
- break;\r
- case TARGET_Y:\r
- iterator = targetY.iterator();\r
- break;\r
- case TARGET_BOTH:\r
- default:\r
- MultipleIterator<BirthmarkSet> i = new MultipleIterator<BirthmarkSet>();\r
- i.add(targetX.iterator());\r
- i.add(targetY.iterator());\r
- iterator = i;\r
- break;\r
- }\r
- return iterator;\r
- }\r
- public int getBirthmarkSetSize(ExtractionTarget target){\r
- int count = 0;\r
- switch(target){\r
- case TARGET_X:\r
- case TARGET_XY:\r
- count = targetX.size();\r
- break;\r
- case TARGET_Y:\r
- count = targetY.size();\r
- break;\r
- case TARGET_BOTH:\r
- default:\r
- count = targetX.size() + targetY.size();\r
- break;\r
- }\r
- return count;\r
- }\r
-\r
- public BirthmarkSet getBirthmarkSet(ExtractionTarget target, int index){\r
- BirthmarkSet set;\r
- switch(target){\r
- case TARGET_X:\r
- set = targetX.get(index);\r
- break;\r
- case TARGET_Y:\r
- set = targetY.get(index);\r
- break;\r
- case TARGET_XY:\r
- case TARGET_BOTH:\r
- default:\r
- if(index < targetX.size()){\r
- set = targetX.get(index);\r
- }\r
- else{\r
- set = targetY.get(index - targetX.size());\r
- }\r
- break;\r
- }\r
- return set;\r
- }\r
-\r
- public BirthmarkSet[] getBirthmarkSets(ExtractionTarget target){\r
- BirthmarkSet[] sets;\r
- switch(target){\r
- case TARGET_X:\r
- case TARGET_XY:\r
- sets = targetX.toArray(new BirthmarkSet[targetX.size()]);\r
- break;\r
- case TARGET_Y:\r
- sets = targetY.toArray(new BirthmarkSet[targetX.size()]);\r
- break;\r
- case TARGET_BOTH:\r
- default:\r
- sets = new BirthmarkSet[targetX.size() + targetY.size()];\r
- System.arraycopy(targetX.toArray(new BirthmarkSet[targetX.size()]), 0, sets, 0, targetX.size());\r
- System.arraycopy(targetY.toArray(new BirthmarkSet[targetY.size()]), 0, sets, targetX.size(), targetY.size());\r
- break;\r
- }\r
- return sets;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.result;
+
+/*
+ * $Id$
+ */
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.BirthmarkStoreTarget;
+import jp.sourceforge.stigmata.ExtractionTarget;
+import jp.sourceforge.stigmata.utils.MultipleIterator;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class MemoryExtractionResultSet extends AbstractExtractionResultSet{
+ private List<BirthmarkSet> targetX = new ArrayList<BirthmarkSet>();
+ private List<BirthmarkSet> targetY = new ArrayList<BirthmarkSet>();
+
+ MemoryExtractionResultSet(BirthmarkContext context){
+ this(context, true);
+ }
+
+ MemoryExtractionResultSet(BirthmarkContext context, boolean tableType){
+ super(context, tableType);
+ }
+
+ public BirthmarkStoreTarget getStoreTarget(){
+ return BirthmarkStoreTarget.MEMORY;
+ }
+
+ public void removeAllBirthmarkSets(ExtractionTarget target){
+ switch(target){
+ case TARGET_X:
+ case TARGET_XY:
+ targetX.clear();
+ break;
+ case TARGET_Y:
+ targetY.clear();
+ break;
+ case TARGET_BOTH:
+ default:
+ throw new IllegalArgumentException("unknown target: " + target);
+ }
+ }
+
+ public void removeBirthmarkSet(ExtractionTarget target, BirthmarkSet set){
+ switch(target){
+ case TARGET_X:
+ case TARGET_XY:
+ targetX.remove(set);
+ break;
+ case TARGET_Y:
+ targetY.remove(set);
+ break;
+ case TARGET_BOTH:
+ default:
+ throw new IllegalArgumentException("unknown target: " + target);
+ }
+ }
+
+ public void addBirthmarkSet(ExtractionTarget target, BirthmarkSet set){
+ switch(target){
+ case TARGET_X:
+ case TARGET_XY:
+ targetX.add(set);
+ break;
+ case TARGET_Y:
+ targetY.add(set);
+ break;
+ case TARGET_BOTH:
+ default:
+ throw new IllegalArgumentException("unknown target: " + target);
+ }
+ }
+
+ public Iterator<BirthmarkSet> birthmarkSets(ExtractionTarget target){
+ Iterator<BirthmarkSet> iterator;
+ switch(target){
+ case TARGET_X:
+ case TARGET_XY:
+ iterator = targetX.iterator();
+ break;
+ case TARGET_Y:
+ iterator = targetY.iterator();
+ break;
+ case TARGET_BOTH:
+ default:
+ MultipleIterator<BirthmarkSet> i = new MultipleIterator<BirthmarkSet>();
+ i.add(targetX.iterator());
+ i.add(targetY.iterator());
+ iterator = i;
+ break;
+ }
+ return iterator;
+ }
+ public int getBirthmarkSetSize(ExtractionTarget target){
+ int count = 0;
+ switch(target){
+ case TARGET_X:
+ case TARGET_XY:
+ count = targetX.size();
+ break;
+ case TARGET_Y:
+ count = targetY.size();
+ break;
+ case TARGET_BOTH:
+ default:
+ count = targetX.size() + targetY.size();
+ break;
+ }
+ return count;
+ }
+
+ public BirthmarkSet getBirthmarkSet(ExtractionTarget target, int index){
+ BirthmarkSet set;
+ switch(target){
+ case TARGET_X:
+ set = targetX.get(index);
+ break;
+ case TARGET_Y:
+ set = targetY.get(index);
+ break;
+ case TARGET_XY:
+ case TARGET_BOTH:
+ default:
+ if(index < targetX.size()){
+ set = targetX.get(index);
+ }
+ else{
+ set = targetY.get(index - targetX.size());
+ }
+ break;
+ }
+ return set;
+ }
+
+ public BirthmarkSet[] getBirthmarkSets(ExtractionTarget target){
+ BirthmarkSet[] sets;
+ switch(target){
+ case TARGET_X:
+ case TARGET_XY:
+ sets = targetX.toArray(new BirthmarkSet[targetX.size()]);
+ break;
+ case TARGET_Y:
+ sets = targetY.toArray(new BirthmarkSet[targetX.size()]);
+ break;
+ case TARGET_BOTH:
+ default:
+ sets = new BirthmarkSet[targetX.size() + targetY.size()];
+ System.arraycopy(targetX.toArray(new BirthmarkSet[targetX.size()]), 0, sets, 0, targetX.size());
+ System.arraycopy(targetY.toArray(new BirthmarkSet[targetY.size()]), 0, sets, targetX.size(), targetY.size());
+ break;
+ }
+ return sets;
+ }
+}
-package jp.naist.se.stigmata.result;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import javax.sql.DataSource;\r
-\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkStoreTarget;\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-import jp.naist.se.stigmata.result.history.ExtractedBirthmarkHistory;\r
-import jp.naist.se.stigmata.result.history.RDBExtractedBirthmarkHistory;\r
-import jp.naist.se.stigmata.spi.ExtractedBirthmarkSpi;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class RDBExtractedBirthmarkService implements ExtractedBirthmarkSpi{\r
- private DataSource source;\r
-\r
- public RDBExtractedBirthmarkService(){\r
- }\r
-\r
- public ExtractionResultSet createResultSet(BirthmarkContext context){\r
- return new RDBExtractionResultSet(context);\r
- }\r
-\r
- public ExtractedBirthmarkHistory getHistory(String parameter){\r
- return new RDBExtractedBirthmarkHistory(source);\r
- }\r
-\r
- public ExtractionResultSet getResultSet(String id){\r
- return new RDBExtractionResultSet(source, id);\r
- }\r
-\r
- public BirthmarkStoreTarget getTarget(){\r
- return BirthmarkStoreTarget.RDB;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.result;
+
+/*
+ * $Id$
+ */
+
+import javax.sql.DataSource;
+
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkStoreTarget;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.result.history.ExtractedBirthmarkHistory;
+import jp.sourceforge.stigmata.result.history.RDBExtractedBirthmarkHistory;
+import jp.sourceforge.stigmata.spi.ExtractedBirthmarkSpi;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class RDBExtractedBirthmarkService implements ExtractedBirthmarkSpi{
+ private DataSource source;
+
+ public RDBExtractedBirthmarkService(){
+ }
+
+ public ExtractionResultSet createResultSet(BirthmarkContext context){
+ return new RDBExtractionResultSet(context);
+ }
+
+ public ExtractedBirthmarkHistory getHistory(String parameter){
+ return new RDBExtractedBirthmarkHistory(source);
+ }
+
+ public ExtractionResultSet getResultSet(String id){
+ return new RDBExtractionResultSet(source, id);
+ }
+
+ public BirthmarkStoreTarget getTarget(){
+ return BirthmarkStoreTarget.RDB;
+ }
+}
-package jp.naist.se.stigmata.result;
+package jp.sourceforge.stigmata.result;
/*
* $Id$
import javax.naming.NamingException;
import javax.sql.DataSource;
-import jp.naist.se.stigmata.Birthmark;
-import jp.naist.se.stigmata.BirthmarkContext;
-import jp.naist.se.stigmata.BirthmarkEnvironment;
-import jp.naist.se.stigmata.BirthmarkSet;
-import jp.naist.se.stigmata.BirthmarkStoreException;
-import jp.naist.se.stigmata.BirthmarkStoreTarget;
-import jp.naist.se.stigmata.ExtractionTarget;
-import jp.naist.se.stigmata.ExtractionUnit;
-import jp.naist.se.stigmata.Stigmata;
-import jp.naist.se.stigmata.utils.ArrayIterator;
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.BirthmarkStoreException;
+import jp.sourceforge.stigmata.BirthmarkStoreTarget;
+import jp.sourceforge.stigmata.ExtractionTarget;
+import jp.sourceforge.stigmata.ExtractionUnit;
+import jp.sourceforge.stigmata.Stigmata;
+import jp.sourceforge.stigmata.utils.ArrayIterator;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
-package jp.naist.se.stigmata.result;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.net.URL;\r
-import java.util.ArrayList;\r
-import java.util.HashMap;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.ComparisonPair;\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-import jp.naist.se.stigmata.ExtractionTarget;\r
-\r
-/**\r
- * Concrete class for ComparisonResultSet. This instance compare class files by round robin.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class RoundRobinComparisonResultSet extends AbstractComparisonResultSet{\r
- private int compareCount = -1;\r
- private boolean tableType;\r
- private boolean samePair = false;\r
-\r
- /**\r
- * constructor. if user gives { a, b, c, } as holders1, then\r
- * the instance (created by this constructor) compares { a<->b, a<->c,\r
- * b<->c, }.\r
- */\r
- public RoundRobinComparisonResultSet(ExtractionResultSet resultset){\r
- this(resultset, false);\r
- }\r
-\r
- /**\r
- * constructor. if user gives { a, b, c, } as holders1, then the\r
- * instance (created by this constructor when samePair is true)\r
- * compares { a<->a, b<->a, b<->b, c<->a, c<->b, c<->c, }.\r
- * Otherwise, the instance compares { a<->b, a<->c, b<->c, } when\r
- * samePair is false.\r
- */\r
- public RoundRobinComparisonResultSet(ExtractionResultSet resultset, boolean samePair){\r
- super(resultset);\r
- this.tableType = resultset.isTableType();\r
- setCompareSamePair(samePair);\r
- }\r
-\r
- /**\r
- * @return environment\r
- */\r
- public BirthmarkEnvironment getEnvironment(){\r
- return extraction.getEnvironment();\r
- }\r
-\r
- public BirthmarkContext getContext(){\r
- return extraction.getContext();\r
- }\r
-\r
- /**\r
- * update same pair comparing flag unless two birthmark array is setted.\r
- */\r
- public void setCompareSamePair(boolean flag){\r
- samePair = flag;\r
- if(!extraction.isTableType()){\r
- int size = extraction.getBirthmarkSetSize(ExtractionTarget.TARGET_XY);\r
- if(flag){\r
- if(size > 1) compareCount = (size - 1) * (size - 2) + 1;\r
- else if(size == 1) compareCount = 0;\r
- else throw new IllegalStateException("no extraction result");\r
- }\r
- else{\r
- if(size > 1) compareCount = (size - 1) * (size - 2) + 1 + size;\r
- else if(size == 1) compareCount = 1;\r
- else throw new IllegalStateException("no extraction result");\r
- }\r
- }\r
- else if(compareCount == -1){\r
- compareCount = extraction.getBirthmarkSetSize(ExtractionTarget.TARGET_X)\r
- * extraction.getBirthmarkSetSize(ExtractionTarget.TARGET_Y); \r
- }\r
- }\r
-\r
- public boolean isCompareSamePair(){\r
- return samePair;\r
- }\r
-\r
- /**\r
- * returns the compare count of birthmark sets.\r
- */\r
- public int getPairCount(){\r
- return compareCount;\r
- }\r
-\r
- /**\r
- * return a iterator of whole comparison.\r
- */\r
- public Iterator<ComparisonPair> iterator(){\r
- if(tableType){\r
- return new CompareTableIterator();\r
- }\r
- else{\r
- return new CompareTriangleIterator();\r
- }\r
- }\r
-\r
- public BirthmarkSet[] getPairSources(){\r
- List<BirthmarkSet> list = new ArrayList<BirthmarkSet>();\r
- for(Iterator<BirthmarkSet> i = pairSources(); i.hasNext(); ){\r
- list.add(i.next());\r
- }\r
-\r
- return list.toArray(new BirthmarkSet[list.size()]);\r
- }\r
-\r
- public Iterator<BirthmarkSet> pairSources(){\r
- Map<URL, BirthmarkSet> map = new HashMap<URL, BirthmarkSet>();\r
- if(extraction.isTableType()){\r
- for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_X); i.hasNext(); ){\r
- BirthmarkSet bs = i.next();\r
- map.put(bs.getLocation(), bs);\r
- }\r
- for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_Y); i.hasNext(); ){\r
- BirthmarkSet bs = i.next();\r
- map.put(bs.getLocation(), bs);\r
- }\r
- }\r
- else{\r
- for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_XY); i.hasNext(); ){\r
- BirthmarkSet bs = i.next();\r
- map.put(bs.getLocation(), bs);\r
- }\r
- }\r
- return map.values().iterator();\r
- }\r
-\r
- private class CompareTableIterator implements Iterator<ComparisonPair>{\r
- private Iterator<BirthmarkSet> ix = extraction.birthmarkSets(ExtractionTarget.TARGET_X);\r
- private Iterator<BirthmarkSet> iy = extraction.birthmarkSets(ExtractionTarget.TARGET_Y);\r
- private BirthmarkSet x = ix.next();\r
-\r
- public boolean hasNext(){\r
- return ix.hasNext() || iy.hasNext();\r
- }\r
-\r
- public ComparisonPair next(){\r
- if(!iy.hasNext()){\r
- iy = extraction.birthmarkSets(ExtractionTarget.TARGET_Y);\r
- x = ix.next();\r
- }\r
- BirthmarkSet y = iy.next();\r
-\r
- return new ComparisonPair(x, y, extraction.getContext());\r
- }\r
-\r
- public void remove(){\r
- }\r
- }\r
-\r
- /**\r
- * iterator class.\r
- */\r
- private class CompareTriangleIterator implements Iterator<ComparisonPair>{\r
- private List<String> names = new ArrayList<String>();\r
- private Iterator<BirthmarkSet> iterator;\r
- private int index = 0;\r
- private BirthmarkSet bs;\r
- private ComparisonPair next;\r
-\r
- public CompareTriangleIterator(){\r
- iterator = extraction.birthmarkSets(ExtractionTarget.TARGET_XY);\r
- next = findNext();\r
- }\r
- public boolean hasNext(){\r
- return next != null;\r
- }\r
-\r
- public ComparisonPair next(){\r
- ComparisonPair returnValue = next;\r
- next = findNext();\r
- return returnValue;\r
- }\r
-\r
- private ComparisonPair findNext(){\r
- if(bs == null && iterator.hasNext()){\r
- bs = iterator.next();\r
- names.add(bs.getName());\r
- }\r
- if((isCompareSamePair() && index == names.size()) || (!isCompareSamePair() && index == (names.size() - 1))){\r
- index = 0;\r
- if(iterator.hasNext()){\r
- bs = iterator.next();\r
- names.add(bs.getName());\r
- }\r
- else{\r
- return null;\r
- }\r
- }\r
- String name = names.get(index);\r
- BirthmarkSet bsX = extraction.getBirthmarkSet(ExtractionTarget.TARGET_XY, name);\r
- ComparisonPair pair = null;\r
- if(bsX != null){\r
- pair = new ComparisonPair(bsX, bs, extraction.getContext());\r
- }\r
- index++;\r
-\r
- if(pair == null){\r
- pair = findNext();\r
- }\r
- \r
- return pair;\r
- }\r
-\r
- public void remove(){\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata.result;
+
+/*
+ * $Id$
+ */
+
+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 jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.ComparisonPair;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.ExtractionTarget;
+
+/**
+ * Concrete class for ComparisonResultSet. This instance compare class files by round robin.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class RoundRobinComparisonResultSet extends AbstractComparisonResultSet{
+ private int compareCount = -1;
+ private boolean tableType;
+ private boolean samePair = false;
+
+ /**
+ * constructor. if user gives { a, b, c, } as holders1, then
+ * the instance (created by this constructor) compares { a<->b, a<->c,
+ * b<->c, }.
+ */
+ public RoundRobinComparisonResultSet(ExtractionResultSet resultset){
+ this(resultset, false);
+ }
+
+ /**
+ * constructor. if user gives { a, b, c, } as holders1, then the
+ * instance (created by this constructor when samePair is true)
+ * compares { a<->a, b<->a, b<->b, c<->a, c<->b, c<->c, }.
+ * Otherwise, the instance compares { a<->b, a<->c, b<->c, } when
+ * samePair is false.
+ */
+ public RoundRobinComparisonResultSet(ExtractionResultSet resultset, boolean samePair){
+ super(resultset);
+ this.tableType = resultset.isTableType();
+ setCompareSamePair(samePair);
+ }
+
+ /**
+ * @return environment
+ */
+ public BirthmarkEnvironment getEnvironment(){
+ return extraction.getEnvironment();
+ }
+
+ public BirthmarkContext getContext(){
+ return extraction.getContext();
+ }
+
+ /**
+ * update same pair comparing flag unless two birthmark array is setted.
+ */
+ public void setCompareSamePair(boolean flag){
+ samePair = flag;
+ if(!extraction.isTableType()){
+ int size = extraction.getBirthmarkSetSize(ExtractionTarget.TARGET_XY);
+ if(flag){
+ if(size > 1) compareCount = (size - 1) * (size - 2) + 1;
+ else if(size == 1) compareCount = 0;
+ else throw new IllegalStateException("no extraction result");
+ }
+ else{
+ if(size > 1) compareCount = (size - 1) * (size - 2) + 1 + size;
+ else if(size == 1) compareCount = 1;
+ else throw new IllegalStateException("no extraction result");
+ }
+ }
+ else if(compareCount == -1){
+ compareCount = extraction.getBirthmarkSetSize(ExtractionTarget.TARGET_X)
+ * extraction.getBirthmarkSetSize(ExtractionTarget.TARGET_Y);
+ }
+ }
+
+ public boolean isCompareSamePair(){
+ return samePair;
+ }
+
+ /**
+ * returns the compare count of birthmark sets.
+ */
+ public int getPairCount(){
+ return compareCount;
+ }
+
+ /**
+ * return a iterator of whole comparison.
+ */
+ public Iterator<ComparisonPair> iterator(){
+ if(tableType){
+ return new CompareTableIterator();
+ }
+ else{
+ return new CompareTriangleIterator();
+ }
+ }
+
+ public BirthmarkSet[] getPairSources(){
+ List<BirthmarkSet> list = new ArrayList<BirthmarkSet>();
+ for(Iterator<BirthmarkSet> i = pairSources(); i.hasNext(); ){
+ list.add(i.next());
+ }
+
+ return list.toArray(new BirthmarkSet[list.size()]);
+ }
+
+ public Iterator<BirthmarkSet> pairSources(){
+ Map<URL, BirthmarkSet> map = new HashMap<URL, BirthmarkSet>();
+ if(extraction.isTableType()){
+ for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_X); i.hasNext(); ){
+ BirthmarkSet bs = i.next();
+ map.put(bs.getLocation(), bs);
+ }
+ for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_Y); i.hasNext(); ){
+ BirthmarkSet bs = i.next();
+ map.put(bs.getLocation(), bs);
+ }
+ }
+ else{
+ for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_XY); i.hasNext(); ){
+ BirthmarkSet bs = i.next();
+ map.put(bs.getLocation(), bs);
+ }
+ }
+ return map.values().iterator();
+ }
+
+ private class CompareTableIterator implements Iterator<ComparisonPair>{
+ private Iterator<BirthmarkSet> ix = extraction.birthmarkSets(ExtractionTarget.TARGET_X);
+ private Iterator<BirthmarkSet> iy = extraction.birthmarkSets(ExtractionTarget.TARGET_Y);
+ private BirthmarkSet x = ix.next();
+
+ public boolean hasNext(){
+ return ix.hasNext() || iy.hasNext();
+ }
+
+ public ComparisonPair next(){
+ if(!iy.hasNext()){
+ iy = extraction.birthmarkSets(ExtractionTarget.TARGET_Y);
+ x = ix.next();
+ }
+ BirthmarkSet y = iy.next();
+
+ return new ComparisonPair(x, y, extraction.getContext());
+ }
+
+ public void remove(){
+ }
+ }
+
+ /**
+ * iterator class.
+ */
+ private class CompareTriangleIterator implements Iterator<ComparisonPair>{
+ private List<String> names = new ArrayList<String>();
+ private Iterator<BirthmarkSet> iterator;
+ private int index = 0;
+ private BirthmarkSet bs;
+ private ComparisonPair next;
+
+ public CompareTriangleIterator(){
+ iterator = extraction.birthmarkSets(ExtractionTarget.TARGET_XY);
+ next = findNext();
+ }
+ public boolean hasNext(){
+ return next != null;
+ }
+
+ public ComparisonPair next(){
+ ComparisonPair returnValue = next;
+ next = findNext();
+ return returnValue;
+ }
+
+ private ComparisonPair findNext(){
+ if(bs == null && iterator.hasNext()){
+ bs = iterator.next();
+ names.add(bs.getName());
+ }
+ if((isCompareSamePair() && index == names.size()) || (!isCompareSamePair() && index == (names.size() - 1))){
+ index = 0;
+ if(iterator.hasNext()){
+ bs = iterator.next();
+ names.add(bs.getName());
+ }
+ else{
+ return null;
+ }
+ }
+ String name = names.get(index);
+ BirthmarkSet bsX = extraction.getBirthmarkSet(ExtractionTarget.TARGET_XY, name);
+ ComparisonPair pair = null;
+ if(bsX != null){
+ pair = new ComparisonPair(bsX, bs, extraction.getContext());
+ }
+ index++;
+
+ if(pair == null){
+ pair = findNext();
+ }
+
+ return pair;
+ }
+
+ public void remove(){
+ }
+ }
+}
-package jp.naist.se.stigmata.result;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.Iterator;\r
-import java.util.NoSuchElementException;\r
-\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.BirthmarkStoreTarget;\r
-import jp.naist.se.stigmata.ExtractionTarget;\r
-import jp.naist.se.stigmata.utils.NullIterator;\r
-\r
-/**\r
- *\r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class SingleExtractionResultSet extends AbstractExtractionResultSet{\r
- private BirthmarkSet bs;\r
-\r
- public SingleExtractionResultSet(BirthmarkContext context, BirthmarkSet bs){\r
- super(context, false);\r
- this.bs = bs;\r
- }\r
-\r
- public SingleExtractionResultSet(BirthmarkContext context){\r
- super(context, false);\r
- }\r
-\r
- public BirthmarkStoreTarget getStoreTarget(){\r
- return BirthmarkStoreTarget.MEMORY_SINGLE;\r
- }\r
-\r
- public void addBirthmarkSet(ExtractionTarget target, BirthmarkSet set){\r
- this.bs = set;\r
- }\r
-\r
- public void setBirthmarkSets(ExtractionTarget target, BirthmarkSet[] sets){\r
- this.bs = sets[0];\r
- }\r
-\r
- public Iterator<BirthmarkSet> birthmarkSets(ExtractionTarget target){\r
- if(bs != null){\r
- return new SingleIterator(bs);\r
- }\r
- return new NullIterator<BirthmarkSet>();\r
- }\r
-\r
- public void removeBirthmarkSet(ExtractionTarget target, BirthmarkSet set){\r
- bs = null;\r
- }\r
-\r
- public void removeAllBirthmarkSets(ExtractionTarget target){\r
- bs = null;\r
- }\r
-\r
- public BirthmarkSet getBirthmarkSet(ExtractionTarget target, int index){\r
- if(index != 0){\r
- throw new IndexOutOfBoundsException("illegal index: " + index);\r
- }\r
- return bs;\r
- }\r
-\r
- public BirthmarkSet getBirthmarkSet(ExtractionTarget target, String name){\r
- if(bs.getName().equals(name)){\r
- return bs;\r
- }\r
- return null;\r
- }\r
-\r
- public int getBirthmarkSetSize(ExtractionTarget target){\r
- return 1;\r
- }\r
-\r
- private static class SingleIterator implements Iterator<BirthmarkSet>{\r
- private boolean first = true;\r
- private BirthmarkSet bs;\r
-\r
- public SingleIterator(BirthmarkSet bs){\r
- this.bs = bs;\r
- }\r
-\r
- public BirthmarkSet next(){\r
- if(first){\r
- first = false;\r
- return bs;\r
- }\r
- throw new NoSuchElementException();\r
- }\r
-\r
- public boolean hasNext(){\r
- return first;\r
- }\r
-\r
- public void remove(){\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata.result;
+
+/*
+ * $Id$
+ */
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.BirthmarkStoreTarget;
+import jp.sourceforge.stigmata.ExtractionTarget;
+import jp.sourceforge.stigmata.utils.NullIterator;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class SingleExtractionResultSet extends AbstractExtractionResultSet{
+ private BirthmarkSet bs;
+
+ public SingleExtractionResultSet(BirthmarkContext context, BirthmarkSet bs){
+ super(context, false);
+ this.bs = bs;
+ }
+
+ public SingleExtractionResultSet(BirthmarkContext context){
+ super(context, false);
+ }
+
+ public BirthmarkStoreTarget getStoreTarget(){
+ return BirthmarkStoreTarget.MEMORY_SINGLE;
+ }
+
+ public void addBirthmarkSet(ExtractionTarget target, BirthmarkSet set){
+ this.bs = set;
+ }
+
+ public void setBirthmarkSets(ExtractionTarget target, BirthmarkSet[] sets){
+ this.bs = sets[0];
+ }
+
+ public Iterator<BirthmarkSet> birthmarkSets(ExtractionTarget target){
+ if(bs != null){
+ return new SingleIterator(bs);
+ }
+ return new NullIterator<BirthmarkSet>();
+ }
+
+ public void removeBirthmarkSet(ExtractionTarget target, BirthmarkSet set){
+ bs = null;
+ }
+
+ public void removeAllBirthmarkSets(ExtractionTarget target){
+ bs = null;
+ }
+
+ public BirthmarkSet getBirthmarkSet(ExtractionTarget target, int index){
+ if(index != 0){
+ throw new IndexOutOfBoundsException("illegal index: " + index);
+ }
+ return bs;
+ }
+
+ public BirthmarkSet getBirthmarkSet(ExtractionTarget target, String name){
+ if(bs.getName().equals(name)){
+ return bs;
+ }
+ return null;
+ }
+
+ public int getBirthmarkSetSize(ExtractionTarget target){
+ return 1;
+ }
+
+ private static class SingleIterator implements Iterator<BirthmarkSet>{
+ private boolean first = true;
+ private BirthmarkSet bs;
+
+ public SingleIterator(BirthmarkSet bs){
+ this.bs = bs;
+ }
+
+ public BirthmarkSet next(){
+ if(first){
+ first = false;
+ return bs;
+ }
+ throw new NoSuchElementException();
+ }
+
+ public boolean hasNext(){
+ return first;
+ }
+
+ public void remove(){
+ }
+ }
+}
-package jp.naist.se.stigmata.result;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.File;\r
-\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.BirthmarkStoreTarget;\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-import jp.naist.se.stigmata.result.history.ExtractedBirthmarkHistory;\r
-import jp.naist.se.stigmata.result.history.XmlFileExtractedBirthmarkHistory;\r
-import jp.naist.se.stigmata.spi.ExtractedBirthmarkSpi;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class XmlFileExtractedBirthmarkService implements ExtractedBirthmarkSpi{\r
- private File defaultBaseDirectory;\r
-\r
- public XmlFileExtractedBirthmarkService(){\r
- defaultBaseDirectory = new File(\r
- BirthmarkEnvironment.getStigmataHome(),\r
- "extracted_birthmarks"\r
- );\r
- }\r
-\r
- public ExtractionResultSet createResultSet(BirthmarkContext context){\r
- return createResultSet(context, defaultBaseDirectory);\r
- }\r
-\r
- public ExtractionResultSet createResultSet(BirthmarkContext context, File base){\r
- return new XmlFileExtractionResultSet(\r
- context, new File(base, AbstractExtractionResultSet.generateId())\r
- );\r
- }\r
-\r
- public ExtractedBirthmarkHistory getHistory(String parameter){\r
- File file = defaultBaseDirectory;\r
- if(parameter != null){\r
- file = new File(parameter);\r
- }\r
- if(!file.exists()){\r
- file.mkdirs();\r
- }\r
- return new XmlFileExtractedBirthmarkHistory(file);\r
- }\r
-\r
- public ExtractionResultSet getResultSet(String id){\r
- return new XmlFileExtractionResultSet(new File(id));\r
- }\r
-\r
- public BirthmarkStoreTarget getTarget(){\r
- return BirthmarkStoreTarget.XMLFILE;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.result;
+
+/*
+ * $Id$
+ */
+
+import java.io.File;
+
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.BirthmarkStoreTarget;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.result.history.ExtractedBirthmarkHistory;
+import jp.sourceforge.stigmata.result.history.XmlFileExtractedBirthmarkHistory;
+import jp.sourceforge.stigmata.spi.ExtractedBirthmarkSpi;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class XmlFileExtractedBirthmarkService implements ExtractedBirthmarkSpi{
+ private File defaultBaseDirectory;
+
+ public XmlFileExtractedBirthmarkService(){
+ defaultBaseDirectory = new File(
+ BirthmarkEnvironment.getStigmataHome(),
+ "extracted_birthmarks"
+ );
+ }
+
+ public ExtractionResultSet createResultSet(BirthmarkContext context){
+ return createResultSet(context, defaultBaseDirectory);
+ }
+
+ public ExtractionResultSet createResultSet(BirthmarkContext context, File base){
+ return new XmlFileExtractionResultSet(
+ context, new File(base, AbstractExtractionResultSet.generateId())
+ );
+ }
+
+ public ExtractedBirthmarkHistory getHistory(String parameter){
+ File file = defaultBaseDirectory;
+ if(parameter != null){
+ file = new File(parameter);
+ }
+ if(!file.exists()){
+ file.mkdirs();
+ }
+ return new XmlFileExtractedBirthmarkHistory(file);
+ }
+
+ public ExtractionResultSet getResultSet(String id){
+ return new XmlFileExtractionResultSet(new File(id));
+ }
+
+ public BirthmarkStoreTarget getTarget(){
+ return BirthmarkStoreTarget.XMLFILE;
+ }
+}
-package jp.naist.se.stigmata.result;
+package jp.sourceforge.stigmata.result;
/*
* $Id$
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
-import jp.naist.se.stigmata.Birthmark;
-import jp.naist.se.stigmata.BirthmarkContext;
-import jp.naist.se.stigmata.BirthmarkElement;
-import jp.naist.se.stigmata.BirthmarkEnvironment;
-import jp.naist.se.stigmata.BirthmarkSet;
-import jp.naist.se.stigmata.BirthmarkStoreException;
-import jp.naist.se.stigmata.BirthmarkStoreTarget;
-import jp.naist.se.stigmata.ComparisonMethod;
-import jp.naist.se.stigmata.ExtractionTarget;
-import jp.naist.se.stigmata.ExtractionUnit;
-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;
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.BirthmarkStoreException;
+import jp.sourceforge.stigmata.BirthmarkStoreTarget;
+import jp.sourceforge.stigmata.ComparisonMethod;
+import jp.sourceforge.stigmata.ExtractionTarget;
+import jp.sourceforge.stigmata.ExtractionUnit;
+import jp.sourceforge.stigmata.Stigmata;
+import jp.sourceforge.stigmata.printer.xml.ExtractionResultSetXmlPrinter;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.ui.swing.ExtensionFilter;
+import jp.sourceforge.stigmata.utils.MultipleIterator;
/**
* This class manages extracted birthmarks as xml file.
-package jp.naist.se.stigmata.result.history;
+package jp.sourceforge.stigmata.result.history;
/*
* $Id$
import java.util.Iterator;
-import jp.naist.se.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.ExtractionResultSet;
/**
* This interface indicates extracted history management.
-package jp.naist.se.stigmata.result.history;
+package jp.sourceforge.stigmata.result.history;
/*
* $Id$
import java.util.Map;
import java.util.Set;
-import jp.naist.se.stigmata.BirthmarkContext;
-import jp.naist.se.stigmata.BirthmarkEnvironment;
-import jp.naist.se.stigmata.BirthmarkStoreTarget;
-import jp.naist.se.stigmata.ExtractionResultSet;
-import jp.naist.se.stigmata.spi.ExtractedBirthmarkSpi;
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.BirthmarkStoreTarget;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.spi.ExtractedBirthmarkSpi;
/**
*
-package jp.naist.se.stigmata.result.history;\r
-\r
-import java.util.Collections;\r
-import java.util.HashMap;\r
-import java.util.Iterator;\r
-import java.util.Map;\r
-\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-import jp.naist.se.stigmata.result.MemoryExtractionResultSet;\r
-\r
-public class MemoryExtractedBirthmarkHistory implements ExtractedBirthmarkHistory{\r
- private Map<String, MemoryExtractionResultSet> map = new HashMap<String, MemoryExtractionResultSet>();\r
-\r
- public MemoryExtractedBirthmarkHistory(){\r
- }\r
-\r
- public MemoryExtractedBirthmarkHistory(MemoryExtractionResultSet[] mersArray){\r
- for(MemoryExtractionResultSet mers: mersArray){\r
- map.put(mers.getId(), mers);\r
- }\r
- }\r
-\r
- public void addResultSet(MemoryExtractionResultSet mers){\r
- map.put(mers.getId(), mers);\r
- }\r
-\r
- public void deleteResultSet(String id){\r
- map.remove(id);\r
- }\r
-\r
- public void deleteAllResultSets(){\r
- map.clear();\r
- }\r
-\r
- public ExtractionResultSet getResultSet(String id){\r
- return map.get(id);\r
- }\r
-\r
- public synchronized String[] getResultSetIds(){\r
- return map.keySet().toArray(new String[map.size()]);\r
- }\r
-\r
- public Iterator<String> iterator(){\r
- return Collections.unmodifiableSet(map.keySet()).iterator();\r
- }\r
-\r
- public void refresh(){\r
- }\r
-}\r
+package jp.sourceforge.stigmata.result.history;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.result.MemoryExtractionResultSet;
+
+public class MemoryExtractedBirthmarkHistory implements ExtractedBirthmarkHistory{
+ private Map<String, MemoryExtractionResultSet> map = new HashMap<String, MemoryExtractionResultSet>();
+
+ public MemoryExtractedBirthmarkHistory(){
+ }
+
+ public MemoryExtractedBirthmarkHistory(MemoryExtractionResultSet[] mersArray){
+ for(MemoryExtractionResultSet mers: mersArray){
+ map.put(mers.getId(), mers);
+ }
+ }
+
+ public void addResultSet(MemoryExtractionResultSet mers){
+ map.put(mers.getId(), mers);
+ }
+
+ public void deleteResultSet(String id){
+ map.remove(id);
+ }
+
+ public void deleteAllResultSets(){
+ map.clear();
+ }
+
+ public ExtractionResultSet getResultSet(String id){
+ return map.get(id);
+ }
+
+ public synchronized String[] getResultSetIds(){
+ return map.keySet().toArray(new String[map.size()]);
+ }
+
+ public Iterator<String> iterator(){
+ return Collections.unmodifiableSet(map.keySet()).iterator();
+ }
+
+ public void refresh(){
+ }
+}
-package jp.naist.se.stigmata.result.history;
+package jp.sourceforge.stigmata.result.history;
/*
* $Id$
import javax.sql.DataSource;
-import jp.naist.se.stigmata.ExtractionResultSet;
-import jp.naist.se.stigmata.result.RDBExtractionResultSet;
-import jp.naist.se.stigmata.result.RDBExtractionResultSet.StringHandler;
-import jp.naist.se.stigmata.utils.ArrayIterator;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.result.RDBExtractionResultSet;
+import jp.sourceforge.stigmata.result.RDBExtractionResultSet.StringHandler;
+import jp.sourceforge.stigmata.utils.ArrayIterator;
import org.apache.commons.dbutils.QueryRunner;
-package jp.naist.se.stigmata.result.history;
+package jp.sourceforge.stigmata.result.history;
/*
* $Id$
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;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.result.XmlFileExtractionResultSet;
+import jp.sourceforge.stigmata.utils.Utility;
/**
*
-package jp.naist.se.stigmata.spi;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.Locale;\r
-\r
-/**\r
- * Base abstract class for birthmark SPI.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public abstract class AbstractServiceProvider implements ServiceProvider{\r
-\r
- /**\r
- * returning implementation vendor name of this SPI.\r
- */\r
- public String getDescription(){\r
- return getDescription(Locale.getDefault());\r
- }\r
-\r
- /**\r
- * returning implementation vendor name of this SPI.\r
- */\r
- public String getVendorName(){\r
- return getClass().getPackage().getImplementationVendor();\r
- }\r
-\r
- /**\r
- * returning version of this SPI.\r
- */\r
- public String getVersion(){\r
- return getClass().getPackage().getImplementationVersion();\r
- }\r
-\r
-}\r
+package jp.sourceforge.stigmata.spi;
+
+/*
+ * $Id$
+ */
+
+import java.util.Locale;
+
+/**
+ * Base abstract class for birthmark SPI.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public abstract class AbstractServiceProvider implements ServiceProvider{
+
+ /**
+ * returning implementation vendor name of this SPI.
+ */
+ public String getDescription(){
+ return getDescription(Locale.getDefault());
+ }
+
+ /**
+ * returning implementation vendor name of this SPI.
+ */
+ public String getVendorName(){
+ return getClass().getPackage().getImplementationVendor();
+ }
+
+ /**
+ * returning version of this SPI.
+ */
+ public String getVersion(){
+ return getClass().getPackage().getImplementationVersion();
+ }
+
+}
-package jp.naist.se.stigmata.spi;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.Locale;\r
-\r
-import jp.naist.se.stigmata.BirthmarkComparator;\r
-\r
-/**\r
- * Service provider interface for comparing birthmarks.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public interface BirthmarkComparatorSpi extends ServiceProvider{\r
- /**\r
- * returns a type of the birthmark this service provides.\r
- */\r
- public String getType();\r
-\r
- /**\r
- * returns a localized description of the birthmark this service provides.\r
- */\r
- public String getDescription(Locale locale);\r
-\r
- /**\r
- * returns a localized description of the birthmark in default locale.\r
- */\r
- public String getDescription();\r
-\r
- public String getComparatorClassName();\r
-\r
- /**\r
- * returns a extractor for the birthmark of this service.\r
- */\r
- public BirthmarkComparator getComparator(BirthmarkSpi service);\r
-}\r
-\r
+package jp.sourceforge.stigmata.spi;
+
+/*
+ * $Id$
+ */
+
+import java.util.Locale;
+
+import jp.sourceforge.stigmata.BirthmarkComparator;
+
+/**
+ * Service provider interface for comparing birthmarks.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public interface BirthmarkComparatorSpi extends ServiceProvider{
+ /**
+ * returns a type of the birthmark this service provides.
+ */
+ public String getType();
+
+ /**
+ * returns a localized description of the birthmark this service provides.
+ */
+ public String getDescription(Locale locale);
+
+ /**
+ * returns a localized description of the birthmark in default locale.
+ */
+ public String getDescription();
+
+ public String getComparatorClassName();
+
+ /**
+ * returns a extractor for the birthmark of this service.
+ */
+ public BirthmarkComparator getComparator(BirthmarkSpi service);
+}
+
-package jp.naist.se.stigmata.spi;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.Locale;\r
-\r
-import jp.naist.se.stigmata.BirthmarkExtractor;\r
-\r
-/**\r
- * Service provider interface for extracting birhtmark from given class files.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public interface BirthmarkExtractorSpi extends ServiceProvider{\r
- /**\r
- * returns a type of the birthmark this service provides.\r
- */\r
- public String getType();\r
-\r
- /**\r
- * returns a localized description of the birthmark this service provides.\r
- */\r
- public String getDescription(Locale locale);\r
-\r
- /**\r
- * returns a localized description of the birthmark in default locale.\r
- */\r
- public String getDescription();\r
-\r
- public String getExtractorClassName();\r
-\r
- /**\r
- * returns a extractor for the birthmark of this service.\r
- */\r
- public BirthmarkExtractor getExtractor(BirthmarkSpi service);\r
-}\r
-\r
+package jp.sourceforge.stigmata.spi;
+
+/*
+ * $Id$
+ */
+
+import java.util.Locale;
+
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+
+/**
+ * Service provider interface for extracting birhtmark from given class files.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public interface BirthmarkExtractorSpi extends ServiceProvider{
+ /**
+ * returns a type of the birthmark this service provides.
+ */
+ public String getType();
+
+ /**
+ * returns a localized description of the birthmark this service provides.
+ */
+ public String getDescription(Locale locale);
+
+ /**
+ * returns a localized description of the birthmark in default locale.
+ */
+ public String getDescription();
+
+ public String getExtractorClassName();
+
+ /**
+ * returns a extractor for the birthmark of this service.
+ */
+ public BirthmarkExtractor getExtractor(BirthmarkSpi service);
+}
+
-package jp.naist.se.stigmata.spi;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.Locale;\r
-\r
-import jp.naist.se.stigmata.Birthmark;\r
-import jp.naist.se.stigmata.BirthmarkComparator;\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-import jp.naist.se.stigmata.BirthmarkExtractor;\r
-\r
-/**\r
- * Birthmark service provider interface.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public interface BirthmarkSpi extends ServiceProvider{\r
- /**\r
- * returns a type of the birthmark this service provides.\r
- */\r
- public String getType();\r
-\r
- /**\r
- * returns a type of the birthmark for display.\r
- */\r
- public String getDisplayType(Locale locale);\r
-\r
- /**\r
- * returns a type of the birthmark for display in default locale.\r
- */\r
- public String getDisplayType();\r
-\r
- /**\r
- * returns a description of the birthmark this service provides.\r
- */\r
- public String getDefaultDescription();\r
-\r
- /**\r
- * returns a localized description of the birthmark this service provides.\r
- */\r
- public String getDescription(Locale locale);\r
-\r
- /**\r
- * returns a localized description of the birthmark in default locale.\r
- */\r
- public String getDescription();\r
-\r
- public String getExtractorClassName();\r
-\r
- public Birthmark buildBirthmark();\r
-\r
- public BirthmarkElement buildBirthmarkElement(String elementValue);\r
-\r
- /**\r
- * returns a extractor for the birthmark of this service.\r
- */\r
- public BirthmarkExtractor getExtractor();\r
-\r
- public String getComparatorClassName();\r
-\r
- /**\r
- * returns a comparator for the birthmark of this service.\r
- */\r
- public BirthmarkComparator getComparator();\r
-\r
- public boolean isExpert();\r
-\r
- public boolean isUserDefined();\r
-\r
-}\r
-\r
+package jp.sourceforge.stigmata.spi;
+
+/*
+ * $Id$
+ */
+
+import java.util.Locale;
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkComparator;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+
+/**
+ * Birthmark service provider interface.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public interface BirthmarkSpi extends ServiceProvider{
+ /**
+ * returns a type of the birthmark this service provides.
+ */
+ public String getType();
+
+ /**
+ * returns a type of the birthmark for display.
+ */
+ public String getDisplayType(Locale locale);
+
+ /**
+ * returns a type of the birthmark for display in default locale.
+ */
+ public String getDisplayType();
+
+ /**
+ * returns a description of the birthmark this service provides.
+ */
+ public String getDefaultDescription();
+
+ /**
+ * returns a localized description of the birthmark this service provides.
+ */
+ public String getDescription(Locale locale);
+
+ /**
+ * returns a localized description of the birthmark in default locale.
+ */
+ public String getDescription();
+
+ public String getExtractorClassName();
+
+ public Birthmark buildBirthmark();
+
+ public BirthmarkElement buildBirthmarkElement(String elementValue);
+
+ /**
+ * returns a extractor for the birthmark of this service.
+ */
+ public BirthmarkExtractor getExtractor();
+
+ public String getComparatorClassName();
+
+ /**
+ * returns a comparator for the birthmark of this service.
+ */
+ public BirthmarkComparator getComparator();
+
+ public boolean isExpert();
+
+ public boolean isUserDefined();
+
+}
+
-package jp.naist.se.stigmata.spi;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.Locale;\r
-\r
-import jp.naist.se.stigmata.ComparisonPairFilter;\r
-\r
-/**\r
- * Service provider interface for filtering comparison pair.\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public interface ComparisonPairFilterSpi extends ServiceProvider{\r
- public String getDisplayFilterName(Locale locale);\r
-\r
- public String getDisplayFilterName();\r
-\r
- public String getFilterName();\r
-\r
- public String getFilterClassName();\r
-\r
- public ComparisonPairFilter getFilter();\r
-}\r
+package jp.sourceforge.stigmata.spi;
+
+/*
+ * $Id$
+ */
+
+import java.util.Locale;
+
+import jp.sourceforge.stigmata.ComparisonPairFilter;
+
+/**
+ * Service provider interface for filtering comparison pair.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public interface ComparisonPairFilterSpi extends ServiceProvider{
+ public String getDisplayFilterName(Locale locale);
+
+ public String getDisplayFilterName();
+
+ public String getFilterName();
+
+ public String getFilterClassName();
+
+ public ComparisonPairFilter getFilter();
+}
-package jp.naist.se.stigmata.spi;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkStoreTarget;\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-import jp.naist.se.stigmata.result.history.ExtractedBirthmarkHistory;\r
-\r
-/**\r
- * This service provider interface manages extracted birthmark histories.\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public interface ExtractedBirthmarkSpi{\r
- /**\r
- * finds and returns history from given parameter.\r
- * @param parameter search base.\r
- * @return found history.\r
- */\r
- public ExtractedBirthmarkHistory getHistory(String parameter);\r
-\r
- public ExtractionResultSet getResultSet(String id);\r
-\r
- public ExtractionResultSet createResultSet(BirthmarkContext context);\r
-\r
- public BirthmarkStoreTarget getTarget();\r
-}\r
+package jp.sourceforge.stigmata.spi;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkStoreTarget;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.result.history.ExtractedBirthmarkHistory;
+
+/**
+ * This service provider interface manages extracted birthmark histories.
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public interface ExtractedBirthmarkSpi{
+ /**
+ * finds and returns history from given parameter.
+ * @param parameter search base.
+ * @return found history.
+ */
+ public ExtractedBirthmarkHistory getHistory(String parameter);
+
+ public ExtractionResultSet getResultSet(String id);
+
+ public ExtractionResultSet createResultSet(BirthmarkContext context);
+
+ public BirthmarkStoreTarget getTarget();
+}
-package jp.naist.se.stigmata.spi;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.printer.BirthmarkServicePrinter;\r
-import jp.naist.se.stigmata.printer.ComparisonPairPrinter;\r
-import jp.naist.se.stigmata.printer.ComparisonResultSetPrinter;\r
-import jp.naist.se.stigmata.printer.ExtractionResultSetPrinter;\r
-\r
-/**\r
- * Service provider interface for printing comparison/extracting\r
- * result to certain output stream.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public interface ResultPrinterSpi extends ServiceProvider{\r
- /**\r
- * return a format.\r
- */\r
- public String getFormat();\r
-\r
- public BirthmarkServicePrinter getBirthmarkServicePrinter();\r
-\r
- public ComparisonResultSetPrinter getComparisonResultSetPrinter();\r
-\r
- public ComparisonPairPrinter getComparisonPairPrinter();\r
-\r
- public ExtractionResultSetPrinter getExtractionResultSetPrinter();\r
-}\r
+package jp.sourceforge.stigmata.spi;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.printer.BirthmarkServicePrinter;
+import jp.sourceforge.stigmata.printer.ComparisonPairPrinter;
+import jp.sourceforge.stigmata.printer.ComparisonResultSetPrinter;
+import jp.sourceforge.stigmata.printer.ExtractionResultSetPrinter;
+
+/**
+ * Service provider interface for printing comparison/extracting
+ * result to certain output stream.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public interface ResultPrinterSpi extends ServiceProvider{
+ /**
+ * return a format.
+ */
+ public String getFormat();
+
+ public BirthmarkServicePrinter getBirthmarkServicePrinter();
+
+ public ComparisonResultSetPrinter getComparisonResultSetPrinter();
+
+ public ComparisonPairPrinter getComparisonPairPrinter();
+
+ public ExtractionResultSetPrinter getExtractionResultSetPrinter();
+}
-package jp.naist.se.stigmata.spi;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.Locale;\r
-\r
-/**\r
- * Base interface for birthmark SPI.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public interface ServiceProvider{\r
- public String getDescription(Locale locale);\r
-\r
- public String getDescription();\r
-\r
- public String getVendorName();\r
-\r
- public String getVersion();\r
-}\r
+package jp.sourceforge.stigmata.spi;
+
+/*
+ * $Id$
+ */
+
+import java.util.Locale;
+
+/**
+ * Base interface for birthmark SPI.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public interface ServiceProvider{
+ public String getDescription(Locale locale);
+
+ public String getDescription();
+
+ public String getVendorName();
+
+ public String getVersion();
+}
-package jp.naist.se.stigmata.spi;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.hook.StigmataHook;\r
-import jp.naist.se.stigmata.hook.StigmataRuntimeHook;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public interface StigmataHookSpi{\r
- public StigmataHook onSetup();\r
-\r
- public StigmataHook onTearDown();\r
-\r
- public StigmataRuntimeHook beforeExtraction();\r
-\r
- public StigmataRuntimeHook afterExtraction();\r
-\r
- public StigmataRuntimeHook beforeComparison();\r
-\r
- public StigmataRuntimeHook afterComparison();\r
-\r
- public StigmataRuntimeHook beforeFiltering();\r
-\r
- public StigmataRuntimeHook afterFiltering();\r
+package jp.sourceforge.stigmata.spi;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.hook.StigmataHook;
+import jp.sourceforge.stigmata.hook.StigmataRuntimeHook;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public interface StigmataHookSpi{
+ public StigmataHook onSetup();
+
+ public StigmataHook onTearDown();
+
+ public StigmataRuntimeHook beforeExtraction();
+
+ public StigmataRuntimeHook afterExtraction();
+
+ public StigmataRuntimeHook beforeComparison();
+
+ public StigmataRuntimeHook afterComparison();
+
+ public StigmataRuntimeHook beforeFiltering();
+
+ public StigmataRuntimeHook afterFiltering();
}
\ No newline at end of file
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.Dimension;\r
-import java.awt.GridLayout;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.awt.event.ItemEvent;\r
-import java.awt.event.ItemListener;\r
-import java.util.ArrayList;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-\r
-import javax.swing.Box;\r
-import javax.swing.BoxLayout;\r
-import javax.swing.DefaultListModel;\r
-import javax.swing.JButton;\r
-import javax.swing.JCheckBox;\r
-import javax.swing.JComboBox;\r
-import javax.swing.JList;\r
-import javax.swing.JPanel;\r
-import javax.swing.JScrollPane;\r
-import javax.swing.JTextArea;\r
-import javax.swing.JTextField;\r
-import javax.swing.ListModel;\r
-import javax.swing.border.TitledBorder;\r
-import javax.swing.event.DocumentEvent;\r
-import javax.swing.event.DocumentListener;\r
-import javax.swing.event.ListSelectionEvent;\r
-import javax.swing.event.ListSelectionListener;\r
-\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.birthmarks.BirthmarkService;\r
-import jp.naist.se.stigmata.spi.BirthmarkComparatorSpi;\r
-import jp.naist.se.stigmata.spi.BirthmarkExtractorSpi;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-import jp.sourceforge.talisman.i18n.Messages;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkDefinitionPane extends JPanel{\r
- private static final long serialVersionUID = 3932637653297802978L;\r
-\r
- private StigmataFrame stigmata;\r
- private DefaultListModel model;\r
- private InformationPane information;\r
- private JList serviceList;\r
- private JButton newService;\r
- private JButton removeService;\r
- private List<BirthmarkSpi> addedService = new ArrayList<BirthmarkSpi>();\r
- private List<BirthmarkServiceListener> listeners = new ArrayList<BirthmarkServiceListener>();\r
-\r
- public BirthmarkDefinitionPane(StigmataFrame stigmata){\r
- this.stigmata = stigmata;\r
-\r
- initLayouts();\r
- initData();\r
-\r
- updateView();\r
- }\r
-\r
- public void addBirthmarkServiceListener(BirthmarkServiceListener listener){\r
- listeners.add(listener);\r
- }\r
-\r
- public void removeBirthmarkServiceListener(BirthmarkServiceListener listener){\r
- listeners.remove(listener);\r
- }\r
-\r
- public void reset(){\r
- for(BirthmarkSpi service: addedService){\r
- model.removeElement(service);\r
- }\r
- }\r
-\r
- public void updateEnvironment(BirthmarkEnvironment environment){\r
- for(BirthmarkSpi service: addedService){\r
- if(environment.getService(service.getType()) == null){\r
- if(service instanceof BirthmarkService){\r
- ((BirthmarkService)service).setBirthmarkEnvironment(environment);\r
- }\r
- environment.addService(service);\r
- }\r
- }\r
- }\r
-\r
- private void initData(){\r
- information.initData();\r
- model.addElement(stigmata.getMessages().get("newservice.definition.label"));\r
-\r
- for(BirthmarkSpi service: stigmata.getEnvironment().findServices()){\r
- model.addElement(service);\r
- }\r
- }\r
-\r
- private void initLayouts(){\r
- Messages messages = stigmata.getMessages();\r
- JPanel panel = new JPanel(new BorderLayout());\r
- serviceList = new JList(model = new DefaultListModel());\r
- serviceList.setCellRenderer(new BirthmarkServiceListCellRenderer(new Dimension(250, 20), 60));\r
- JScrollPane scroll = new JScrollPane(serviceList);\r
-\r
- scroll.setBorder(new TitledBorder(messages.get("servicelist.border")));\r
- serviceList.setToolTipText(messages.get("servicelist.tooltip"));\r
-\r
- panel.add(scroll, BorderLayout.WEST);\r
- panel.add(information = new InformationPane(stigmata, this), BorderLayout.CENTER);\r
-\r
- Box buttonPanel = Box.createHorizontalBox();\r
- newService = GUIUtility.createButton(messages, "newservice");\r
- removeService = GUIUtility.createButton(messages, "removeservice");\r
- buttonPanel.add(Box.createHorizontalGlue());\r
- buttonPanel.add(newService);\r
- buttonPanel.add(Box.createHorizontalGlue());\r
- buttonPanel.add(removeService);\r
- buttonPanel.add(Box.createHorizontalGlue());\r
-\r
- setLayout(new BorderLayout());\r
- add(panel, BorderLayout.CENTER);\r
- add(buttonPanel, BorderLayout.SOUTH);\r
-\r
- removeService.setEnabled(false);\r
-\r
- serviceList.addListSelectionListener(new ListSelectionListener(){\r
- public void valueChanged(ListSelectionEvent e){\r
- listValueChanged(e);\r
- }\r
- });\r
-\r
- newService.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- addNewService();\r
- }\r
- });\r
-\r
- removeService.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- removeService();\r
- }\r
- });\r
- }\r
-\r
- private void removeService(){\r
- int index = serviceList.getSelectedIndex();\r
- if(index > 0){\r
- BirthmarkSpi service = (BirthmarkSpi)model.getElementAt(index);\r
- if(service != null && service.isUserDefined()){\r
- model.remove(index);\r
- for(BirthmarkServiceListener listener: listeners){\r
- listener.serviceRemoved(service);\r
- }\r
- }\r
- }\r
- stigmata.setNeedToSaveSettings(true);\r
- updateView();\r
- }\r
-\r
- private void addNewService(){\r
- BirthmarkService service = information.createService();\r
- model.addElement(service);\r
- addedService.add(service);\r
-\r
- for(BirthmarkServiceListener listener: listeners){\r
- listener.serviceAdded(service);\r
- }\r
- stigmata.setNeedToSaveSettings(true);\r
- updateView();\r
- }\r
-\r
- private void listValueChanged(ListSelectionEvent e){\r
- int index = serviceList.getSelectedIndex();\r
- if(index > 0){\r
- BirthmarkSpi service = (BirthmarkSpi)model.getElementAt(index);\r
- if(service != null){\r
- information.setService(service);\r
- }\r
- }\r
- else if(index == 0){\r
- information.clear();\r
- }\r
- updateView();\r
- }\r
-\r
- /**\r
- * remove: enabled when selected index is greater than 0 and selected service is defined by user.\r
- * new service: enabled when selected index is less equals than 0 or selected service is defined by user and information pane is show available service.\r
- *\r
- */\r
- private void updateView(){\r
- int index = serviceList.getSelectedIndex();\r
- ListModel model = serviceList.getModel();\r
- BirthmarkSpi service = null;\r
- if(index > 0){\r
- service = (BirthmarkSpi)model.getElementAt(index); \r
- }\r
- newService.setEnabled(\r
- (index <= 0 || service.isUserDefined()) && \r
- information.isAvailableService() &&\r
- isAvailableServiceName(information.getType())\r
- );\r
- removeService.setEnabled(index > 0 && service.isUserDefined());\r
- information.setEnabled(index <= 0 || service.isUserDefined());\r
- }\r
-\r
- private boolean isAvailableServiceName(String name){\r
- for(BirthmarkSpi service: addedService){\r
- if(service.getType().equals(name)){\r
- return false;\r
- }\r
- }\r
- return true;\r
- }\r
-\r
- private static class InformationPane extends JPanel{\r
- private static final long serialVersionUID = 37906542932362L;\r
-\r
- private StigmataFrame stigmata;\r
- private BirthmarkDefinitionPane thisPane;\r
- private JTextField type;\r
- private JTextField displayType;\r
- private JTextArea description;\r
- private JComboBox extractor;\r
- private JComboBox comparator;\r
- private JCheckBox expert;\r
- private JCheckBox userDefined;\r
-\r
- public InformationPane(StigmataFrame stigmata, BirthmarkDefinitionPane thisPane){\r
- this.stigmata = stigmata;\r
- this.thisPane = thisPane;\r
- initLayouts();\r
- }\r
-\r
- public String getType(){\r
- return type.getText();\r
- }\r
-\r
- public void setEnabled(boolean flag){\r
- super.setEnabled(flag);\r
-\r
- type.setEnabled(flag);\r
- displayType.setEnabled(flag);\r
- description.setEnabled(flag);\r
- extractor.setEnabled(flag);\r
- comparator.setEnabled(flag);\r
- }\r
-\r
- public BirthmarkService createService(){\r
- BirthmarkService service = new BirthmarkService();\r
- service.setType(type.getText());\r
- service.setDisplayType(displayType.getText());\r
- service.setDescription(description.getText());\r
- service.setExtractorClassName(extractor.getSelectedItem().toString());\r
- service.setComparatorClassName(comparator.getSelectedItem().toString());\r
- service.setUserDefined(true);\r
-\r
- return service;\r
- }\r
-\r
- public void clear(){\r
- type.setText("");\r
- displayType.setText("");\r
- description.setText("");\r
- extractor.getModel().setSelectedItem(null);\r
- comparator.getModel().setSelectedItem(null);\r
- userDefined.setSelected(true);\r
- expert.setSelected(true);\r
- }\r
-\r
- public boolean isAvailableService(){\r
- String newType = type.getText();\r
- Object selectedExtractor = extractor.getSelectedItem();\r
- String extractorClass = "";;\r
- if(selectedExtractor != null){\r
- extractorClass = selectedExtractor.toString();\r
- }\r
- Object selectedComparator = comparator.getSelectedItem();\r
- String comparatorClass = "";\r
- if(selectedComparator != null){\r
- comparatorClass = selectedComparator.toString();\r
- }\r
- BirthmarkEnvironment environment = stigmata.getEnvironment();\r
-\r
- boolean flag = newType.length() > 0\r
- && displayType.getText().length() > 0\r
- && extractorClass.length() > 0\r
- && comparatorClass.length() > 0;\r
-\r
- // check inputed type is free\r
- flag = flag && environment.getService(newType) == null;\r
-\r
- // check extractor/comparator classes are available\r
- try{\r
- flag = flag\r
- && environment.getClasspathContext().find(extractorClass) != null\r
- && environment.getClasspathContext().find(comparatorClass) != null;\r
- } catch(ClassNotFoundException e){\r
- flag = false;\r
- }\r
-\r
- return flag;\r
- }\r
-\r
- public void setService(BirthmarkSpi service){\r
- type.setText(service.getType());\r
- displayType.setText(service.getDisplayType());\r
- description.setText(service.getDefaultDescription());\r
- selectComboBoxItem(extractor, service.getExtractorClassName());\r
- selectComboBoxItem(comparator, service.getComparatorClassName());\r
- userDefined.setSelected(service.isUserDefined());\r
- expert.setSelected(service.isExpert());\r
-\r
- setEnabled(service.isUserDefined());\r
- }\r
-\r
- public void initData(){\r
- comparator.addItem("");\r
- for(Iterator<BirthmarkComparatorSpi> i = stigmata.getEnvironment().lookupProviders(BirthmarkComparatorSpi.class); i.hasNext();){\r
- BirthmarkComparatorSpi service = i.next();\r
- comparator.addItem(service.getComparatorClassName());\r
- }\r
- extractor.addItem("");\r
- for(Iterator<BirthmarkExtractorSpi> i = stigmata.getEnvironment().lookupProviders(BirthmarkExtractorSpi.class); i.hasNext();){\r
- BirthmarkExtractorSpi service = i.next();\r
- extractor.addItem(service.getExtractorClassName());\r
- }\r
- }\r
-\r
- private void selectComboBoxItem(JComboBox box, String item){\r
- box.getModel().setSelectedItem(item);\r
- }\r
-\r
- private void initLayouts(){\r
- Messages messages = stigmata.getMessages();\r
- type = new JTextField();\r
- displayType = new JTextField();\r
- extractor = new JComboBox();\r
- comparator = new JComboBox();\r
- expert = new JCheckBox(messages.get("define.expert.label"));\r
- userDefined = new JCheckBox(messages.get("define.userdef.label"));\r
- description = new JTextArea();\r
- JScrollPane scroll = new JScrollPane(description);\r
- type.setColumns(10);\r
- displayType.setColumns(20);\r
- description.setColumns(40);\r
- description.setRows(10);\r
-\r
- Box box1 = Box.createHorizontalBox();\r
- box1.add(type);\r
- box1.add(displayType);\r
-\r
- Box box2 = Box.createHorizontalBox();\r
- box2.add(Box.createHorizontalGlue());\r
- box2.add(expert);\r
- box2.add(Box.createHorizontalGlue());\r
- box2.add(userDefined);\r
- box2.add(Box.createHorizontalGlue());\r
-\r
- JPanel panel = new JPanel(new GridLayout(3, 1));\r
- panel.add(box1);\r
- panel.add(extractor);\r
- panel.add(comparator);\r
-\r
- setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));\r
- add(panel);\r
- add(box2);\r
- add(scroll);\r
- add(Box.createVerticalGlue());\r
-\r
- GUIUtility.decorateJComponent(messages, type, "define.type");\r
- GUIUtility.decorateJComponent(messages, displayType, "define.displaytype");\r
- GUIUtility.decorateJComponent(messages, scroll, "define.description");\r
- GUIUtility.decorateJComponent(messages, extractor, "define.extractor");\r
- GUIUtility.decorateJComponent(messages, comparator, "define.comparator");\r
- GUIUtility.decorateJComponent(messages, expert, "define.expert");\r
- GUIUtility.decorateJComponent(messages, userDefined, "define.userdef");\r
-\r
- userDefined.setEnabled(false);\r
- expert.setEnabled(false);\r
- userDefined.setSelected(true);\r
- expert.setSelected(true);\r
-\r
- extractor.setEditable(true);\r
- comparator.setEditable(true);\r
-\r
- DocumentListener listener = new DocumentListener(){\r
- public void insertUpdate(DocumentEvent e){\r
- thisPane.updateView();\r
- }\r
-\r
- public void removeUpdate(DocumentEvent e){\r
- thisPane.updateView();\r
- }\r
-\r
- public void changedUpdate(DocumentEvent e){\r
- thisPane.updateView();\r
- }\r
- };\r
-\r
- type.getDocument().addDocumentListener(listener);\r
- displayType.getDocument().addDocumentListener(listener);\r
- description.getDocument().addDocumentListener(listener);\r
- ItemListener itemListener = new ItemListener(){\r
- public void itemStateChanged(ItemEvent e){\r
- thisPane.updateView();\r
- }\r
- };\r
- comparator.addItemListener(itemListener);\r
- extractor.addItemListener(itemListener);\r
- ActionListener actionListener = new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- thisPane.updateView();\r
- }\r
- };\r
- comparator.getEditor().addActionListener(actionListener);\r
- extractor.getEditor().addActionListener(actionListener);\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.DefaultListModel;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.ListModel;
+import javax.swing.border.TitledBorder;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.birthmarks.BirthmarkService;
+import jp.sourceforge.stigmata.spi.BirthmarkComparatorSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkExtractorSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.talisman.i18n.Messages;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkDefinitionPane extends JPanel{
+ private static final long serialVersionUID = 3932637653297802978L;
+
+ private StigmataFrame stigmata;
+ private DefaultListModel model;
+ private InformationPane information;
+ private JList serviceList;
+ private JButton newService;
+ private JButton removeService;
+ private List<BirthmarkSpi> addedService = new ArrayList<BirthmarkSpi>();
+ private List<BirthmarkServiceListener> listeners = new ArrayList<BirthmarkServiceListener>();
+
+ public BirthmarkDefinitionPane(StigmataFrame stigmata){
+ this.stigmata = stigmata;
+
+ initLayouts();
+ initData();
+
+ updateView();
+ }
+
+ public void addBirthmarkServiceListener(BirthmarkServiceListener listener){
+ listeners.add(listener);
+ }
+
+ public void removeBirthmarkServiceListener(BirthmarkServiceListener listener){
+ listeners.remove(listener);
+ }
+
+ public void reset(){
+ for(BirthmarkSpi service: addedService){
+ model.removeElement(service);
+ }
+ }
+
+ public void updateEnvironment(BirthmarkEnvironment environment){
+ for(BirthmarkSpi service: addedService){
+ if(environment.getService(service.getType()) == null){
+ if(service instanceof BirthmarkService){
+ ((BirthmarkService)service).setBirthmarkEnvironment(environment);
+ }
+ environment.addService(service);
+ }
+ }
+ }
+
+ private void initData(){
+ information.initData();
+ model.addElement(stigmata.getMessages().get("newservice.definition.label"));
+
+ for(BirthmarkSpi service: stigmata.getEnvironment().findServices()){
+ model.addElement(service);
+ }
+ }
+
+ private void initLayouts(){
+ Messages messages = stigmata.getMessages();
+ JPanel panel = new JPanel(new BorderLayout());
+ serviceList = new JList(model = new DefaultListModel());
+ serviceList.setCellRenderer(new BirthmarkServiceListCellRenderer(new Dimension(250, 20), 60));
+ JScrollPane scroll = new JScrollPane(serviceList);
+
+ scroll.setBorder(new TitledBorder(messages.get("servicelist.border")));
+ serviceList.setToolTipText(messages.get("servicelist.tooltip"));
+
+ panel.add(scroll, BorderLayout.WEST);
+ panel.add(information = new InformationPane(stigmata, this), BorderLayout.CENTER);
+
+ Box buttonPanel = Box.createHorizontalBox();
+ newService = GUIUtility.createButton(messages, "newservice");
+ removeService = GUIUtility.createButton(messages, "removeservice");
+ buttonPanel.add(Box.createHorizontalGlue());
+ buttonPanel.add(newService);
+ buttonPanel.add(Box.createHorizontalGlue());
+ buttonPanel.add(removeService);
+ buttonPanel.add(Box.createHorizontalGlue());
+
+ setLayout(new BorderLayout());
+ add(panel, BorderLayout.CENTER);
+ add(buttonPanel, BorderLayout.SOUTH);
+
+ removeService.setEnabled(false);
+
+ serviceList.addListSelectionListener(new ListSelectionListener(){
+ public void valueChanged(ListSelectionEvent e){
+ listValueChanged(e);
+ }
+ });
+
+ newService.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ addNewService();
+ }
+ });
+
+ removeService.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ removeService();
+ }
+ });
+ }
+
+ private void removeService(){
+ int index = serviceList.getSelectedIndex();
+ if(index > 0){
+ BirthmarkSpi service = (BirthmarkSpi)model.getElementAt(index);
+ if(service != null && service.isUserDefined()){
+ model.remove(index);
+ for(BirthmarkServiceListener listener: listeners){
+ listener.serviceRemoved(service);
+ }
+ }
+ }
+ stigmata.setNeedToSaveSettings(true);
+ updateView();
+ }
+
+ private void addNewService(){
+ BirthmarkService service = information.createService();
+ model.addElement(service);
+ addedService.add(service);
+
+ for(BirthmarkServiceListener listener: listeners){
+ listener.serviceAdded(service);
+ }
+ stigmata.setNeedToSaveSettings(true);
+ updateView();
+ }
+
+ private void listValueChanged(ListSelectionEvent e){
+ int index = serviceList.getSelectedIndex();
+ if(index > 0){
+ BirthmarkSpi service = (BirthmarkSpi)model.getElementAt(index);
+ if(service != null){
+ information.setService(service);
+ }
+ }
+ else if(index == 0){
+ information.clear();
+ }
+ updateView();
+ }
+
+ /**
+ * remove: enabled when selected index is greater than 0 and selected service is defined by user.
+ * new service: enabled when selected index is less equals than 0 or selected service is defined by user and information pane is show available service.
+ *
+ */
+ private void updateView(){
+ int index = serviceList.getSelectedIndex();
+ ListModel model = serviceList.getModel();
+ BirthmarkSpi service = null;
+ if(index > 0){
+ service = (BirthmarkSpi)model.getElementAt(index);
+ }
+ newService.setEnabled(
+ (index <= 0 || service.isUserDefined()) &&
+ information.isAvailableService() &&
+ isAvailableServiceName(information.getType())
+ );
+ removeService.setEnabled(index > 0 && service.isUserDefined());
+ information.setEnabled(index <= 0 || service.isUserDefined());
+ }
+
+ private boolean isAvailableServiceName(String name){
+ for(BirthmarkSpi service: addedService){
+ if(service.getType().equals(name)){
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private static class InformationPane extends JPanel{
+ private static final long serialVersionUID = 37906542932362L;
+
+ private StigmataFrame stigmata;
+ private BirthmarkDefinitionPane thisPane;
+ private JTextField type;
+ private JTextField displayType;
+ private JTextArea description;
+ private JComboBox extractor;
+ private JComboBox comparator;
+ private JCheckBox expert;
+ private JCheckBox userDefined;
+
+ public InformationPane(StigmataFrame stigmata, BirthmarkDefinitionPane thisPane){
+ this.stigmata = stigmata;
+ this.thisPane = thisPane;
+ initLayouts();
+ }
+
+ public String getType(){
+ return type.getText();
+ }
+
+ public void setEnabled(boolean flag){
+ super.setEnabled(flag);
+
+ type.setEnabled(flag);
+ displayType.setEnabled(flag);
+ description.setEnabled(flag);
+ extractor.setEnabled(flag);
+ comparator.setEnabled(flag);
+ }
+
+ public BirthmarkService createService(){
+ BirthmarkService service = new BirthmarkService();
+ service.setType(type.getText());
+ service.setDisplayType(displayType.getText());
+ service.setDescription(description.getText());
+ service.setExtractorClassName(extractor.getSelectedItem().toString());
+ service.setComparatorClassName(comparator.getSelectedItem().toString());
+ service.setUserDefined(true);
+
+ return service;
+ }
+
+ public void clear(){
+ type.setText("");
+ displayType.setText("");
+ description.setText("");
+ extractor.getModel().setSelectedItem(null);
+ comparator.getModel().setSelectedItem(null);
+ userDefined.setSelected(true);
+ expert.setSelected(true);
+ }
+
+ public boolean isAvailableService(){
+ String newType = type.getText();
+ Object selectedExtractor = extractor.getSelectedItem();
+ String extractorClass = "";;
+ if(selectedExtractor != null){
+ extractorClass = selectedExtractor.toString();
+ }
+ Object selectedComparator = comparator.getSelectedItem();
+ String comparatorClass = "";
+ if(selectedComparator != null){
+ comparatorClass = selectedComparator.toString();
+ }
+ BirthmarkEnvironment environment = stigmata.getEnvironment();
+
+ boolean flag = newType.length() > 0
+ && displayType.getText().length() > 0
+ && extractorClass.length() > 0
+ && comparatorClass.length() > 0;
+
+ // check inputed type is free
+ flag = flag && environment.getService(newType) == null;
+
+ // check extractor/comparator classes are available
+ try{
+ flag = flag
+ && environment.getClasspathContext().find(extractorClass) != null
+ && environment.getClasspathContext().find(comparatorClass) != null;
+ } catch(ClassNotFoundException e){
+ flag = false;
+ }
+
+ return flag;
+ }
+
+ public void setService(BirthmarkSpi service){
+ type.setText(service.getType());
+ displayType.setText(service.getDisplayType());
+ description.setText(service.getDefaultDescription());
+ selectComboBoxItem(extractor, service.getExtractorClassName());
+ selectComboBoxItem(comparator, service.getComparatorClassName());
+ userDefined.setSelected(service.isUserDefined());
+ expert.setSelected(service.isExpert());
+
+ setEnabled(service.isUserDefined());
+ }
+
+ public void initData(){
+ comparator.addItem("");
+ for(Iterator<BirthmarkComparatorSpi> i = stigmata.getEnvironment().lookupProviders(BirthmarkComparatorSpi.class); i.hasNext();){
+ BirthmarkComparatorSpi service = i.next();
+ comparator.addItem(service.getComparatorClassName());
+ }
+ extractor.addItem("");
+ for(Iterator<BirthmarkExtractorSpi> i = stigmata.getEnvironment().lookupProviders(BirthmarkExtractorSpi.class); i.hasNext();){
+ BirthmarkExtractorSpi service = i.next();
+ extractor.addItem(service.getExtractorClassName());
+ }
+ }
+
+ private void selectComboBoxItem(JComboBox box, String item){
+ box.getModel().setSelectedItem(item);
+ }
+
+ private void initLayouts(){
+ Messages messages = stigmata.getMessages();
+ type = new JTextField();
+ displayType = new JTextField();
+ extractor = new JComboBox();
+ comparator = new JComboBox();
+ expert = new JCheckBox(messages.get("define.expert.label"));
+ userDefined = new JCheckBox(messages.get("define.userdef.label"));
+ description = new JTextArea();
+ JScrollPane scroll = new JScrollPane(description);
+ type.setColumns(10);
+ displayType.setColumns(20);
+ description.setColumns(40);
+ description.setRows(10);
+
+ Box box1 = Box.createHorizontalBox();
+ box1.add(type);
+ box1.add(displayType);
+
+ Box box2 = Box.createHorizontalBox();
+ box2.add(Box.createHorizontalGlue());
+ box2.add(expert);
+ box2.add(Box.createHorizontalGlue());
+ box2.add(userDefined);
+ box2.add(Box.createHorizontalGlue());
+
+ JPanel panel = new JPanel(new GridLayout(3, 1));
+ panel.add(box1);
+ panel.add(extractor);
+ panel.add(comparator);
+
+ setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
+ add(panel);
+ add(box2);
+ add(scroll);
+ add(Box.createVerticalGlue());
+
+ GUIUtility.decorateJComponent(messages, type, "define.type");
+ GUIUtility.decorateJComponent(messages, displayType, "define.displaytype");
+ GUIUtility.decorateJComponent(messages, scroll, "define.description");
+ GUIUtility.decorateJComponent(messages, extractor, "define.extractor");
+ GUIUtility.decorateJComponent(messages, comparator, "define.comparator");
+ GUIUtility.decorateJComponent(messages, expert, "define.expert");
+ GUIUtility.decorateJComponent(messages, userDefined, "define.userdef");
+
+ userDefined.setEnabled(false);
+ expert.setEnabled(false);
+ userDefined.setSelected(true);
+ expert.setSelected(true);
+
+ extractor.setEditable(true);
+ comparator.setEditable(true);
+
+ DocumentListener listener = new DocumentListener(){
+ public void insertUpdate(DocumentEvent e){
+ thisPane.updateView();
+ }
+
+ public void removeUpdate(DocumentEvent e){
+ thisPane.updateView();
+ }
+
+ public void changedUpdate(DocumentEvent e){
+ thisPane.updateView();
+ }
+ };
+
+ type.getDocument().addDocumentListener(listener);
+ displayType.getDocument().addDocumentListener(listener);
+ description.getDocument().addDocumentListener(listener);
+ ItemListener itemListener = new ItemListener(){
+ public void itemStateChanged(ItemEvent e){
+ thisPane.updateView();
+ }
+ };
+ comparator.addItemListener(itemListener);
+ extractor.addItemListener(itemListener);
+ ActionListener actionListener = new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ thisPane.updateView();
+ }
+ };
+ comparator.getEditor().addActionListener(actionListener);
+ extractor.getEditor().addActionListener(actionListener);
+ }
+ }
+}
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\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.ExtractionTarget;\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
-import jp.sourceforge.talisman.i18n.Messages;\r
-\r
-/**\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkExtractionResultPane extends JPanel{\r
- private static final long serialVersionUID = 239084365756236543L;\r
-\r
- private StigmataFrame frame;\r
- private ExtractionResultSet extraction;\r
-\r
- public BirthmarkExtractionResultPane(StigmataFrame stigmataFrame, ExtractionResultSet ers){\r
- this.frame = stigmataFrame;\r
- this.extraction = ers;\r
-\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
- service = PrinterManager.getDefaultFormatService();\r
- }\r
-\r
- ExtractionResultSetPrinter list = service.getExtractionResultSetPrinter();\r
- list.printResult(new PrintWriter(out), extraction);\r
- }\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
- Messages messages = frame.getMessages();\r
- JButton saveButton = GUIUtility.createButton(messages, "savebirthmark", saveAction);\r
- JButton compareButton = GUIUtility.createButton(messages, "comparebirthmark", compareAction);\r
-\r
- JPopupMenu popup = new JPopupMenu();\r
- popup.add(GUIUtility.createJMenuItem(messages, "savebirthmark", saveAction));\r
- popup.add(GUIUtility.createJMenuItem(messages, "comparebirthmark", compareAction));\r
-\r
- JScrollPane scroll = new JScrollPane();\r
- scroll.setViewportView(new BirthmarkTree(frame, 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
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.io.PrintWriter;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.ExtractionTarget;
+import jp.sourceforge.stigmata.printer.ExtractionResultSetPrinter;
+import jp.sourceforge.stigmata.printer.PrinterManager;
+import jp.sourceforge.stigmata.spi.ResultPrinterSpi;
+import jp.sourceforge.stigmata.ui.swing.actions.PopupShowAction;
+import jp.sourceforge.stigmata.ui.swing.actions.SaveAction;
+import jp.sourceforge.stigmata.utils.AsciiDataWritable;
+import jp.sourceforge.talisman.i18n.Messages;
+
+/**
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkExtractionResultPane extends JPanel{
+ private static final long serialVersionUID = 239084365756236543L;
+
+ private StigmataFrame frame;
+ private ExtractionResultSet extraction;
+
+ public BirthmarkExtractionResultPane(StigmataFrame stigmataFrame, ExtractionResultSet ers){
+ this.frame = stigmataFrame;
+ this.extraction = ers;
+
+ initLayouts();
+ }
+
+ private void initLayouts(){
+ JComponent southPanel = Box.createHorizontalBox();
+ Action saveAction = new SaveAction(frame, new AsciiDataWritable(){
+ public void writeAsciiData(PrintWriter out, String format){
+ ResultPrinterSpi service = PrinterManager.getInstance().getService(format);
+ if(service == null){
+ service = PrinterManager.getDefaultFormatService();
+ }
+
+ ExtractionResultSetPrinter list = service.getExtractionResultSetPrinter();
+ list.printResult(new PrintWriter(out), extraction);
+ }
+ });
+ Action compareAction = new AbstractAction(){
+ private static final long serialVersionUID = -1938101718384412339L;
+
+ public void actionPerformed(ActionEvent e){
+ frame.compareExtractionResult(extraction);
+ }
+ };
+ Messages messages = frame.getMessages();
+ JButton saveButton = GUIUtility.createButton(messages, "savebirthmark", saveAction);
+ JButton compareButton = GUIUtility.createButton(messages, "comparebirthmark", compareAction);
+
+ JPopupMenu popup = new JPopupMenu();
+ popup.add(GUIUtility.createJMenuItem(messages, "savebirthmark", saveAction));
+ popup.add(GUIUtility.createJMenuItem(messages, "comparebirthmark", compareAction));
+
+ JScrollPane scroll = new JScrollPane();
+ scroll.setViewportView(new BirthmarkTree(frame, extraction.getBirthmarkSets(ExtractionTarget.TARGET_BOTH)));
+
+ setLayout(new BorderLayout());
+ add(popup);
+ add(scroll, BorderLayout.CENTER);
+ add(southPanel, BorderLayout.SOUTH);
+ southPanel.add(Box.createHorizontalGlue());
+ southPanel.add(saveButton);
+ southPanel.add(Box.createHorizontalGlue());
+ southPanel.add(compareButton);
+ southPanel.add(Box.createHorizontalGlue());
+
+ addMouseListener(new PopupShowAction(popup));
+ }
+}
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.ArrayList;\r
-import java.util.HashSet;\r
-import java.util.Iterator;\r
-import java.util.LinkedHashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Set;\r
-\r
-import javax.swing.JPanel;\r
-\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-import jp.sourceforge.talisman.i18n.Messages;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public abstract class BirthmarkSelectablePane extends JPanel implements BirthmarkServiceListener{\r
- private StigmataFrame stigmata;\r
- private Set<String> selectedServices = new HashSet<String>();\r
- private Map<String, BirthmarkSelection> services;\r
- private List<DataChangeListener> listeners = new ArrayList<DataChangeListener>();\r
- private boolean expertmode;\r
-\r
- public BirthmarkSelectablePane(StigmataFrame stigmata){\r
- this.stigmata = stigmata;\r
-\r
- initServices();\r
- stigmata.addBirthmarkServiceListener(this);\r
- }\r
-\r
- protected abstract void updateLayouts();\r
-\r
- public Messages getMessages(){\r
- return stigmata.getMessages();\r
- }\r
-\r
- public void setExpertMode(boolean expertmode){\r
- this.expertmode = expertmode;\r
- updateLayouts();\r
- }\r
-\r
- public boolean isExpertMode(){\r
- return expertmode;\r
- }\r
-\r
- public String[] getSelectedServiceTypes(){\r
- return selectedServices.toArray(new String[selectedServices.size()]);\r
- }\r
-\r
- public BirthmarkSpi getService(String type){\r
- BirthmarkSelection elem = services.get(type);\r
- if(elem != null){\r
- return elem.getService();\r
- }\r
- \r
- return null;\r
- }\r
-\r
- public String[] getServiceTypes(){\r
- String[] serviceArray = new String[services.size()];\r
- int index = 0;\r
- for(String key: services.keySet()){\r
- BirthmarkSpi service = services.get(key).getService();\r
- serviceArray[index] = service.getType();\r
- index++;\r
- }\r
- return serviceArray;\r
- }\r
-\r
- public boolean hasService(String type){\r
- return services.get(type) != null;\r
- }\r
-\r
- public void select(String type, boolean flag){\r
- if(flag){\r
- selectedServices.add(type);\r
- }\r
- else{\r
- selectedServices.remove(type);\r
- }\r
- fireEvent();\r
- }\r
-\r
- public void select(BirthmarkSpi service, boolean flag){\r
- select(service.getType(), flag);\r
- }\r
-\r
- public void reset(){\r
- selectedServices.clear();\r
- initServices();\r
- expertmode = false;\r
- updateLayouts();\r
- fireEvent();\r
- }\r
-\r
- public void addDataChangeListener(DataChangeListener listener){\r
- listeners.add(listener);\r
- }\r
-\r
- public void serviceAdded(BirthmarkSpi service){\r
- if(services.get(service.getType()) == null){\r
- BirthmarkSelection elem = new BirthmarkSelection(service);\r
- selectedServices.add(service.getType());\r
- services.put(service.getType(), elem);\r
- }\r
- updateLayouts();\r
- fireEvent();\r
- }\r
-\r
- public void serviceRemoved(BirthmarkSpi service){\r
- BirthmarkSelection elem = services.get(service);\r
- if(elem != null){\r
- selectedServices.remove(service);\r
- services.remove(service);\r
- }\r
- fireEvent();\r
- }\r
-\r
- public Iterator<String> serviceNames(){\r
- return services.keySet().iterator();\r
- }\r
-\r
- protected BirthmarkSelection getSelection(String type){\r
- return services.get(type);\r
- }\r
-\r
- protected Iterator<BirthmarkSelection> birthmarkSelections(){\r
- return services.values().iterator();\r
- }\r
-\r
- protected void fireEvent(){\r
- for(DataChangeListener listener: listeners){\r
- listener.valueChanged(this);\r
- }\r
- }\r
-\r
- private void initServices(){\r
- BirthmarkSpi[] serviceArray = stigmata.getEnvironment().getServices();\r
-\r
- services = new LinkedHashMap<String, BirthmarkSelection>();\r
- for(BirthmarkSpi service: serviceArray){\r
- BirthmarkSelection elem = new BirthmarkSelection(service);\r
- services.put(service.getType(), elem);\r
- }\r
- }\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.swing.JPanel;
+
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.talisman.i18n.Messages;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public abstract class BirthmarkSelectablePane extends JPanel implements BirthmarkServiceListener{
+ private StigmataFrame stigmata;
+ private Set<String> selectedServices = new HashSet<String>();
+ private Map<String, BirthmarkSelection> services;
+ private List<DataChangeListener> listeners = new ArrayList<DataChangeListener>();
+ private boolean expertmode;
+
+ public BirthmarkSelectablePane(StigmataFrame stigmata){
+ this.stigmata = stigmata;
+
+ initServices();
+ stigmata.addBirthmarkServiceListener(this);
+ }
+
+ protected abstract void updateLayouts();
+
+ public Messages getMessages(){
+ return stigmata.getMessages();
+ }
+
+ public void setExpertMode(boolean expertmode){
+ this.expertmode = expertmode;
+ updateLayouts();
+ }
+
+ public boolean isExpertMode(){
+ return expertmode;
+ }
+
+ public String[] getSelectedServiceTypes(){
+ return selectedServices.toArray(new String[selectedServices.size()]);
+ }
+
+ public BirthmarkSpi getService(String type){
+ BirthmarkSelection elem = services.get(type);
+ if(elem != null){
+ return elem.getService();
+ }
+
+ return null;
+ }
+
+ public String[] getServiceTypes(){
+ String[] serviceArray = new String[services.size()];
+ int index = 0;
+ for(String key: services.keySet()){
+ BirthmarkSpi service = services.get(key).getService();
+ serviceArray[index] = service.getType();
+ index++;
+ }
+ return serviceArray;
+ }
+
+ public boolean hasService(String type){
+ return services.get(type) != null;
+ }
+
+ public void select(String type, boolean flag){
+ if(flag){
+ selectedServices.add(type);
+ }
+ else{
+ selectedServices.remove(type);
+ }
+ fireEvent();
+ }
+
+ public void select(BirthmarkSpi service, boolean flag){
+ select(service.getType(), flag);
+ }
+
+ public void reset(){
+ selectedServices.clear();
+ initServices();
+ expertmode = false;
+ updateLayouts();
+ fireEvent();
+ }
+
+ public void addDataChangeListener(DataChangeListener listener){
+ listeners.add(listener);
+ }
+
+ public void serviceAdded(BirthmarkSpi service){
+ if(services.get(service.getType()) == null){
+ BirthmarkSelection elem = new BirthmarkSelection(service);
+ selectedServices.add(service.getType());
+ services.put(service.getType(), elem);
+ }
+ updateLayouts();
+ fireEvent();
+ }
+
+ public void serviceRemoved(BirthmarkSpi service){
+ BirthmarkSelection elem = services.get(service);
+ if(elem != null){
+ selectedServices.remove(service);
+ services.remove(service);
+ }
+ fireEvent();
+ }
+
+ public Iterator<String> serviceNames(){
+ return services.keySet().iterator();
+ }
+
+ protected BirthmarkSelection getSelection(String type){
+ return services.get(type);
+ }
+
+ protected Iterator<BirthmarkSelection> birthmarkSelections(){
+ return services.values().iterator();
+ }
+
+ protected void fireEvent(){
+ for(DataChangeListener listener: listeners){
+ listener.valueChanged(this);
+ }
+ }
+
+ private void initServices(){
+ BirthmarkSpi[] serviceArray = stigmata.getEnvironment().getServices();
+
+ services = new LinkedHashMap<String, BirthmarkSelection>();
+ for(BirthmarkSpi service: serviceArray){
+ BirthmarkSelection elem = new BirthmarkSelection(service);
+ services.put(service.getType(), elem);
+ }
+ }
}
\ No newline at end of file
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/**\r
- * $Id$\r
- */\r
-\r
-import java.io.Serializable;\r
-\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-class BirthmarkSelection implements Serializable{\r
- private static final long serialVersionUID = -3244323970546344L;\r
-\r
- private BirthmarkSpi service;\r
- private boolean selected = true;\r
-\r
- public BirthmarkSelection(BirthmarkSpi service){\r
- this.service = service;\r
- }\r
-\r
- public BirthmarkSpi getService(){\r
- return service;\r
- }\r
-\r
- public boolean isVisible(boolean expertFlag){\r
- return expertFlag || (!expertFlag && !service.isExpert());\r
- }\r
-\r
- public boolean isSelected(){\r
- return selected;\r
- }\r
-\r
- public void setSelected(boolean flag){\r
- this.selected = flag;\r
- }\r
-\r
- public String getType(){\r
- return service.getType();\r
- }\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/**
+ * $Id$
+ */
+
+import java.io.Serializable;
+
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+class BirthmarkSelection implements Serializable{
+ private static final long serialVersionUID = -3244323970546344L;
+
+ private BirthmarkSpi service;
+ private boolean selected = true;
+
+ public BirthmarkSelection(BirthmarkSpi service){
+ this.service = service;
+ }
+
+ public BirthmarkSpi getService(){
+ return service;
+ }
+
+ public boolean isVisible(boolean expertFlag){
+ return expertFlag || (!expertFlag && !service.isExpert());
+ }
+
+ public boolean isSelected(){
+ return selected;
+ }
+
+ public void setSelected(boolean flag){
+ this.selected = flag;
+ }
+
+ public String getType(){
+ return service.getType();
+ }
}
\ No newline at end of file
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.Dimension;\r
-import java.awt.GridLayout;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.util.Iterator;\r
-\r
-import javax.swing.Box;\r
-import javax.swing.JButton;\r
-import javax.swing.JCheckBox;\r
-import javax.swing.JPanel;\r
-\r
-/**\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkSelectionCheckSetPane extends BirthmarkSelectablePane{\r
- private static final long serialVersionUID = 3209854654743223453L;\r
-\r
- private JPanel checks = new JPanel();\r
-\r
- public BirthmarkSelectionCheckSetPane(StigmataFrame stigmata){\r
- super(stigmata);\r
-\r
- initLayouts();\r
- }\r
-\r
- private void initLayouts(){\r
- setLayout(new BorderLayout());\r
- add(checks, BorderLayout.CENTER);\r
-\r
- JButton checkAll = GUIUtility.createButton(getMessages(), "checkall");\r
- JButton uncheckAll = GUIUtility.createButton(getMessages(), "uncheckall");\r
-\r
- Box box = Box.createHorizontalBox();\r
- box.add(Box.createHorizontalGlue());\r
- box.add(checkAll);\r
- box.add(Box.createHorizontalGlue()); \r
- box.add(uncheckAll);\r
- box.add(Box.createHorizontalGlue());\r
- add(box, BorderLayout.SOUTH);\r
-\r
- ActionListener listener = new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- boolean flag = e.getActionCommand().equals("checkall");\r
- for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){\r
- BirthmarkSelection le = i.next();\r
- le.setSelected(flag);\r
- fireEvent();\r
- }\r
- updateLayouts();\r
- }\r
- };\r
- checkAll.addActionListener(listener);\r
- uncheckAll.addActionListener(listener);\r
- }\r
-\r
- /**\r
- * update layouts and update selected birthmarks list.\r
- */\r
- protected void updateLayouts(){\r
- checks.removeAll();\r
- Dimension d = calculateDimension();\r
- checks.setLayout(new GridLayout(d.height, d.width));\r
-\r
- for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){\r
- final BirthmarkSelection elem = i.next();\r
- if(elem.isVisible(isExpertMode())){\r
- JCheckBox check = new JCheckBox(elem.getService().getDisplayType());\r
- check.setSelected(elem.isSelected());\r
- check.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- JCheckBox c = (JCheckBox)e.getSource();\r
- elem.setSelected(c.isSelected());\r
- select(elem.getService().getType(), c.isSelected());\r
- fireEvent();\r
- }\r
- });\r
- checks.add(check);\r
- }\r
-\r
- select(elem.getType(), elem.isVisible(isExpertMode()) && elem.isSelected());\r
- }\r
- updateUI();\r
- }\r
-\r
- private Dimension calculateDimension(){\r
- int rows = 1;\r
- int cols = 0;\r
- for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){\r
- BirthmarkSelection selection = i.next();\r
- if(selection.isVisible(isExpertMode())){\r
- cols++;\r
- }\r
- }\r
-\r
- if(cols > 4){\r
- rows = (cols / 3);\r
- if((cols % 3) != 0) rows++;\r
- cols = 3;\r
- }\r
-\r
- return new Dimension(cols, rows);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Iterator;
+
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkSelectionCheckSetPane extends BirthmarkSelectablePane{
+ private static final long serialVersionUID = 3209854654743223453L;
+
+ private JPanel checks = new JPanel();
+
+ public BirthmarkSelectionCheckSetPane(StigmataFrame stigmata){
+ super(stigmata);
+
+ initLayouts();
+ }
+
+ private void initLayouts(){
+ setLayout(new BorderLayout());
+ add(checks, BorderLayout.CENTER);
+
+ JButton checkAll = GUIUtility.createButton(getMessages(), "checkall");
+ JButton uncheckAll = GUIUtility.createButton(getMessages(), "uncheckall");
+
+ Box box = Box.createHorizontalBox();
+ box.add(Box.createHorizontalGlue());
+ box.add(checkAll);
+ box.add(Box.createHorizontalGlue());
+ box.add(uncheckAll);
+ box.add(Box.createHorizontalGlue());
+ add(box, BorderLayout.SOUTH);
+
+ ActionListener listener = new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ boolean flag = e.getActionCommand().equals("checkall");
+ for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){
+ BirthmarkSelection le = i.next();
+ le.setSelected(flag);
+ fireEvent();
+ }
+ updateLayouts();
+ }
+ };
+ checkAll.addActionListener(listener);
+ uncheckAll.addActionListener(listener);
+ }
+
+ /**
+ * update layouts and update selected birthmarks list.
+ */
+ protected void updateLayouts(){
+ checks.removeAll();
+ Dimension d = calculateDimension();
+ checks.setLayout(new GridLayout(d.height, d.width));
+
+ for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){
+ final BirthmarkSelection elem = i.next();
+ if(elem.isVisible(isExpertMode())){
+ JCheckBox check = new JCheckBox(elem.getService().getDisplayType());
+ check.setSelected(elem.isSelected());
+ check.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ JCheckBox c = (JCheckBox)e.getSource();
+ elem.setSelected(c.isSelected());
+ select(elem.getService().getType(), c.isSelected());
+ fireEvent();
+ }
+ });
+ checks.add(check);
+ }
+
+ select(elem.getType(), elem.isVisible(isExpertMode()) && elem.isSelected());
+ }
+ updateUI();
+ }
+
+ private Dimension calculateDimension(){
+ int rows = 1;
+ int cols = 0;
+ for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){
+ BirthmarkSelection selection = i.next();
+ if(selection.isVisible(isExpertMode())){
+ cols++;
+ }
+ }
+
+ if(cols > 4){
+ rows = (cols / 3);
+ if((cols % 3) != 0) rows++;
+ cols = 3;
+ }
+
+ return new Dimension(cols, rows);
+ }
+}
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.Component;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.awt.event.MouseAdapter;\r
-import java.awt.event.MouseEvent;\r
-import java.util.Iterator;\r
-\r
-import javax.swing.Box;\r
-import javax.swing.DefaultListModel;\r
-import javax.swing.JButton;\r
-import javax.swing.JCheckBox;\r
-import javax.swing.JList;\r
-import javax.swing.JScrollPane;\r
-import javax.swing.ListCellRenderer;\r
-import javax.swing.UIManager;\r
-import javax.swing.border.Border;\r
-import javax.swing.border.EmptyBorder;\r
-\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkSelectionListPane extends BirthmarkSelectablePane{\r
- private static final long serialVersionUID = 3209854654743223453L;\r
-\r
- private DefaultListModel model;\r
- private JList list;\r
-\r
- public BirthmarkSelectionListPane(StigmataFrame stigmata){\r
- super(stigmata);\r
-\r
- initLayouts();\r
- }\r
-\r
- public void serviceRemoved(BirthmarkSpi service){\r
- BirthmarkSelection elem = getSelection(service.getType());\r
- model.removeElement(elem);\r
- \r
- super.serviceRemoved(service);\r
- }\r
-\r
- private void initLayouts(){\r
- setLayout(new BorderLayout());\r
- list = new JList(model = new DefaultListModel());\r
- JScrollPane scroll = new JScrollPane(list);\r
- add(scroll, BorderLayout.CENTER);\r
- list.setCellRenderer(new Renderer());\r
- list.setVisibleRowCount(5);\r
- JButton checkAll = GUIUtility.createButton(getMessages(), "checkall");\r
- JButton uncheckAll = GUIUtility.createButton(getMessages(), "uncheckall");\r
-\r
- Box box = Box.createHorizontalBox();\r
- box.add(Box.createHorizontalGlue());\r
- box.add(checkAll);\r
- box.add(Box.createHorizontalGlue()); \r
- box.add(uncheckAll);\r
- box.add(Box.createHorizontalGlue());\r
- add(box, BorderLayout.SOUTH);\r
-\r
- ActionListener listener = new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- boolean flag = e.getActionCommand().equals("checkall");\r
- for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){\r
- BirthmarkSelection le = i.next();\r
- le.setSelected(flag);\r
- fireEvent();\r
- }\r
- updateUI();\r
- }\r
- };\r
- checkAll.addActionListener(listener);\r
- uncheckAll.addActionListener(listener);\r
- list.addMouseListener(new MouseAdapter(){\r
- @Override\r
- public void mouseClicked(MouseEvent e){\r
- int index = list.locationToIndex(e.getPoint());\r
- list.setSelectedIndex(index);\r
- BirthmarkSelection elem = (BirthmarkSelection)model.getElementAt(index);\r
- elem.setSelected(!elem.isSelected());\r
- updateUI();\r
- }\r
- });\r
- }\r
-\r
- /**\r
- * update layouts and update selected birthmarks list.\r
- */\r
- protected void updateLayouts(){\r
- model.removeAllElements();\r
-\r
- for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){\r
- BirthmarkSelection elem = i.next();\r
- if(elem.isVisible(isExpertMode())){\r
- model.addElement(elem);\r
- }\r
-\r
- select(elem.getType(), elem.isVisible(isExpertMode()) && elem.isSelected());\r
- }\r
- updateUI();\r
- }\r
-\r
- public static class Renderer extends JCheckBox implements ListCellRenderer{\r
- private static final long serialVersionUID = -324432943654654L;\r
- private static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);\r
-\r
- public Renderer(){\r
- setOpaque(true);\r
- }\r
-\r
- public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean forcus){\r
- BirthmarkSelection elem = (BirthmarkSelection)value;\r
- setText(elem.getService().getDisplayType());\r
- setToolTipText(elem.getService().getDescription());\r
- setSelected(elem.isSelected());\r
-\r
- if(isSelected){\r
- setBackground(list.getSelectionBackground());\r
- setForeground(list.getSelectionForeground());\r
- }\r
- else{\r
- setBackground(list.getBackground());\r
- setForeground(list.getForeground());\r
- }\r
-\r
- Border border = null;\r
- if(forcus) {\r
- if (isSelected) {\r
- border = UIManager.getBorder("List.focusSelectedCellHighlightBorder");\r
- }\r
- if (border == null) {\r
- border = UIManager.getBorder("List.focusCellHighlightBorder");\r
- }\r
- } else {\r
- border = noFocusBorder;\r
- }\r
- setBorder(border);\r
-\r
- return this;\r
- }\r
- };\r
-}\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.Iterator;
+
+import javax.swing.Box;
+import javax.swing.DefaultListModel;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JList;
+import javax.swing.JScrollPane;
+import javax.swing.ListCellRenderer;
+import javax.swing.UIManager;
+import javax.swing.border.Border;
+import javax.swing.border.EmptyBorder;
+
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkSelectionListPane extends BirthmarkSelectablePane{
+ private static final long serialVersionUID = 3209854654743223453L;
+
+ private DefaultListModel model;
+ private JList list;
+
+ public BirthmarkSelectionListPane(StigmataFrame stigmata){
+ super(stigmata);
+
+ initLayouts();
+ }
+
+ public void serviceRemoved(BirthmarkSpi service){
+ BirthmarkSelection elem = getSelection(service.getType());
+ model.removeElement(elem);
+
+ super.serviceRemoved(service);
+ }
+
+ private void initLayouts(){
+ setLayout(new BorderLayout());
+ list = new JList(model = new DefaultListModel());
+ JScrollPane scroll = new JScrollPane(list);
+ add(scroll, BorderLayout.CENTER);
+ list.setCellRenderer(new Renderer());
+ list.setVisibleRowCount(5);
+ JButton checkAll = GUIUtility.createButton(getMessages(), "checkall");
+ JButton uncheckAll = GUIUtility.createButton(getMessages(), "uncheckall");
+
+ Box box = Box.createHorizontalBox();
+ box.add(Box.createHorizontalGlue());
+ box.add(checkAll);
+ box.add(Box.createHorizontalGlue());
+ box.add(uncheckAll);
+ box.add(Box.createHorizontalGlue());
+ add(box, BorderLayout.SOUTH);
+
+ ActionListener listener = new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ boolean flag = e.getActionCommand().equals("checkall");
+ for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){
+ BirthmarkSelection le = i.next();
+ le.setSelected(flag);
+ fireEvent();
+ }
+ updateUI();
+ }
+ };
+ checkAll.addActionListener(listener);
+ uncheckAll.addActionListener(listener);
+ list.addMouseListener(new MouseAdapter(){
+ @Override
+ public void mouseClicked(MouseEvent e){
+ int index = list.locationToIndex(e.getPoint());
+ list.setSelectedIndex(index);
+ BirthmarkSelection elem = (BirthmarkSelection)model.getElementAt(index);
+ elem.setSelected(!elem.isSelected());
+ updateUI();
+ }
+ });
+ }
+
+ /**
+ * update layouts and update selected birthmarks list.
+ */
+ protected void updateLayouts(){
+ model.removeAllElements();
+
+ for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){
+ BirthmarkSelection elem = i.next();
+ if(elem.isVisible(isExpertMode())){
+ model.addElement(elem);
+ }
+
+ select(elem.getType(), elem.isVisible(isExpertMode()) && elem.isSelected());
+ }
+ updateUI();
+ }
+
+ public static class Renderer extends JCheckBox implements ListCellRenderer{
+ private static final long serialVersionUID = -324432943654654L;
+ private static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
+
+ public Renderer(){
+ setOpaque(true);
+ }
+
+ public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean forcus){
+ BirthmarkSelection elem = (BirthmarkSelection)value;
+ setText(elem.getService().getDisplayType());
+ setToolTipText(elem.getService().getDescription());
+ setSelected(elem.isSelected());
+
+ if(isSelected){
+ setBackground(list.getSelectionBackground());
+ setForeground(list.getSelectionForeground());
+ }
+ else{
+ setBackground(list.getBackground());
+ setForeground(list.getForeground());
+ }
+
+ Border border = null;
+ if(forcus) {
+ if (isSelected) {
+ border = UIManager.getBorder("List.focusSelectedCellHighlightBorder");
+ }
+ if (border == null) {
+ border = UIManager.getBorder("List.focusCellHighlightBorder");
+ }
+ } else {
+ border = noFocusBorder;
+ }
+ setBorder(border);
+
+ return this;
+ }
+ };
+}
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.Color;\r
-import java.awt.Component;\r
-import java.awt.Dimension;\r
-\r
-import javax.swing.BorderFactory;\r
-import javax.swing.JLabel;\r
-import javax.swing.JList;\r
-import javax.swing.JPanel;\r
-import javax.swing.ListCellRenderer;\r
-import javax.swing.UIManager;\r
-import javax.swing.border.Border;\r
-import javax.swing.border.EmptyBorder;\r
-\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkServiceListCellRenderer extends JPanel implements ListCellRenderer{\r
- private static final long serialVersionUID = 3254763527508235L;\r
- private static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);\r
-\r
- private final JLabel leftLabel = new JLabel();\r
- private final JLabel rightLabel = new JLabel();\r
-\r
- public BirthmarkServiceListCellRenderer(Dimension dim, int rightw){\r
- super(new BorderLayout());\r
- leftLabel.setOpaque(true);\r
- rightLabel.setOpaque(true);\r
- this.setOpaque(true);\r
- leftLabel.setBorder(BorderFactory.createEmptyBorder(0,2,0,0));\r
- rightLabel.setPreferredSize(new Dimension(rightw, 0));\r
- rightLabel.setBorder(BorderFactory.createEmptyBorder(0,5,0,0));\r
- this.add(leftLabel, BorderLayout.CENTER);\r
- this.add(rightLabel, BorderLayout.EAST);\r
- this.setPreferredSize(dim);\r
- }\r
-\r
- public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean hasFocus){\r
- if(value instanceof BirthmarkSpi){\r
- BirthmarkSpi service = (BirthmarkSpi)value;\r
- leftLabel.setText(service.getDisplayType());\r
- rightLabel.setText("(" + service.getType() + ")");\r
- }\r
- else{\r
- leftLabel.setText(String.valueOf(value));\r
- rightLabel.setText("");\r
- }\r
- if(isSelected){\r
- setBackground(list.getSelectionBackground());\r
- setForeground(list.getSelectionForeground());\r
- leftLabel.setBackground(list.getSelectionBackground());\r
- leftLabel.setForeground(list.getSelectionForeground());\r
- rightLabel.setBackground(list.getSelectionBackground());\r
- rightLabel.setForeground(Color.gray.brighter());\r
- }\r
- else{\r
- setBackground(list.getBackground());\r
- setForeground(list.getForeground());\r
- leftLabel.setBackground(list.getBackground());\r
- leftLabel.setForeground(list.getForeground());\r
- rightLabel.setBackground(list.getBackground());\r
- rightLabel.setForeground(Color.gray);\r
- }\r
- Border border = null;\r
- if(hasFocus) {\r
- if (isSelected) {\r
- border = UIManager.getBorder("List.focusSelectedCellHighlightBorder");\r
- }\r
- if (border == null) {\r
- border = UIManager.getBorder("List.focusCellHighlightBorder");\r
- }\r
- } else {\r
- border = noFocusBorder;\r
- }\r
- setBorder(border);\r
-\r
- return this;\r
- }\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+
+import javax.swing.BorderFactory;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.ListCellRenderer;
+import javax.swing.UIManager;
+import javax.swing.border.Border;
+import javax.swing.border.EmptyBorder;
+
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkServiceListCellRenderer extends JPanel implements ListCellRenderer{
+ private static final long serialVersionUID = 3254763527508235L;
+ private static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
+
+ private final JLabel leftLabel = new JLabel();
+ private final JLabel rightLabel = new JLabel();
+
+ public BirthmarkServiceListCellRenderer(Dimension dim, int rightw){
+ super(new BorderLayout());
+ leftLabel.setOpaque(true);
+ rightLabel.setOpaque(true);
+ this.setOpaque(true);
+ leftLabel.setBorder(BorderFactory.createEmptyBorder(0,2,0,0));
+ rightLabel.setPreferredSize(new Dimension(rightw, 0));
+ rightLabel.setBorder(BorderFactory.createEmptyBorder(0,5,0,0));
+ this.add(leftLabel, BorderLayout.CENTER);
+ this.add(rightLabel, BorderLayout.EAST);
+ this.setPreferredSize(dim);
+ }
+
+ public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean hasFocus){
+ if(value instanceof BirthmarkSpi){
+ BirthmarkSpi service = (BirthmarkSpi)value;
+ leftLabel.setText(service.getDisplayType());
+ rightLabel.setText("(" + service.getType() + ")");
+ }
+ else{
+ leftLabel.setText(String.valueOf(value));
+ rightLabel.setText("");
+ }
+ if(isSelected){
+ setBackground(list.getSelectionBackground());
+ setForeground(list.getSelectionForeground());
+ leftLabel.setBackground(list.getSelectionBackground());
+ leftLabel.setForeground(list.getSelectionForeground());
+ rightLabel.setBackground(list.getSelectionBackground());
+ rightLabel.setForeground(Color.gray.brighter());
+ }
+ else{
+ setBackground(list.getBackground());
+ setForeground(list.getForeground());
+ leftLabel.setBackground(list.getBackground());
+ leftLabel.setForeground(list.getForeground());
+ rightLabel.setBackground(list.getBackground());
+ rightLabel.setForeground(Color.gray);
+ }
+ Border border = null;
+ if(hasFocus) {
+ if (isSelected) {
+ border = UIManager.getBorder("List.focusSelectedCellHighlightBorder");
+ }
+ if (border == null) {
+ border = UIManager.getBorder("List.focusCellHighlightBorder");
+ }
+ } else {
+ border = noFocusBorder;
+ }
+ setBorder(border);
+
+ return this;
+ }
}
\ No newline at end of file
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public interface BirthmarkServiceListener{\r
- public void serviceAdded(BirthmarkSpi service);\r
-\r
- public void serviceRemoved(BirthmarkSpi service);\r
-}\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public interface BirthmarkServiceListener{
+ public void serviceAdded(BirthmarkSpi service);
+
+ public void serviceRemoved(BirthmarkSpi service);
+}
-package jp.naist.se.stigmata.ui.swing;
+package jp.sourceforge.stigmata.ui.swing;
/*
* $Id$
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
-import jp.naist.se.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.BirthmarkSet;
/**
*
-package jp.naist.se.stigmata.ui.swing;
+package jp.sourceforge.stigmata.ui.swing;
/*
* $Id$
import javax.swing.tree.DefaultMutableTreeNode;
-import jp.naist.se.stigmata.Birthmark;
-import jp.naist.se.stigmata.BirthmarkElement;
-import jp.naist.se.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.BirthmarkSet;
/**
*
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.File;\r
-import java.io.FileWriter;\r
-import java.io.IOException;\r
-import java.io.PrintWriter;\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-\r
-import jp.naist.se.stigmata.Birthmark;\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ClassNameObfuscator{\r
- private Map<String, String> nameMapping = new HashMap<String, String>();\r
-\r
- public void outputNameMappings(File file) throws IOException{\r
- PrintWriter out = null;\r
- try{\r
- out = new PrintWriter(new FileWriter(file));\r
- for(String oldName: nameMapping.keySet()){\r
- String newName = nameMapping.get(oldName);\r
- out.print(oldName);\r
- out.print(",");\r
- out.println(newName);\r
- }\r
-\r
- }finally{\r
- if(out != null){\r
- out.close();\r
- }\r
- }\r
- }\r
-\r
- public BirthmarkSet obfuscateClassName(BirthmarkSet orig){\r
- String newName = nameMapping.get(orig.getName());\r
- if(newName == null){\r
- newName = String.format("C%04d", new Object[] { new Integer(nameMapping.size() + 1), });\r
- nameMapping.put(orig.getName(), newName);\r
- }\r
-\r
- BirthmarkSet newSet = new BirthmarkSet(newName, orig.getLocation());\r
- for(Birthmark birthmark: orig){\r
- newSet.addBirthmark(birthmark);\r
- }\r
- return newSet;\r
- }\r
-\r
-}\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Map;
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkSet;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ClassNameObfuscator{
+ private Map<String, String> nameMapping = new HashMap<String, String>();
+
+ public void outputNameMappings(File file) throws IOException{
+ PrintWriter out = null;
+ try{
+ out = new PrintWriter(new FileWriter(file));
+ for(String oldName: nameMapping.keySet()){
+ String newName = nameMapping.get(oldName);
+ out.print(oldName);
+ out.print(",");
+ out.println(newName);
+ }
+
+ }finally{
+ if(out != null){
+ out.close();
+ }
+ }
+ }
+
+ public BirthmarkSet obfuscateClassName(BirthmarkSet orig){
+ String newName = nameMapping.get(orig.getName());
+ if(newName == null){
+ newName = String.format("C%04d", new Object[] { new Integer(nameMapping.size() + 1), });
+ nameMapping.put(orig.getName(), newName);
+ }
+
+ BirthmarkSet newSet = new BirthmarkSet(newName, orig.getLocation());
+ for(Birthmark birthmark: orig){
+ newSet.addBirthmark(birthmark);
+ }
+ return newSet;
+ }
+
+}
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.GridLayout;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.io.File;\r
-import java.io.IOException;\r
-import java.net.MalformedURLException;\r
-import java.net.URL;\r
-\r
-import javax.swing.Box;\r
-import javax.swing.JButton;\r
-import javax.swing.JComponent;\r
-import javax.swing.JLabel;\r
-import javax.swing.JOptionPane;\r
-import javax.swing.JPanel;\r
-import javax.swing.JTextField;\r
-import javax.swing.border.TitledBorder;\r
-import javax.swing.event.DocumentEvent;\r
-import javax.swing.event.DocumentListener;\r
-\r
-import jp.naist.se.stigmata.Stigmata;\r
-import jp.naist.se.stigmata.reader.ClasspathContext;\r
-import jp.sourceforge.talisman.i18n.Messages;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ClasspathSettingsPane extends JPanel{\r
- private static final long serialVersionUID = 320973463423634L;\r
-\r
- private StigmataFrame stigmata;\r
- private TargetSelectionPane classpath;\r
- private TargetSelectionPane bootClasspath;\r
-\r
- public ClasspathSettingsPane(StigmataFrame frame){\r
- this.stigmata = frame;\r
-\r
- initLayouts();\r
- }\r
-\r
- public void updateClasspathContext(ClasspathContext context){\r
- String[] cplist = classpath.getValues();\r
- if(cplist != null && cplist.length >= 0){\r
- for(int i = 0; i < cplist.length; i++){\r
- try{\r
- URL url = null;\r
- try{\r
- url = new URL(cplist[i]);\r
- } catch(MalformedURLException e){\r
- url = new File(cplist[i]).toURI().toURL();\r
- }\r
- context.addClasspath(url);\r
- }catch(IOException ee){\r
- }\r
- }\r
- }\r
- }\r
-\r
- public void reset(){\r
- classpath.removeAllElements();\r
- bootClasspath.removeAllElements();\r
- try{\r
- ClasspathContext context = stigmata.getEnvironment().getClasspathContext();\r
- for(URL url: context){\r
- classpath.addValue(url.toString());\r
- }\r
-\r
- addClasspath(bootClasspath, System.getProperty("java.class.path"));\r
- addClasspath(bootClasspath, System.getProperty("sun.boot.class.path"));\r
- } catch(SecurityException e){\r
- e.printStackTrace();\r
- }\r
- }\r
- \r
- private void addClasspath(TargetSelectionPane target, String classpath){\r
- if(classpath != null){\r
- target.addValues(classpath.split(System.getProperty("path.separator")));\r
- stigmata.setNeedToSaveSettings(true);\r
- }\r
- }\r
-\r
- private boolean findClass(String className){\r
- try{\r
- ClasspathContext b = Stigmata.getInstance().createEnvironment().getClasspathContext();\r
- ClasspathContext bytecode = new ClasspathContext(b);\r
- String[] path = classpath.getValues();\r
- for(String cp: path){\r
- bytecode.addClasspath(new File(cp).toURI().toURL());\r
- }\r
- return bytecode.findClass(className) != null;\r
- }catch(ClassNotFoundException e){\r
- }catch(MalformedURLException e){\r
- }\r
- return false;\r
- }\r
-\r
- private void initLayouts(){\r
- final Messages messages = stigmata.getMessages();\r
- JComponent panel = new JPanel(new GridLayout(1, 2));\r
- classpath = new TargetSelectionPane(stigmata);\r
- bootClasspath = new TargetSelectionPane(stigmata);\r
- JComponent south = Box.createHorizontalBox();\r
- final JButton findButton = GUIUtility.createButton(messages, "findclass");\r
- final JTextField text = new JTextField();\r
- final JLabel label = new JLabel();\r
-\r
- classpath.setBorder(new TitledBorder(stigmata.getMessages().get("userclasspath.border")));\r
- classpath.addTargetExtensions(stigmata.getMessages().getArray("userclasspath.extensions"));\r
- classpath.setDescription(stigmata.getMessages().get("userclasspath.description"));\r
- classpath.setDirectorySelectable(true);\r
-\r
- bootClasspath.setBorder(new TitledBorder(stigmata.getMessages().get("bootclasspath.border")));\r
- bootClasspath.setEnabled(false);\r
-\r
- findButton.setEnabled(false);\r
-\r
- south.setBorder(new TitledBorder(stigmata.getMessages().get("classpathchecker.border")));\r
-\r
- label.setIcon(GUIUtility.getIcon(messages, "classpathchecker.default.icon"));\r
- label.setToolTipText(stigmata.getMessages().get("classpathchecker.default.tooltip"));\r
-\r
- setLayout(new BorderLayout());\r
- add(panel, BorderLayout.CENTER);\r
- add(south, BorderLayout.SOUTH);\r
-\r
- panel.add(classpath);\r
- panel.add(bootClasspath);\r
-\r
- south.add(Box.createHorizontalGlue());\r
- south.add(text);\r
- south.add(Box.createHorizontalGlue());\r
- south.add(findButton);\r
- south.add(Box.createHorizontalGlue());\r
- south.add(label);\r
- south.add(Box.createHorizontalGlue());\r
-\r
- text.getDocument().addDocumentListener(new DocumentListener(){\r
- public void changedUpdate(DocumentEvent arg0){\r
- String t = text.getText();\r
- findButton.setEnabled(t.trim().length() > 0);\r
- }\r
-\r
- public void insertUpdate(DocumentEvent arg0){\r
- String t = text.getText();\r
- findButton.setEnabled(t.trim().length() > 0);\r
- }\r
-\r
- public void removeUpdate(DocumentEvent arg0){\r
- String t = text.getText();\r
- findButton.setEnabled(t.trim().length() > 0);\r
- }\r
- });\r
- ActionListener action = new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- String t = text.getText().trim();\r
- boolean flag = findClass(t);\r
- String message = stigmata.getMessages().get("classpathchecker.found.tooltip");\r
- if(flag){\r
- label.setIcon(GUIUtility.getIcon(messages, "classpathchecker.found.icon"));\r
- }\r
- else{\r
- label.setIcon(GUIUtility.getIcon(messages, "classpathchecker.notfound.icon"));\r
- message = stigmata.getMessages().get("classpathchecker.notfound.tooltip");\r
- }\r
- label.setToolTipText(message);\r
- String dm = String.format(\r
- "<html><body><dl><dt>%s</dt><dd>%s</dd></body></html>", t, message\r
- );\r
- JOptionPane.showMessageDialog(\r
- stigmata, dm, stigmata.getMessages().get("classpathchecker.dialog.title"),\r
- JOptionPane.INFORMATION_MESSAGE\r
- );\r
- }\r
- };\r
-\r
- classpath.addDataChangeListener(new DataChangeListener(){\r
- public void valueChanged(Object source){\r
- stigmata.setNeedToSaveSettings(true);\r
- }\r
- });\r
-\r
- findButton.addActionListener(action);\r
- text.addActionListener(action);\r
- }\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.border.TitledBorder;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+
+import jp.sourceforge.stigmata.Stigmata;
+import jp.sourceforge.stigmata.reader.ClasspathContext;
+import jp.sourceforge.talisman.i18n.Messages;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ClasspathSettingsPane extends JPanel{
+ private static final long serialVersionUID = 320973463423634L;
+
+ private StigmataFrame stigmata;
+ private TargetSelectionPane classpath;
+ private TargetSelectionPane bootClasspath;
+
+ public ClasspathSettingsPane(StigmataFrame frame){
+ this.stigmata = frame;
+
+ initLayouts();
+ }
+
+ public void updateClasspathContext(ClasspathContext context){
+ String[] cplist = classpath.getValues();
+ if(cplist != null && cplist.length >= 0){
+ for(int i = 0; i < cplist.length; i++){
+ try{
+ URL url = null;
+ try{
+ url = new URL(cplist[i]);
+ } catch(MalformedURLException e){
+ url = new File(cplist[i]).toURI().toURL();
+ }
+ context.addClasspath(url);
+ }catch(IOException ee){
+ }
+ }
+ }
+ }
+
+ public void reset(){
+ classpath.removeAllElements();
+ bootClasspath.removeAllElements();
+ try{
+ ClasspathContext context = stigmata.getEnvironment().getClasspathContext();
+ for(URL url: context){
+ classpath.addValue(url.toString());
+ }
+
+ addClasspath(bootClasspath, System.getProperty("java.class.path"));
+ addClasspath(bootClasspath, System.getProperty("sun.boot.class.path"));
+ } catch(SecurityException e){
+ e.printStackTrace();
+ }
+ }
+
+ private void addClasspath(TargetSelectionPane target, String classpath){
+ if(classpath != null){
+ target.addValues(classpath.split(System.getProperty("path.separator")));
+ stigmata.setNeedToSaveSettings(true);
+ }
+ }
+
+ private boolean findClass(String className){
+ try{
+ ClasspathContext b = Stigmata.getInstance().createEnvironment().getClasspathContext();
+ ClasspathContext bytecode = new ClasspathContext(b);
+ String[] path = classpath.getValues();
+ for(String cp: path){
+ bytecode.addClasspath(new File(cp).toURI().toURL());
+ }
+ return bytecode.findClass(className) != null;
+ }catch(ClassNotFoundException e){
+ }catch(MalformedURLException e){
+ }
+ return false;
+ }
+
+ private void initLayouts(){
+ final Messages messages = stigmata.getMessages();
+ JComponent panel = new JPanel(new GridLayout(1, 2));
+ classpath = new TargetSelectionPane(stigmata);
+ bootClasspath = new TargetSelectionPane(stigmata);
+ JComponent south = Box.createHorizontalBox();
+ final JButton findButton = GUIUtility.createButton(messages, "findclass");
+ final JTextField text = new JTextField();
+ final JLabel label = new JLabel();
+
+ classpath.setBorder(new TitledBorder(stigmata.getMessages().get("userclasspath.border")));
+ classpath.addTargetExtensions(stigmata.getMessages().getArray("userclasspath.extensions"));
+ classpath.setDescription(stigmata.getMessages().get("userclasspath.description"));
+ classpath.setDirectorySelectable(true);
+
+ bootClasspath.setBorder(new TitledBorder(stigmata.getMessages().get("bootclasspath.border")));
+ bootClasspath.setEnabled(false);
+
+ findButton.setEnabled(false);
+
+ south.setBorder(new TitledBorder(stigmata.getMessages().get("classpathchecker.border")));
+
+ label.setIcon(GUIUtility.getIcon(messages, "classpathchecker.default.icon"));
+ label.setToolTipText(stigmata.getMessages().get("classpathchecker.default.tooltip"));
+
+ setLayout(new BorderLayout());
+ add(panel, BorderLayout.CENTER);
+ add(south, BorderLayout.SOUTH);
+
+ panel.add(classpath);
+ panel.add(bootClasspath);
+
+ south.add(Box.createHorizontalGlue());
+ south.add(text);
+ south.add(Box.createHorizontalGlue());
+ south.add(findButton);
+ south.add(Box.createHorizontalGlue());
+ south.add(label);
+ south.add(Box.createHorizontalGlue());
+
+ text.getDocument().addDocumentListener(new DocumentListener(){
+ public void changedUpdate(DocumentEvent arg0){
+ String t = text.getText();
+ findButton.setEnabled(t.trim().length() > 0);
+ }
+
+ public void insertUpdate(DocumentEvent arg0){
+ String t = text.getText();
+ findButton.setEnabled(t.trim().length() > 0);
+ }
+
+ public void removeUpdate(DocumentEvent arg0){
+ String t = text.getText();
+ findButton.setEnabled(t.trim().length() > 0);
+ }
+ });
+ ActionListener action = new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ String t = text.getText().trim();
+ boolean flag = findClass(t);
+ String message = stigmata.getMessages().get("classpathchecker.found.tooltip");
+ if(flag){
+ label.setIcon(GUIUtility.getIcon(messages, "classpathchecker.found.icon"));
+ }
+ else{
+ label.setIcon(GUIUtility.getIcon(messages, "classpathchecker.notfound.icon"));
+ message = stigmata.getMessages().get("classpathchecker.notfound.tooltip");
+ }
+ label.setToolTipText(message);
+ String dm = String.format(
+ "<html><body><dl><dt>%s</dt><dd>%s</dd></body></html>", t, message
+ );
+ JOptionPane.showMessageDialog(
+ stigmata, dm, stigmata.getMessages().get("classpathchecker.dialog.title"),
+ JOptionPane.INFORMATION_MESSAGE
+ );
+ }
+ };
+
+ classpath.addDataChangeListener(new DataChangeListener(){
+ public void valueChanged(Object source){
+ stigmata.setNeedToSaveSettings(true);
+ }
+ });
+
+ findButton.addActionListener(action);
+ text.addActionListener(action);
+ }
}
\ No newline at end of file
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.Color;\r
-import java.awt.Component;\r
-import java.awt.Dimension;\r
-import java.awt.SystemColor;\r
-\r
-import javax.swing.BorderFactory;\r
-import javax.swing.Icon;\r
-import javax.swing.JLabel;\r
-import javax.swing.JList;\r
-import javax.swing.JPanel;\r
-import javax.swing.ListCellRenderer;\r
-\r
-/**\r
- * copy from tempura memo available at\r
- * http://terai.xrea.jp/Swing/ClippedLRComboBox.html\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class ClippedLRListCellRenderer extends JPanel implements ListCellRenderer{\r
- private static final long serialVersionUID = 32943674625674235L;\r
-\r
- private final JLabel left = new JLabel();\r
- private final JLabel right = new JLabel();\r
-\r
- public ClippedLRListCellRenderer(Dimension dim, int rightWidth){\r
- super(new BorderLayout());\r
- left.setOpaque(true);\r
- right.setOpaque(true);\r
- left.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 0));\r
- right.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));\r
- right.setPreferredSize(new Dimension(rightWidth, 0));\r
-\r
- add(left, BorderLayout.CENTER);\r
- add(right, BorderLayout.EAST);\r
- setPreferredSize(dim);\r
- }\r
-\r
- public Component getListCellRendererComponent(JList list, Object value, int index,\r
- boolean isSelected, boolean cellHasFocus){\r
- LRItem item = (LRItem)value;\r
- if(item != null){\r
- left.setText(String.valueOf(item.getLeft()));\r
- right.setText(String.valueOf(item.getRight()));\r
- }\r
-\r
- if(item.getIcon() != null){\r
- left.setIcon(item.getIcon());\r
- }\r
-\r
- setBackground(isSelected ? SystemColor.textHighlight: Color.white);\r
- left.setBackground(isSelected ? SystemColor.textHighlight: Color.white);\r
- right.setBackground(isSelected ? SystemColor.textHighlight: Color.white);\r
- left.setForeground(isSelected ? Color.white: Color.black);\r
- right.setForeground(isSelected ? Color.gray.brighter(): Color.gray);\r
-\r
- return this;\r
- }\r
-\r
- public static class LRItem{\r
- private Object left;\r
- private Object right;\r
- private Icon icon;\r
-\r
- public LRItem(Icon icon, Object left, Object right){\r
- this(left, right);\r
- setIcon(icon);\r
- }\r
-\r
- public LRItem(Object left, Object right){\r
- setLeft(left);\r
- setRight(right);\r
- }\r
-\r
- public Icon getIcon(){\r
- return icon;\r
- }\r
-\r
- public void setIcon(Icon icon){\r
- this.icon = icon;\r
- }\r
-\r
- public Object getLeft(){\r
- return left;\r
- }\r
-\r
- public void setLeft(Object left){\r
- this.left = left;\r
- }\r
-\r
- public Object getRight(){\r
- return right;\r
- }\r
-\r
- public void setRight(Object right){\r
- this.right = right;\r
- }\r
- }\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.SystemColor;
+
+import javax.swing.BorderFactory;
+import javax.swing.Icon;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.ListCellRenderer;
+
+/**
+ * copy from tempura memo available at
+ * http://terai.xrea.jp/Swing/ClippedLRComboBox.html
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class ClippedLRListCellRenderer extends JPanel implements ListCellRenderer{
+ private static final long serialVersionUID = 32943674625674235L;
+
+ private final JLabel left = new JLabel();
+ private final JLabel right = new JLabel();
+
+ public ClippedLRListCellRenderer(Dimension dim, int rightWidth){
+ super(new BorderLayout());
+ left.setOpaque(true);
+ right.setOpaque(true);
+ left.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 0));
+ right.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
+ right.setPreferredSize(new Dimension(rightWidth, 0));
+
+ add(left, BorderLayout.CENTER);
+ add(right, BorderLayout.EAST);
+ setPreferredSize(dim);
+ }
+
+ public Component getListCellRendererComponent(JList list, Object value, int index,
+ boolean isSelected, boolean cellHasFocus){
+ LRItem item = (LRItem)value;
+ if(item != null){
+ left.setText(String.valueOf(item.getLeft()));
+ right.setText(String.valueOf(item.getRight()));
+ }
+
+ if(item.getIcon() != null){
+ left.setIcon(item.getIcon());
+ }
+
+ setBackground(isSelected ? SystemColor.textHighlight: Color.white);
+ left.setBackground(isSelected ? SystemColor.textHighlight: Color.white);
+ right.setBackground(isSelected ? SystemColor.textHighlight: Color.white);
+ left.setForeground(isSelected ? Color.white: Color.black);
+ right.setForeground(isSelected ? Color.gray.brighter(): Color.gray);
+
+ return this;
+ }
+
+ public static class LRItem{
+ private Object left;
+ private Object right;
+ private Icon icon;
+
+ public LRItem(Icon icon, Object left, Object right){
+ this(left, right);
+ setIcon(icon);
+ }
+
+ public LRItem(Object left, Object right){
+ setLeft(left);
+ setRight(right);
+ }
+
+ public Icon getIcon(){
+ return icon;
+ }
+
+ public void setIcon(Icon icon){
+ this.icon = icon;
+ }
+
+ public Object getLeft(){
+ return left;
+ }
+
+ public void setLeft(Object left){
+ this.left = left;
+ }
+
+ public Object getRight(){
+ return right;
+ }
+
+ public void setRight(Object right){
+ this.right = right;
+ }
+ }
}
\ No newline at end of file
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$ \r
- */\r
-\r
-import java.awt.Color;\r
-import java.awt.Component;\r
-\r
-import javax.swing.JTable;\r
-import javax.swing.table.DefaultTableCellRenderer;\r
-\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-\r
-/**\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class CompareTableCellRenderer extends DefaultTableCellRenderer{\r
- private static final long serialVersionUID = 234557758658567345L;\r
- private static final double EPSILON = 1E-8d;\r
-\r
- private BirthmarkEnvironment environment;\r
-\r
- public CompareTableCellRenderer(BirthmarkEnvironment environment){\r
- this.environment = environment;\r
- }\r
-\r
- public Component getTableCellRendererComponent(JTable table, Object obj, boolean isSelected,\r
- boolean hasForcus, int row, int col){\r
- Object value = table.getValueAt(row, col);\r
- Component c = super.getTableCellRendererComponent(\r
- table, obj, isSelected, hasForcus, row, col\r
- );\r
- if(value instanceof Double && !isSelected){\r
- double d = ((Double)value).doubleValue();\r
- int rank = 0;\r
- if(d < EPSILON) rank = 0;\r
- else if((d - 0.2d) < EPSILON) rank = 1;\r
- else if((d - 0.4d) < EPSILON) rank = 2;\r
- else if((d - 0.6d) < EPSILON) rank = 3;\r
- else if((d - 0.8d) < EPSILON) rank = 4;\r
- else if((d - 1.0d) < EPSILON) rank = 5;\r
-\r
- c.setBackground(getBackgroundColor(rank, environment));\r
- c.setForeground(getForegroundColor(rank, environment));\r
- }\r
-\r
- return c;\r
- }\r
-\r
- public static Color getDefaultForegroundColor(int rank){\r
- int c = 180 - ((180 / 5) * rank);\r
- return new Color(c, c, c);\r
- }\r
-\r
- public static Color getDefaultBackgroundColor(int rank){\r
- Color c;\r
- switch(rank){\r
- case 5:\r
- c = Color.RED;\r
- break;\r
- case 0: case 1: case 2: case 3: case 4:\r
- default:\r
- c = Color.WHITE;\r
- break;\r
- }\r
- return c;\r
- }\r
-\r
- public static Color getBackgroundColor(int rank, BirthmarkEnvironment environment){\r
- Color c = getColor("backcolor_" + rank, environment);\r
- if(c == null){\r
- return getDefaultBackgroundColor(rank);\r
- }\r
- return c;\r
- }\r
-\r
- public static Color getForegroundColor(int rank, BirthmarkEnvironment environment){\r
- Color c = getColor("forecolor_" + rank, environment);\r
- if(c == null){\r
- c = getDefaultForegroundColor(rank);\r
- }\r
- return c;\r
- }\r
-\r
- private static Color getColor(String key, BirthmarkEnvironment environment){\r
- String v = environment.getProperty(key);\r
- try{\r
- int color = Integer.parseInt(v, 16);\r
-\r
- return new Color(\r
- (color >>> 16) & 0xff, (color >>> 8) & 0xff, color & 0xff\r
- );\r
- } catch(NumberFormatException e){\r
- return null;\r
- }\r
- }\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.Color;
+import java.awt.Component;
+
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableCellRenderer;
+
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class CompareTableCellRenderer extends DefaultTableCellRenderer{
+ private static final long serialVersionUID = 234557758658567345L;
+ private static final double EPSILON = 1E-8d;
+
+ private BirthmarkEnvironment environment;
+
+ public CompareTableCellRenderer(BirthmarkEnvironment environment){
+ this.environment = environment;
+ }
+
+ public Component getTableCellRendererComponent(JTable table, Object obj, boolean isSelected,
+ boolean hasForcus, int row, int col){
+ Object value = table.getValueAt(row, col);
+ Component c = super.getTableCellRendererComponent(
+ table, obj, isSelected, hasForcus, row, col
+ );
+ if(value instanceof Double && !isSelected){
+ double d = ((Double)value).doubleValue();
+ int rank = 0;
+ if(d < EPSILON) rank = 0;
+ else if((d - 0.2d) < EPSILON) rank = 1;
+ else if((d - 0.4d) < EPSILON) rank = 2;
+ else if((d - 0.6d) < EPSILON) rank = 3;
+ else if((d - 0.8d) < EPSILON) rank = 4;
+ else if((d - 1.0d) < EPSILON) rank = 5;
+
+ c.setBackground(getBackgroundColor(rank, environment));
+ c.setForeground(getForegroundColor(rank, environment));
+ }
+
+ return c;
+ }
+
+ public static Color getDefaultForegroundColor(int rank){
+ int c = 180 - ((180 / 5) * rank);
+ return new Color(c, c, c);
+ }
+
+ public static Color getDefaultBackgroundColor(int rank){
+ Color c;
+ switch(rank){
+ case 5:
+ c = Color.RED;
+ break;
+ case 0: case 1: case 2: case 3: case 4:
+ default:
+ c = Color.WHITE;
+ break;
+ }
+ return c;
+ }
+
+ public static Color getBackgroundColor(int rank, BirthmarkEnvironment environment){
+ Color c = getColor("backcolor_" + rank, environment);
+ if(c == null){
+ return getDefaultBackgroundColor(rank);
+ }
+ return c;
+ }
+
+ public static Color getForegroundColor(int rank, BirthmarkEnvironment environment){
+ Color c = getColor("forecolor_" + rank, environment);
+ if(c == null){
+ c = getDefaultForegroundColor(rank);
+ }
+ return c;
+ }
+
+ private static Color getColor(String key, BirthmarkEnvironment environment){
+ String v = environment.getProperty(key);
+ try{
+ int color = Integer.parseInt(v, 16);
+
+ return new Color(
+ (color >>> 16) & 0xff, (color >>> 8) & 0xff, color & 0xff
+ );
+ } catch(NumberFormatException e){
+ return null;
+ }
+ }
}
\ No newline at end of file
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.io.File;\r
-import java.io.FileWriter;\r
-import java.io.IOException;\r
-import java.io.PrintWriter;\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-\r
-import javax.swing.Box;\r
-import javax.swing.BoxLayout;\r
-import javax.swing.JButton;\r
-import javax.swing.JComboBox;\r
-import javax.swing.JComponent;\r
-import javax.swing.JMenuItem;\r
-import javax.swing.JOptionPane;\r
-import javax.swing.JPanel;\r
-import javax.swing.JTabbedPane;\r
-import javax.swing.border.TitledBorder;\r
-\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.BirthmarkStoreTarget;\r
-import jp.naist.se.stigmata.ComparisonMethod;\r
-import jp.naist.se.stigmata.ExtractionUnit;\r
-import jp.naist.se.stigmata.Stigmata;\r
-import jp.naist.se.stigmata.filter.ComparisonPairFilterManager;\r
-import jp.naist.se.stigmata.reader.ClasspathContext;\r
-import jp.naist.se.stigmata.utils.ConfigFileExporter;\r
-import jp.naist.se.stigmata.utils.WellknownClassManager;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ControlPane extends JPanel{\r
- private static final long serialVersionUID = 983547612346543645L;\r
-\r
- private StigmataFrame stigmata;\r
- private BirthmarkSelectablePane birthmarks;\r
- private TargetSelectionPane targetX;\r
- private TargetSelectionPane targetY;\r
- private ClasspathSettingsPane classpath;\r
- private WellknownClassesSettingsPane wellknownClassses;\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
- private JButton resetButton;\r
- private PopupButton comparePopup;\r
- private JComboBox unitBox;\r
- private Map<String, String> unitLabels = new HashMap<String, String>();\r
- private boolean expertmode = false;\r
-\r
- public ControlPane(StigmataFrame stigmata){\r
- this.stigmata = stigmata;\r
- }\r
-\r
- void inititalize(){\r
- definition = new BirthmarkDefinitionPane(stigmata);\r
- birthmarks = new BirthmarkSelectionCheckSetPane(stigmata);\r
- properties = new PropertyEditPane(stigmata);\r
- JComponent control = createControlPane();\r
- wellknownClassses = new WellknownClassesSettingsPane(stigmata);\r
- classpath = new ClasspathSettingsPane(stigmata);\r
- filters = new FilterManagementPane(stigmata);\r
- history = new ExtractedHistoryPane(stigmata);\r
- initComponents();\r
-\r
- GUIUtility.addNewTab(stigmata.getMessages(), "targets", controlTab, control);\r
- GUIUtility.addNewTab(stigmata.getMessages(), "wellknown", controlTab, wellknownClassses);\r
- GUIUtility.addNewTab(stigmata.getMessages(), "classpath", controlTab, classpath);\r
- GUIUtility.addNewTab(stigmata.getMessages(), "property", controlTab, properties);\r
- reset();\r
- }\r
-\r
- public void addBirthmarkServiceListener(BirthmarkServiceListener listener){\r
- definition.addBirthmarkServiceListener(listener);\r
- }\r
-\r
- public void removeBirthmarkServiceListener(BirthmarkServiceListener listener){\r
- definition.removeBirthmarkServiceListener(listener);\r
- }\r
-\r
- public void reset(){\r
- this.expertmode = false;\r
- definition.reset();\r
- birthmarks.reset();\r
- stigmata.setExpertMode(false);\r
- targetX.removeAllElements();\r
- targetY.removeAllElements();\r
-\r
- classpath.reset();\r
- wellknownClassses.reset();\r
- filters.reset();\r
- updateEnable();\r
-\r
- int definitionTabIndex = controlTab.indexOfTab(stigmata.getMessages().get("definition.tab.label"));\r
- if(definitionTabIndex >= 0){\r
- controlTab.removeTabAt(definitionTabIndex);\r
- }\r
- int filterTabIndex = controlTab.indexOfTab(stigmata.getMessages().get("filter.tab.label"));\r
- if(filterTabIndex >= 0){\r
- controlTab.removeTabAt(filterTabIndex);\r
- }\r
- }\r
-\r
- public void saveSettings(File file){\r
- BirthmarkEnvironment environment = generateEnvironment();\r
- ConfigFileExporter bce = new ConfigFileExporter(environment);\r
- try{\r
- PrintWriter out = new PrintWriter(new FileWriter(file));\r
- bce.export(out);\r
- out.close();\r
- } catch(IOException e){\r
- JOptionPane.showMessageDialog(\r
- stigmata,\r
- stigmata.getMessages().get("error.io", e.getMessage()),\r
- stigmata.getMessages().get("error.dialog.title"),\r
- JOptionPane.ERROR_MESSAGE\r
- );\r
- }\r
- }\r
-\r
- public void exportSettings(){\r
- File file = stigmata.getSaveFile(\r
- stigmata.getMessages().getArray("export.extensions"), \r
- stigmata.getMessages().get("export.description")\r
- );\r
-\r
- if(file != null){\r
- if(!file.getName().endsWith(".xml")){\r
- file = new File(file.getParent(), file.getName() + ".xml");\r
- }\r
- saveSettings(file);\r
- }\r
- }\r
-\r
- public void setExpertMode(boolean expertmode){\r
- this.expertmode = expertmode;\r
- birthmarks.setExpertMode(expertmode);\r
- stigmata.setExpertMode(expertmode);\r
-\r
- if(expertmode){\r
- GUIUtility.addNewTab(stigmata.getMessages(), "definition", controlTab, definition);\r
- GUIUtility.addNewTab(stigmata.getMessages(), "filter", controlTab, filters);\r
- GUIUtility.addNewTab(stigmata.getMessages(), "history", controlTab, history);\r
- }\r
- else{\r
- removeTabByName(stigmata.getMessages().get("definition.tab.label"));\r
- removeTabByName(stigmata.getMessages().get("filter.tab.label"));\r
- removeTabByName(stigmata.getMessages().get("history.tab.label"));\r
- }\r
- updateEnable();\r
- }\r
-\r
- public boolean isExpertMode(){\r
- return expertmode;\r
- }\r
-\r
- private void removeTabByName(String tabname){\r
- int index = controlTab.indexOfTab(tabname);\r
- if(index >= 0){\r
- controlTab.removeTabAt(index);\r
- }\r
- }\r
-\r
- private JComponent createControlPane(){\r
- JComponent mainPane = new Box(BoxLayout.X_AXIS);\r
- JPanel center = new JPanel(new BorderLayout());\r
- targetX = new TargetSelectionPane(stigmata);\r
- targetY = new TargetSelectionPane(stigmata);\r
-\r
- birthmarks.setBorder(new TitledBorder(stigmata.getMessages().get("birthmarkspane.border")));\r
-\r
- targetX.addTargetExtensions(stigmata.getMessages().getArray("targets.extensions"));\r
- targetX.setDescription(stigmata.getMessages().get("targets.description"));\r
- targetX.setBorder(new TitledBorder(stigmata.getMessages().get("targetx.border")));\r
-\r
- targetY.addTargetExtensions(stigmata.getMessages().getArray("targets.extensions"));\r
- targetY.setDescription(stigmata.getMessages().get("targets.description"));\r
- targetY.setBorder(new TitledBorder(stigmata.getMessages().get("targety.border")));\r
-\r
- center.add(mainPane, BorderLayout.CENTER);\r
- center.add(birthmarks, BorderLayout.SOUTH);\r
-\r
- mainPane.add(Box.createHorizontalGlue());\r
- mainPane.add(targetX);\r
- mainPane.add(Box.createHorizontalGlue());\r
- mainPane.add(targetY);\r
- mainPane.add(Box.createHorizontalGlue());\r
-\r
- DataChangeListener dcl = new DataChangeListener(){\r
- public void valueChanged(Object source){\r
- updateEnable();\r
- }\r
- };\r
- targetX.addDataChangeListener(dcl);\r
- targetY.addDataChangeListener(dcl);\r
- birthmarks.addDataChangeListener(dcl);\r
-\r
- return center;\r
- }\r
-\r
- private void updateEnable(){\r
- String[] valueX = targetX.getValues();\r
- String[] valueY = targetY.getValues();\r
- String[] targets = birthmarks.getSelectedServiceTypes();\r
-\r
- extractButton.setEnabled(\r
- ((valueX != null && valueX.length > 0) || (valueY != null && valueY.length > 0))\r
- && (targets != null && targets.length > 0)\r
- );\r
-\r
- comparePopup.setEnabled(\r
- (valueX != null && valueX.length > 0) &&\r
- (valueY != null && valueY.length > 0) &&\r
- (targets != null && targets.length > 0)\r
- );\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
-\r
- stigmata.extract(fileX, fileY, context);\r
- }\r
-\r
- private void compareRoundRobinWithFiltering(){\r
- BirthmarkContext context = generateContext();\r
- context.setComparisonMethod(ComparisonMethod.ROUND_ROBIN_XY);\r
- FilterSelectionPane pane = new FilterSelectionPane(\r
- stigmata, context.getEnvironment().getFilterManager()\r
- );\r
- int returnValue = JOptionPane.showConfirmDialog(\r
- stigmata, pane, stigmata.getMessages().get("filterselection.dialog.title"),\r
- JOptionPane.OK_CANCEL_OPTION,\r
- JOptionPane.QUESTION_MESSAGE\r
- );\r
- if(returnValue == JOptionPane.OK_OPTION){\r
- String[] filterSetList = pane.getSelectedFilters();\r
- context.setFilterTypes(filterSetList);\r
-\r
- String[] fileX = targetX.getValues();\r
- String[] fileY = targetY.getValues();\r
- stigmata.compareRoundRobinFilter(fileX, fileY, context);\r
- }\r
- }\r
-\r
- private void compareRoundRobin(){\r
- BirthmarkContext context = generateContext();\r
- context.setComparisonMethod(ComparisonMethod.ROUND_ROBIN_XY);\r
- String[] fileX = targetX.getValues();\r
- String[] fileY = targetY.getValues();\r
-\r
- stigmata.compareRoundRobin(fileX, fileY, context);\r
- }\r
-\r
- private void compareSpecifiedPair(){\r
- BirthmarkContext context = generateContext();\r
- context.setComparisonMethod(ComparisonMethod.SPECIFIED_PAIR);\r
- String[] fileX = targetX.getValues();\r
- String[] fileY = targetY.getValues();\r
- stigmata.compareSpecifiedPair(fileX, fileY, context);\r
- }\r
-\r
- private void compareGuessedPair(){\r
- BirthmarkContext context = generateContext();\r
- context.setComparisonMethod(ComparisonMethod.GUESSED_PAIR);\r
- String[] fileX = targetX.getValues();\r
- String[] fileY = targetY.getValues();\r
-\r
- stigmata.compareGuessedPair(fileX, fileY, context);\r
- }\r
-\r
- private BirthmarkContext generateContext(){\r
- BirthmarkContext context = new BirthmarkContext(generateEnvironment());\r
- context.setBirthmarkTypes(birthmarks.getSelectedServiceTypes());\r
- context.setExtractionUnit(parseExtractionUnit());\r
- BirthmarkStoreTarget bst = BirthmarkStoreTarget.MEMORY;\r
- if(context.getEnvironment().getProperty("birthmark.store.target") != null){\r
- bst = BirthmarkStoreTarget.valueOf(context.getEnvironment().getProperty("birthmark.store.target"));\r
- }\r
- if(bst == null){\r
- bst = BirthmarkStoreTarget.MEMORY;\r
- }\r
- context.setStoreTarget(bst);\r
- \r
- return context;\r
- }\r
-\r
- private BirthmarkEnvironment generateEnvironment(){\r
- BirthmarkEnvironment environment = Stigmata.getInstance().createEnvironment();\r
- ClasspathContext bytecode = environment.getClasspathContext();\r
- WellknownClassManager manager = environment.getWellknownClassManager();\r
- ComparisonPairFilterManager filterManager = environment.getFilterManager();\r
-\r
- // environment.setExtractionUnit(parseExtractionUnit());\r
- classpath.updateClasspathContext(bytecode);\r
- wellknownClassses.setWellknownClasses(manager);\r
- filters.updateFilterManager(filterManager);\r
- definition.updateEnvironment(environment);\r
- properties.updateEnvironment(environment);\r
-\r
- return environment;\r
- }\r
-\r
- private ExtractionUnit parseExtractionUnit(){\r
- String label = (String)unitBox.getSelectedItem();\r
- String key = unitLabels.get(label);\r
- ExtractionUnit unit = ExtractionUnit.CLASS;\r
-\r
- if(key.equals("unit.archive")){\r
- unit = ExtractionUnit.ARCHIVE;\r
- }\r
- else if(key.equals("unit.package")){\r
- unit = ExtractionUnit.PACKAGE;\r
- }\r
- else{\r
- unit = ExtractionUnit.CLASS;\r
- }\r
- return unit;\r
- }\r
-\r
- private void initComponents(){\r
- controlTab = new JTabbedPane();\r
- resetButton = GUIUtility.createButton(stigmata.getMessages(), "reset");\r
- extractButton = GUIUtility.createButton(stigmata.getMessages(), "extract");\r
- compareButton = GUIUtility.createButton(stigmata.getMessages(), "roundrobin");\r
- comparePopup = new PopupButton(compareButton);\r
- unitBox = new JComboBox();\r
-\r
- Box south = Box.createHorizontalBox();\r
- south.add(Box.createHorizontalGlue());\r
- south.add(resetButton);\r
- south.add(Box.createHorizontalGlue());\r
- south.add(extractButton);\r
- south.add(Box.createHorizontalGlue());\r
- south.add(comparePopup);\r
- south.add(Box.createHorizontalGlue());\r
- south.add(unitBox);\r
- south.add(Box.createHorizontalGlue());\r
-\r
- setLayout(new BorderLayout());\r
- add(south, BorderLayout.SOUTH);\r
- add(controlTab, BorderLayout.CENTER);\r
-\r
- extractButton.setEnabled(false);\r
- comparePopup.setEnabled(false);\r
-\r
- resetButton.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- reset();\r
- }\r
- });\r
-\r
- extractButton.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- extractButtonActionPerformed(e);\r
- }\r
- });\r
-\r
- ActionListener compareListener = new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- String command = e.getActionCommand();\r
-\r
- if(command.equals("roundrobin")){\r
- compareRoundRobin();\r
- }\r
- else if(command.equals("guessedpair")){\r
- compareGuessedPair();\r
- }\r
- else if(command.equals("specifiedpair")){\r
- compareSpecifiedPair();\r
- }\r
- else if(command.equals("roundrobin.filtering")){\r
- compareRoundRobinWithFiltering();\r
- }\r
- }\r
- };\r
- compareButton.addActionListener(compareListener);\r
-\r
- String[] comparisonMethods = stigmata.getMessages().getArray("comparison.methods");\r
- for(int i = 1; i < comparisonMethods.length; i++){\r
- JMenuItem item = GUIUtility.createJMenuItem(stigmata.getMessages(), comparisonMethods[i]);\r
- comparePopup.addMenuItem(item);\r
- item.addActionListener(compareListener);\r
- }\r
-\r
- String[] extractionUnits = stigmata.getMessages().getArray("extraction.units");\r
- for(int i = 0; i < extractionUnits.length; i++){\r
- String label = stigmata.getMessages().get(extractionUnits[i]);\r
- unitLabels.put(label, extractionUnits[i]);\r
- unitBox.addItem(label);\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import javax.swing.border.TitledBorder;
+
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.BirthmarkStoreTarget;
+import jp.sourceforge.stigmata.ComparisonMethod;
+import jp.sourceforge.stigmata.ExtractionUnit;
+import jp.sourceforge.stigmata.Stigmata;
+import jp.sourceforge.stigmata.filter.ComparisonPairFilterManager;
+import jp.sourceforge.stigmata.reader.ClasspathContext;
+import jp.sourceforge.stigmata.utils.ConfigFileExporter;
+import jp.sourceforge.stigmata.utils.WellknownClassManager;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ControlPane extends JPanel{
+ private static final long serialVersionUID = 983547612346543645L;
+
+ private StigmataFrame stigmata;
+ private BirthmarkSelectablePane birthmarks;
+ private TargetSelectionPane targetX;
+ private TargetSelectionPane targetY;
+ private ClasspathSettingsPane classpath;
+ private WellknownClassesSettingsPane wellknownClassses;
+ private BirthmarkDefinitionPane definition;
+ private PropertyEditPane properties;
+ private FilterManagementPane filters;
+ private ExtractedHistoryPane history;
+ private JTabbedPane controlTab;
+ private JButton compareButton;
+ private JButton extractButton;
+ private JButton resetButton;
+ private PopupButton comparePopup;
+ private JComboBox unitBox;
+ private Map<String, String> unitLabels = new HashMap<String, String>();
+ private boolean expertmode = false;
+
+ public ControlPane(StigmataFrame stigmata){
+ this.stigmata = stigmata;
+ }
+
+ void inititalize(){
+ definition = new BirthmarkDefinitionPane(stigmata);
+ birthmarks = new BirthmarkSelectionCheckSetPane(stigmata);
+ properties = new PropertyEditPane(stigmata);
+ JComponent control = createControlPane();
+ wellknownClassses = new WellknownClassesSettingsPane(stigmata);
+ classpath = new ClasspathSettingsPane(stigmata);
+ filters = new FilterManagementPane(stigmata);
+ history = new ExtractedHistoryPane(stigmata);
+ initComponents();
+
+ GUIUtility.addNewTab(stigmata.getMessages(), "targets", controlTab, control);
+ GUIUtility.addNewTab(stigmata.getMessages(), "wellknown", controlTab, wellknownClassses);
+ GUIUtility.addNewTab(stigmata.getMessages(), "classpath", controlTab, classpath);
+ GUIUtility.addNewTab(stigmata.getMessages(), "property", controlTab, properties);
+ reset();
+ }
+
+ public void addBirthmarkServiceListener(BirthmarkServiceListener listener){
+ definition.addBirthmarkServiceListener(listener);
+ }
+
+ public void removeBirthmarkServiceListener(BirthmarkServiceListener listener){
+ definition.removeBirthmarkServiceListener(listener);
+ }
+
+ public void reset(){
+ this.expertmode = false;
+ definition.reset();
+ birthmarks.reset();
+ stigmata.setExpertMode(false);
+ targetX.removeAllElements();
+ targetY.removeAllElements();
+
+ classpath.reset();
+ wellknownClassses.reset();
+ filters.reset();
+ updateEnable();
+
+ int definitionTabIndex = controlTab.indexOfTab(stigmata.getMessages().get("definition.tab.label"));
+ if(definitionTabIndex >= 0){
+ controlTab.removeTabAt(definitionTabIndex);
+ }
+ int filterTabIndex = controlTab.indexOfTab(stigmata.getMessages().get("filter.tab.label"));
+ if(filterTabIndex >= 0){
+ controlTab.removeTabAt(filterTabIndex);
+ }
+ }
+
+ public void saveSettings(File file){
+ BirthmarkEnvironment environment = generateEnvironment();
+ ConfigFileExporter bce = new ConfigFileExporter(environment);
+ try{
+ PrintWriter out = new PrintWriter(new FileWriter(file));
+ bce.export(out);
+ out.close();
+ } catch(IOException e){
+ JOptionPane.showMessageDialog(
+ stigmata,
+ stigmata.getMessages().get("error.io", e.getMessage()),
+ stigmata.getMessages().get("error.dialog.title"),
+ JOptionPane.ERROR_MESSAGE
+ );
+ }
+ }
+
+ public void exportSettings(){
+ File file = stigmata.getSaveFile(
+ stigmata.getMessages().getArray("export.extensions"),
+ stigmata.getMessages().get("export.description")
+ );
+
+ if(file != null){
+ if(!file.getName().endsWith(".xml")){
+ file = new File(file.getParent(), file.getName() + ".xml");
+ }
+ saveSettings(file);
+ }
+ }
+
+ public void setExpertMode(boolean expertmode){
+ this.expertmode = expertmode;
+ birthmarks.setExpertMode(expertmode);
+ stigmata.setExpertMode(expertmode);
+
+ if(expertmode){
+ GUIUtility.addNewTab(stigmata.getMessages(), "definition", controlTab, definition);
+ GUIUtility.addNewTab(stigmata.getMessages(), "filter", controlTab, filters);
+ GUIUtility.addNewTab(stigmata.getMessages(), "history", controlTab, history);
+ }
+ else{
+ removeTabByName(stigmata.getMessages().get("definition.tab.label"));
+ removeTabByName(stigmata.getMessages().get("filter.tab.label"));
+ removeTabByName(stigmata.getMessages().get("history.tab.label"));
+ }
+ updateEnable();
+ }
+
+ public boolean isExpertMode(){
+ return expertmode;
+ }
+
+ private void removeTabByName(String tabname){
+ int index = controlTab.indexOfTab(tabname);
+ if(index >= 0){
+ controlTab.removeTabAt(index);
+ }
+ }
+
+ private JComponent createControlPane(){
+ JComponent mainPane = new Box(BoxLayout.X_AXIS);
+ JPanel center = new JPanel(new BorderLayout());
+ targetX = new TargetSelectionPane(stigmata);
+ targetY = new TargetSelectionPane(stigmata);
+
+ birthmarks.setBorder(new TitledBorder(stigmata.getMessages().get("birthmarkspane.border")));
+
+ targetX.addTargetExtensions(stigmata.getMessages().getArray("targets.extensions"));
+ targetX.setDescription(stigmata.getMessages().get("targets.description"));
+ targetX.setBorder(new TitledBorder(stigmata.getMessages().get("targetx.border")));
+
+ targetY.addTargetExtensions(stigmata.getMessages().getArray("targets.extensions"));
+ targetY.setDescription(stigmata.getMessages().get("targets.description"));
+ targetY.setBorder(new TitledBorder(stigmata.getMessages().get("targety.border")));
+
+ center.add(mainPane, BorderLayout.CENTER);
+ center.add(birthmarks, BorderLayout.SOUTH);
+
+ mainPane.add(Box.createHorizontalGlue());
+ mainPane.add(targetX);
+ mainPane.add(Box.createHorizontalGlue());
+ mainPane.add(targetY);
+ mainPane.add(Box.createHorizontalGlue());
+
+ DataChangeListener dcl = new DataChangeListener(){
+ public void valueChanged(Object source){
+ updateEnable();
+ }
+ };
+ targetX.addDataChangeListener(dcl);
+ targetY.addDataChangeListener(dcl);
+ birthmarks.addDataChangeListener(dcl);
+
+ return center;
+ }
+
+ private void updateEnable(){
+ String[] valueX = targetX.getValues();
+ String[] valueY = targetY.getValues();
+ String[] targets = birthmarks.getSelectedServiceTypes();
+
+ extractButton.setEnabled(
+ ((valueX != null && valueX.length > 0) || (valueY != null && valueY.length > 0))
+ && (targets != null && targets.length > 0)
+ );
+
+ comparePopup.setEnabled(
+ (valueX != null && valueX.length > 0) &&
+ (valueY != null && valueY.length > 0) &&
+ (targets != null && targets.length > 0)
+ );
+ }
+
+ private void extractButtonActionPerformed(ActionEvent e){
+ BirthmarkContext context = generateContext();
+ context.setComparisonMethod(ComparisonMethod.ROUND_ROBIN_XY);
+
+ String[] fileX = targetX.getValues();
+ String[] fileY = targetY.getValues();
+
+ stigmata.extract(fileX, fileY, context);
+ }
+
+ private void compareRoundRobinWithFiltering(){
+ BirthmarkContext context = generateContext();
+ context.setComparisonMethod(ComparisonMethod.ROUND_ROBIN_XY);
+ FilterSelectionPane pane = new FilterSelectionPane(
+ stigmata, context.getEnvironment().getFilterManager()
+ );
+ int returnValue = JOptionPane.showConfirmDialog(
+ stigmata, pane, stigmata.getMessages().get("filterselection.dialog.title"),
+ JOptionPane.OK_CANCEL_OPTION,
+ JOptionPane.QUESTION_MESSAGE
+ );
+ if(returnValue == JOptionPane.OK_OPTION){
+ String[] filterSetList = pane.getSelectedFilters();
+ context.setFilterTypes(filterSetList);
+
+ String[] fileX = targetX.getValues();
+ String[] fileY = targetY.getValues();
+ stigmata.compareRoundRobinFilter(fileX, fileY, context);
+ }
+ }
+
+ private void compareRoundRobin(){
+ BirthmarkContext context = generateContext();
+ context.setComparisonMethod(ComparisonMethod.ROUND_ROBIN_XY);
+ String[] fileX = targetX.getValues();
+ String[] fileY = targetY.getValues();
+
+ stigmata.compareRoundRobin(fileX, fileY, context);
+ }
+
+ private void compareSpecifiedPair(){
+ BirthmarkContext context = generateContext();
+ context.setComparisonMethod(ComparisonMethod.SPECIFIED_PAIR);
+ String[] fileX = targetX.getValues();
+ String[] fileY = targetY.getValues();
+ stigmata.compareSpecifiedPair(fileX, fileY, context);
+ }
+
+ private void compareGuessedPair(){
+ BirthmarkContext context = generateContext();
+ context.setComparisonMethod(ComparisonMethod.GUESSED_PAIR);
+ String[] fileX = targetX.getValues();
+ String[] fileY = targetY.getValues();
+
+ stigmata.compareGuessedPair(fileX, fileY, context);
+ }
+
+ private BirthmarkContext generateContext(){
+ BirthmarkContext context = new BirthmarkContext(generateEnvironment());
+ context.setBirthmarkTypes(birthmarks.getSelectedServiceTypes());
+ context.setExtractionUnit(parseExtractionUnit());
+ BirthmarkStoreTarget bst = BirthmarkStoreTarget.MEMORY;
+ if(context.getEnvironment().getProperty("birthmark.store.target") != null){
+ bst = BirthmarkStoreTarget.valueOf(context.getEnvironment().getProperty("birthmark.store.target"));
+ }
+ if(bst == null){
+ bst = BirthmarkStoreTarget.MEMORY;
+ }
+ context.setStoreTarget(bst);
+
+ return context;
+ }
+
+ private BirthmarkEnvironment generateEnvironment(){
+ BirthmarkEnvironment environment = Stigmata.getInstance().createEnvironment();
+ ClasspathContext bytecode = environment.getClasspathContext();
+ WellknownClassManager manager = environment.getWellknownClassManager();
+ ComparisonPairFilterManager filterManager = environment.getFilterManager();
+
+ // environment.setExtractionUnit(parseExtractionUnit());
+ classpath.updateClasspathContext(bytecode);
+ wellknownClassses.setWellknownClasses(manager);
+ filters.updateFilterManager(filterManager);
+ definition.updateEnvironment(environment);
+ properties.updateEnvironment(environment);
+
+ return environment;
+ }
+
+ private ExtractionUnit parseExtractionUnit(){
+ String label = (String)unitBox.getSelectedItem();
+ String key = unitLabels.get(label);
+ ExtractionUnit unit = ExtractionUnit.CLASS;
+
+ if(key.equals("unit.archive")){
+ unit = ExtractionUnit.ARCHIVE;
+ }
+ else if(key.equals("unit.package")){
+ unit = ExtractionUnit.PACKAGE;
+ }
+ else{
+ unit = ExtractionUnit.CLASS;
+ }
+ return unit;
+ }
+
+ private void initComponents(){
+ controlTab = new JTabbedPane();
+ resetButton = GUIUtility.createButton(stigmata.getMessages(), "reset");
+ extractButton = GUIUtility.createButton(stigmata.getMessages(), "extract");
+ compareButton = GUIUtility.createButton(stigmata.getMessages(), "roundrobin");
+ comparePopup = new PopupButton(compareButton);
+ unitBox = new JComboBox();
+
+ Box south = Box.createHorizontalBox();
+ south.add(Box.createHorizontalGlue());
+ south.add(resetButton);
+ south.add(Box.createHorizontalGlue());
+ south.add(extractButton);
+ south.add(Box.createHorizontalGlue());
+ south.add(comparePopup);
+ south.add(Box.createHorizontalGlue());
+ south.add(unitBox);
+ south.add(Box.createHorizontalGlue());
+
+ setLayout(new BorderLayout());
+ add(south, BorderLayout.SOUTH);
+ add(controlTab, BorderLayout.CENTER);
+
+ extractButton.setEnabled(false);
+ comparePopup.setEnabled(false);
+
+ resetButton.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ reset();
+ }
+ });
+
+ extractButton.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ extractButtonActionPerformed(e);
+ }
+ });
+
+ ActionListener compareListener = new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ String command = e.getActionCommand();
+
+ if(command.equals("roundrobin")){
+ compareRoundRobin();
+ }
+ else if(command.equals("guessedpair")){
+ compareGuessedPair();
+ }
+ else if(command.equals("specifiedpair")){
+ compareSpecifiedPair();
+ }
+ else if(command.equals("roundrobin.filtering")){
+ compareRoundRobinWithFiltering();
+ }
+ }
+ };
+ compareButton.addActionListener(compareListener);
+
+ String[] comparisonMethods = stigmata.getMessages().getArray("comparison.methods");
+ for(int i = 1; i < comparisonMethods.length; i++){
+ JMenuItem item = GUIUtility.createJMenuItem(stigmata.getMessages(), comparisonMethods[i]);
+ comparePopup.addMenuItem(item);
+ item.addActionListener(compareListener);
+ }
+
+ String[] extractionUnits = stigmata.getMessages().getArray("extraction.units");
+ for(int i = 0; i < extractionUnits.length; i++){
+ String label = stigmata.getMessages().get(extractionUnits[i]);
+ unitLabels.put(label, extractionUnits[i]);
+ unitBox.addItem(label);
+ }
+ }
+}
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.EventListener;\r
-\r
-/**\r
- * \r
- * \r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public interface DataChangeListener extends EventListener{\r
- public void valueChanged(Object source);\r
-}\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.util.EventListener;
+
+/**
+ *
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public interface DataChangeListener extends EventListener{
+ public void valueChanged(Object source);
+}
-package jp.naist.se.stigmata.ui.swing;
+package jp.sourceforge.stigmata.ui.swing;
/*
* $Id$
-package jp.naist.se.stigmata.ui.swing;
+package jp.sourceforge.stigmata.ui.swing;
/*
* $Id$
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.ExtractedBirthmarkServiceManager;
-import jp.naist.se.stigmata.ui.swing.actions.PopupShowAction;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.result.history.ExtractedBirthmarkHistory;
+import jp.sourceforge.stigmata.result.history.ExtractedBirthmarkServiceManager;
+import jp.sourceforge.stigmata.ui.swing.actions.PopupShowAction;
import jp.sourceforge.talisman.i18n.Messages;
/**
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.Component;\r
-import java.io.File;\r
-import java.text.MessageFormat;\r
-\r
-import javax.swing.JFileChooser;\r
-import javax.swing.SwingUtilities;\r
-import javax.swing.filechooser.FileFilter;\r
-\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class FileIOManager{\r
- private Component parent;\r
- private File currentDirectory;\r
- private BirthmarkEnvironment env;\r
-\r
- public FileIOManager(Component parent, BirthmarkEnvironment env){\r
- this.parent = parent;\r
- this.env = env;\r
- if(env.getProperty(".current.directory") != null){\r
- currentDirectory = new File(env.getProperty(".current.directory"));\r
- }\r
- if(env.getProperty("startup.directory") != null){\r
- currentDirectory = new File(env.getProperty("startup.directory"));\r
- }\r
- if(currentDirectory == null && System.getProperty("execution.directory") != null){\r
- currentDirectory = new File(System.getProperty("execution.directory"));\r
- }\r
- if(currentDirectory == null){\r
- currentDirectory = new File(".");\r
- }\r
- }\r
-\r
- public File getCurrentDirectory(){\r
- return currentDirectory;\r
- }\r
-\r
- public void setCurrentDirectory(File directory) throws IllegalArgumentException{\r
- if(!directory.isDirectory()){\r
- throw new IllegalArgumentException(directory.getName() + " is not directory");\r
- }\r
- this.currentDirectory = directory;\r
- env.addProperty(".current.directory", directory.getAbsolutePath());\r
- }\r
-\r
- public File findFile(boolean open){\r
- return findFile(open, new String[0], "");\r
- }\r
-\r
- public File[] openFiles(FileFilter[] filters, boolean multi, boolean directory){\r
- JFileChooser chooser = new JFileChooser(getCurrentDirectory());\r
- if(filters != null){\r
- for(int i = 0; i < filters.length; i++){\r
- chooser.addChoosableFileFilter(filters[i]);\r
- }\r
- }\r
- chooser.setMultiSelectionEnabled(multi);\r
- if(directory){\r
- chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);\r
- }\r
- else{\r
- chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);\r
- }\r
- int returnValue = chooser.showOpenDialog(SwingUtilities.getRootPane(parent));\r
- if(returnValue == JFileChooser.APPROVE_OPTION){\r
- setCurrentDirectory(chooser.getCurrentDirectory());\r
- return chooser.getSelectedFiles();\r
- }\r
- return new File[0];\r
- }\r
-\r
- public File findFile(boolean open, String[] exts, String desc){\r
- JFileChooser chooser = new JFileChooser(getCurrentDirectory());\r
- if(exts != null){\r
- MessageFormat formatter = new MessageFormat(desc);\r
- for(int i = 0; i < exts.length; i++){\r
- chooser.addChoosableFileFilter(\r
- new ExtensionFilter(exts[i], formatter.format(new Object[] { exts[i], }))\r
- );\r
- }\r
- }\r
- int returnValue = -1;\r
- if(open){\r
- returnValue = chooser.showOpenDialog(SwingUtilities.getRootPane(parent));\r
- }\r
- else{\r
- returnValue = chooser.showSaveDialog(SwingUtilities.getRootPane(parent));\r
- }\r
- if(returnValue == JFileChooser.APPROVE_OPTION){\r
- setCurrentDirectory(chooser.getCurrentDirectory());\r
- File file = chooser.getSelectedFile();\r
- if(!open){\r
- FileFilter filter = chooser.getFileFilter();\r
- if(filter instanceof ExtensionFilter){\r
- ExtensionFilter ef = (ExtensionFilter)filter;\r
- if(!filter.accept(file)){\r
- String[] extensions = ef.getExtensions();\r
- file = setExtension(file, extensions[0]);\r
- }\r
- }\r
- }\r
- return file;\r
- }\r
- return null;\r
- }\r
-\r
- private File setExtension(File file, String ext){\r
- String name = file.getName();\r
- int index = name.lastIndexOf('.');\r
- String n = name;\r
- if(index > 0){\r
- n = n.substring(0, index);\r
- }\r
- name = n + '.' + ext;\r
- return new File(file.getParentFile(), name);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.Component;
+import java.io.File;
+import java.text.MessageFormat;
+
+import javax.swing.JFileChooser;
+import javax.swing.SwingUtilities;
+import javax.swing.filechooser.FileFilter;
+
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class FileIOManager{
+ private Component parent;
+ private File currentDirectory;
+ private BirthmarkEnvironment env;
+
+ public FileIOManager(Component parent, BirthmarkEnvironment env){
+ this.parent = parent;
+ this.env = env;
+ if(env.getProperty(".current.directory") != null){
+ currentDirectory = new File(env.getProperty(".current.directory"));
+ }
+ if(env.getProperty("startup.directory") != null){
+ currentDirectory = new File(env.getProperty("startup.directory"));
+ }
+ if(currentDirectory == null && System.getProperty("execution.directory") != null){
+ currentDirectory = new File(System.getProperty("execution.directory"));
+ }
+ if(currentDirectory == null){
+ currentDirectory = new File(".");
+ }
+ }
+
+ public File getCurrentDirectory(){
+ return currentDirectory;
+ }
+
+ public void setCurrentDirectory(File directory) throws IllegalArgumentException{
+ if(!directory.isDirectory()){
+ throw new IllegalArgumentException(directory.getName() + " is not directory");
+ }
+ this.currentDirectory = directory;
+ env.addProperty(".current.directory", directory.getAbsolutePath());
+ }
+
+ public File findFile(boolean open){
+ return findFile(open, new String[0], "");
+ }
+
+ public File[] openFiles(FileFilter[] filters, boolean multi, boolean directory){
+ JFileChooser chooser = new JFileChooser(getCurrentDirectory());
+ if(filters != null){
+ for(int i = 0; i < filters.length; i++){
+ chooser.addChoosableFileFilter(filters[i]);
+ }
+ }
+ chooser.setMultiSelectionEnabled(multi);
+ if(directory){
+ chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
+ }
+ else{
+ chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
+ }
+ int returnValue = chooser.showOpenDialog(SwingUtilities.getRootPane(parent));
+ if(returnValue == JFileChooser.APPROVE_OPTION){
+ setCurrentDirectory(chooser.getCurrentDirectory());
+ return chooser.getSelectedFiles();
+ }
+ return new File[0];
+ }
+
+ public File findFile(boolean open, String[] exts, String desc){
+ JFileChooser chooser = new JFileChooser(getCurrentDirectory());
+ if(exts != null){
+ MessageFormat formatter = new MessageFormat(desc);
+ for(int i = 0; i < exts.length; i++){
+ chooser.addChoosableFileFilter(
+ new ExtensionFilter(exts[i], formatter.format(new Object[] { exts[i], }))
+ );
+ }
+ }
+ int returnValue = -1;
+ if(open){
+ returnValue = chooser.showOpenDialog(SwingUtilities.getRootPane(parent));
+ }
+ else{
+ returnValue = chooser.showSaveDialog(SwingUtilities.getRootPane(parent));
+ }
+ if(returnValue == JFileChooser.APPROVE_OPTION){
+ setCurrentDirectory(chooser.getCurrentDirectory());
+ File file = chooser.getSelectedFile();
+ if(!open){
+ FileFilter filter = chooser.getFileFilter();
+ if(filter instanceof ExtensionFilter){
+ ExtensionFilter ef = (ExtensionFilter)filter;
+ if(!filter.accept(file)){
+ String[] extensions = ef.getExtensions();
+ file = setExtension(file, extensions[0]);
+ }
+ }
+ }
+ return file;
+ }
+ return null;
+ }
+
+ private File setExtension(File file, String ext){
+ String name = file.getName();
+ int index = name.lastIndexOf('.');
+ String n = name;
+ if(index > 0){
+ n = n.substring(0, index);
+ }
+ name = n + '.' + ext;
+ return new File(file.getParentFile(), name);
+ }
+}
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.GridLayout;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.awt.event.MouseAdapter;\r
-import java.awt.event.MouseEvent;\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-\r
-import javax.swing.Box;\r
-import javax.swing.DefaultListModel;\r
-import javax.swing.JButton;\r
-import javax.swing.JComponent;\r
-import javax.swing.JList;\r
-import javax.swing.JPanel;\r
-import javax.swing.JScrollPane;\r
-import javax.swing.event.ListSelectionEvent;\r
-import javax.swing.event.ListSelectionListener;\r
-\r
-import jp.naist.se.stigmata.ComparisonPairFilter;\r
-import jp.naist.se.stigmata.ComparisonPairFilterSet;\r
-import jp.naist.se.stigmata.filter.ComparisonPairFilterManager;\r
-import jp.naist.se.stigmata.ui.swing.filter.ComparisonPairFilterRetainable;\r
-import jp.naist.se.stigmata.ui.swing.filter.FilterEditingPane;\r
-import jp.naist.se.stigmata.ui.swing.filter.FilterSetDefinitionPane;\r
-\r
-/**\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class FilterManagementPane extends JPanel implements ComparisonPairFilterRetainable{\r
- private static final long serialVersionUID = 972135792354L;\r
-\r
- private StigmataFrame stigmata;\r
- private FilterSetDefinitionPane definition;\r
- private FilterEditingPane filterPane;\r
- private JList list;\r
- private DefaultListModel model;\r
- private Map<String, ComparisonPairFilterSet> filters = new HashMap<String, ComparisonPairFilterSet>();\r
-\r
- public FilterManagementPane(StigmataFrame stigmata){\r
- this.stigmata = stigmata;\r
- \r
- initLayouts();\r
- }\r
-\r
- public void reset(){\r
- definition.reset();\r
- filterPane.reset();\r
- model.removeAllElements();\r
- \r
- ComparisonPairFilterManager manager = stigmata.getEnvironment().getFilterManager();\r
- for(ComparisonPairFilterSet filterset: manager.getFilterSets()){\r
- addFilterSet(filterset);\r
- }\r
- }\r
-\r
- public void updateFilterManager(ComparisonPairFilterManager manager){\r
- for(ComparisonPairFilterSet filterset: filters.values()){\r
- manager.addFilterSet(filterset);\r
- }\r
- }\r
-\r
- public void addFilterSet(ComparisonPairFilterSet filterset){\r
- filters.put(filterset.getName(), filterset);\r
-\r
- model.addElement(filterset.getName());\r
- list.setSelectedIndex(model.getSize() - 1);\r
- }\r
-\r
- public void removeFilterSet(String name){\r
- filters.remove(name);\r
- model.removeElement(name);\r
-\r
- list.clearSelection();\r
- }\r
-\r
- public void updateFilterSet(String oldName, ComparisonPairFilterSet newfilter){\r
- for(int i = 0; i < model.getSize(); i++){\r
- if(oldName.equals(model.getElementAt(i))){\r
- model.setElementAt(newfilter.getName(), i);\r
- break;\r
- }\r
- }\r
- filters.remove(oldName);\r
- filters.put(newfilter.getName(), newfilter);\r
- }\r
-\r
- public ComparisonPairFilterSet getFilterSet(String name){\r
- return filters.get(name);\r
- }\r
-\r
- public void filterSelected(ComparisonPairFilter filter){\r
- filterPane.setFilter(filter);\r
- }\r
-\r
- private void initLayouts(){\r
- definition = new FilterSetDefinitionPane(stigmata, this);\r
- filterPane = new FilterEditingPane(stigmata);\r
- filterPane.addComparisonPairFilterListener(definition);\r
- JComponent filtersetlist = createFilterSetPane();\r
-\r
- GUIUtility.decorateJComponent(stigmata.getMessages(), filtersetlist, "filtersetlist.pane");\r
- GUIUtility.decorateJComponent(stigmata.getMessages(), definition, "filterdefinition.pane");\r
- GUIUtility.decorateJComponent(stigmata.getMessages(), filterPane, "filter.pane");\r
-\r
- setLayout(new GridLayout(1, 3));\r
- add(filtersetlist);\r
- add(definition);\r
- add(filterPane);\r
- }\r
-\r
- private JComponent createFilterSetPane(){\r
- model = new DefaultListModel();\r
- list = new JList(model);\r
-\r
- final JButton upButton = GUIUtility.createButton(stigmata.getMessages(), "moveup");\r
- final JButton downButton = GUIUtility.createButton(stigmata.getMessages(), "movedown");\r
-\r
- Box south = Box.createHorizontalBox();\r
- south.add(Box.createHorizontalGlue());\r
- south.add(upButton);\r
- south.add(Box.createHorizontalGlue());\r
- south.add(downButton);\r
- south.add(Box.createHorizontalGlue());\r
-\r
- list.addMouseListener(new MouseAdapter(){\r
- @Override\r
- public void mouseClicked(MouseEvent e){\r
- int index = list.locationToIndex(e.getPoint());\r
- list.setSelectedIndex(index);\r
- updateUI();\r
- }\r
- });\r
- list.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
- public void valueChanged(ListSelectionEvent e){\r
- int[] indexes = list.getSelectedIndices();\r
- int rows = model.getSize();\r
-\r
- upButton.setEnabled(indexes.length == 1 && rows > 1 && indexes[0] != 0);\r
- downButton.setEnabled(indexes.length == 1 && rows > 1 && indexes[0] != (rows - 1));\r
- if(indexes.length != 1){\r
- definition.setFilterSet(null);\r
- }\r
- else{\r
- definition.setFilterSet(filters.get(model.getElementAt(indexes[0])));\r
- }\r
- }\r
- });\r
- ActionListener listener = new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- int step = 1;\r
- if(e.getActionCommand().equals("moveup")){\r
- step = -1;\r
- }\r
- int index = list.getSelectedIndex();\r
- Object e1 = model.getElementAt(index);\r
- Object e2 = model.getElementAt(index + step);\r
- model.setElementAt(e1, index + step);\r
- model.setElementAt(e2, index);\r
- list.setSelectedIndex(index + step);\r
- }\r
- };\r
- upButton.addActionListener(listener);\r
- downButton.addActionListener(listener);\r
- upButton.setEnabled(false);\r
- downButton.setEnabled(false);\r
- \r
- JPanel panel = new JPanel(new BorderLayout());\r
- panel.add(new JScrollPane(list), BorderLayout.CENTER);\r
- panel.add(south, BorderLayout.SOUTH);\r
- \r
- return panel;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.Box;
+import javax.swing.DefaultListModel;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import jp.sourceforge.stigmata.ComparisonPairFilter;
+import jp.sourceforge.stigmata.ComparisonPairFilterSet;
+import jp.sourceforge.stigmata.filter.ComparisonPairFilterManager;
+import jp.sourceforge.stigmata.ui.swing.filter.ComparisonPairFilterRetainable;
+import jp.sourceforge.stigmata.ui.swing.filter.FilterEditingPane;
+import jp.sourceforge.stigmata.ui.swing.filter.FilterSetDefinitionPane;
+
+/**
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class FilterManagementPane extends JPanel implements ComparisonPairFilterRetainable{
+ private static final long serialVersionUID = 972135792354L;
+
+ private StigmataFrame stigmata;
+ private FilterSetDefinitionPane definition;
+ private FilterEditingPane filterPane;
+ private JList list;
+ private DefaultListModel model;
+ private Map<String, ComparisonPairFilterSet> filters = new HashMap<String, ComparisonPairFilterSet>();
+
+ public FilterManagementPane(StigmataFrame stigmata){
+ this.stigmata = stigmata;
+
+ initLayouts();
+ }
+
+ public void reset(){
+ definition.reset();
+ filterPane.reset();
+ model.removeAllElements();
+
+ ComparisonPairFilterManager manager = stigmata.getEnvironment().getFilterManager();
+ for(ComparisonPairFilterSet filterset: manager.getFilterSets()){
+ addFilterSet(filterset);
+ }
+ }
+
+ public void updateFilterManager(ComparisonPairFilterManager manager){
+ for(ComparisonPairFilterSet filterset: filters.values()){
+ manager.addFilterSet(filterset);
+ }
+ }
+
+ public void addFilterSet(ComparisonPairFilterSet filterset){
+ filters.put(filterset.getName(), filterset);
+
+ model.addElement(filterset.getName());
+ list.setSelectedIndex(model.getSize() - 1);
+ }
+
+ public void removeFilterSet(String name){
+ filters.remove(name);
+ model.removeElement(name);
+
+ list.clearSelection();
+ }
+
+ public void updateFilterSet(String oldName, ComparisonPairFilterSet newfilter){
+ for(int i = 0; i < model.getSize(); i++){
+ if(oldName.equals(model.getElementAt(i))){
+ model.setElementAt(newfilter.getName(), i);
+ break;
+ }
+ }
+ filters.remove(oldName);
+ filters.put(newfilter.getName(), newfilter);
+ }
+
+ public ComparisonPairFilterSet getFilterSet(String name){
+ return filters.get(name);
+ }
+
+ public void filterSelected(ComparisonPairFilter filter){
+ filterPane.setFilter(filter);
+ }
+
+ private void initLayouts(){
+ definition = new FilterSetDefinitionPane(stigmata, this);
+ filterPane = new FilterEditingPane(stigmata);
+ filterPane.addComparisonPairFilterListener(definition);
+ JComponent filtersetlist = createFilterSetPane();
+
+ GUIUtility.decorateJComponent(stigmata.getMessages(), filtersetlist, "filtersetlist.pane");
+ GUIUtility.decorateJComponent(stigmata.getMessages(), definition, "filterdefinition.pane");
+ GUIUtility.decorateJComponent(stigmata.getMessages(), filterPane, "filter.pane");
+
+ setLayout(new GridLayout(1, 3));
+ add(filtersetlist);
+ add(definition);
+ add(filterPane);
+ }
+
+ private JComponent createFilterSetPane(){
+ model = new DefaultListModel();
+ list = new JList(model);
+
+ final JButton upButton = GUIUtility.createButton(stigmata.getMessages(), "moveup");
+ final JButton downButton = GUIUtility.createButton(stigmata.getMessages(), "movedown");
+
+ Box south = Box.createHorizontalBox();
+ south.add(Box.createHorizontalGlue());
+ south.add(upButton);
+ south.add(Box.createHorizontalGlue());
+ south.add(downButton);
+ south.add(Box.createHorizontalGlue());
+
+ list.addMouseListener(new MouseAdapter(){
+ @Override
+ public void mouseClicked(MouseEvent e){
+ int index = list.locationToIndex(e.getPoint());
+ list.setSelectedIndex(index);
+ updateUI();
+ }
+ });
+ list.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
+ public void valueChanged(ListSelectionEvent e){
+ int[] indexes = list.getSelectedIndices();
+ int rows = model.getSize();
+
+ upButton.setEnabled(indexes.length == 1 && rows > 1 && indexes[0] != 0);
+ downButton.setEnabled(indexes.length == 1 && rows > 1 && indexes[0] != (rows - 1));
+ if(indexes.length != 1){
+ definition.setFilterSet(null);
+ }
+ else{
+ definition.setFilterSet(filters.get(model.getElementAt(indexes[0])));
+ }
+ }
+ });
+ ActionListener listener = new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ int step = 1;
+ if(e.getActionCommand().equals("moveup")){
+ step = -1;
+ }
+ int index = list.getSelectedIndex();
+ Object e1 = model.getElementAt(index);
+ Object e2 = model.getElementAt(index + step);
+ model.setElementAt(e1, index + step);
+ model.setElementAt(e2, index);
+ list.setSelectedIndex(index + step);
+ }
+ };
+ upButton.addActionListener(listener);
+ downButton.addActionListener(listener);
+ upButton.setEnabled(false);
+ downButton.setEnabled(false);
+
+ JPanel panel = new JPanel(new BorderLayout());
+ panel.add(new JScrollPane(list), BorderLayout.CENTER);
+ panel.add(south, BorderLayout.SOUTH);
+
+ return panel;
+ }
+}
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.Component;\r
-import java.awt.event.MouseAdapter;\r
-import java.awt.event.MouseEvent;\r
-import java.util.ArrayList;\r
-import java.util.HashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-import javax.swing.DefaultListModel;\r
-import javax.swing.JCheckBox;\r
-import javax.swing.JList;\r
-import javax.swing.JPanel;\r
-import javax.swing.JScrollPane;\r
-import javax.swing.ListCellRenderer;\r
-import javax.swing.ListSelectionModel;\r
-import javax.swing.UIManager;\r
-import javax.swing.border.Border;\r
-import javax.swing.border.EmptyBorder;\r
-import javax.swing.event.ListSelectionEvent;\r
-import javax.swing.event.ListSelectionListener;\r
-\r
-import jp.naist.se.stigmata.ComparisonPairFilter;\r
-import jp.naist.se.stigmata.ComparisonPairFilterSet;\r
-import jp.naist.se.stigmata.filter.ComparisonPairFilterManager;\r
-import jp.naist.se.stigmata.ui.swing.filter.ComparisonPairFilterRetainable;\r
-import jp.naist.se.stigmata.ui.swing.filter.FilterSetDefinitionPane;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class FilterSelectionPane extends JPanel implements ComparisonPairFilterRetainable{\r
- private static final long serialVersionUID = 1825547576389498336L;\r
- private static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);\r
-\r
- private StigmataFrame stigmata;\r
- private ComparisonPairFilterManager manager;\r
- private FilterSetDefinitionPane filterDef;\r
- private Map<String, Boolean> enableMap = new HashMap<String, Boolean>();\r
- private Map<String, ComparisonPairFilterSet> filters = new HashMap<String, ComparisonPairFilterSet>(); \r
- private DefaultListModel model;\r
- private JList list;\r
-\r
- public FilterSelectionPane(StigmataFrame stigmata, ComparisonPairFilterManager manager){\r
- this.stigmata = stigmata;\r
- this.manager = manager;\r
-\r
- initLayout();\r
- }\r
-\r
- public void addFilterSet(ComparisonPairFilterSet filter){\r
- filters.put(filter.getName(), filter);\r
- enableMap.put(filter.getName(), false);\r
- model.addElement(filter.getName());\r
- }\r
-\r
- public void filterSelected(ComparisonPairFilter filter){\r
- }\r
-\r
- public ComparisonPairFilterSet getFilterSet(String name){\r
- return filters.get(name);\r
- }\r
-\r
- public void removeFilterSet(String name){\r
- filters.remove(name);\r
- enableMap.remove(name);\r
- model.removeElement(name);\r
- }\r
-\r
- public void updateFilterSet(String name, ComparisonPairFilterSet filter){\r
- int index = model.indexOf(name);\r
- model.set(index, filter.getName());\r
- filters.put(filter.getName(), filter);\r
- enableMap.put(filter.getName(), enableMap.get(name));\r
-\r
- if(!name.equals(filter.getName())){\r
- enableMap.remove(name);\r
- filters.remove(name);\r
- }\r
- }\r
-\r
- public String[] getSelectedFilters(){\r
- List<String> list = new ArrayList<String>();\r
- for(String key: enableMap.keySet()){\r
- if(enableMap.get(key)){\r
- list.add(key);\r
- }\r
- }\r
- return list.toArray(new String[list.size()]);\r
- }\r
-\r
- private void initLayout(){\r
- setLayout(new BorderLayout());\r
- model = new DefaultListModel();\r
- list = new JList(model);\r
- list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
- list.setCellRenderer(new CheckableListCellRenderer());\r
-\r
- JScrollPane scroll = new JScrollPane(list);\r
- filterDef = new FilterSetDefinitionPane(stigmata, this, false);\r
-\r
- add(scroll, BorderLayout.WEST);\r
- add(filterDef, BorderLayout.CENTER);\r
-\r
- list.addListSelectionListener(new ListSelectionListener(){\r
- public void valueChanged(ListSelectionEvent e){\r
- String name = (String)list.getSelectedValue();\r
- filterDef.setFilterSet(filters.get(name));\r
- \r
- updateUI();\r
- }\r
- });\r
- list.addMouseListener(new MouseAdapter(){\r
- @Override\r
- public void mouseClicked(MouseEvent e){\r
- int index = list.locationToIndex(e.getPoint());\r
- String value = (String)model.getElementAt(index);\r
- enableMap.put(value, !enableMap.get(value));\r
- updateUI();\r
- }\r
- });\r
-\r
- for(ComparisonPairFilterSet filterset: manager.getFilterSets()){\r
- enableMap.put(filterset.getName(), false);\r
- filters.put(filterset.getName(), filterset);\r
- model.addElement(filterset.getName());\r
- }\r
- }\r
-\r
- private class CheckableListCellRenderer extends JCheckBox implements ListCellRenderer{\r
- private static final long serialVersionUID = 2120743754620361163L;\r
-\r
- public CheckableListCellRenderer(){\r
- setOpaque(true);\r
- }\r
-\r
- public Component getListCellRendererComponent(JList list, Object v, int index, boolean isSelected, boolean cellHasFocus){\r
- String value = (String)v;\r
- setText(value);\r
- setSelected(enableMap.get(value));\r
-\r
- if(isSelected){\r
- setBackground(list.getSelectionBackground());\r
- setForeground(list.getSelectionForeground());\r
- }\r
- else{\r
- setBackground(list.getBackground());\r
- setForeground(list.getForeground());\r
- }\r
- Border border = null;\r
- if(cellHasFocus){\r
- if(isSelected){\r
- border = UIManager.getBorder("List.focusSelectedCellHighlightBorder");\r
- }\r
- if(border == null){\r
- border = UIManager.getBorder("List.focusCellHighlightBorder");\r
- }\r
- }\r
- else{\r
- border = noFocusBorder;\r
- }\r
- setBorder(border); \r
-\r
- return this;\r
- }\r
- \r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JCheckBox;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.ListCellRenderer;
+import javax.swing.ListSelectionModel;
+import javax.swing.UIManager;
+import javax.swing.border.Border;
+import javax.swing.border.EmptyBorder;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import jp.sourceforge.stigmata.ComparisonPairFilter;
+import jp.sourceforge.stigmata.ComparisonPairFilterSet;
+import jp.sourceforge.stigmata.filter.ComparisonPairFilterManager;
+import jp.sourceforge.stigmata.ui.swing.filter.ComparisonPairFilterRetainable;
+import jp.sourceforge.stigmata.ui.swing.filter.FilterSetDefinitionPane;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class FilterSelectionPane extends JPanel implements ComparisonPairFilterRetainable{
+ private static final long serialVersionUID = 1825547576389498336L;
+ private static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
+
+ private StigmataFrame stigmata;
+ private ComparisonPairFilterManager manager;
+ private FilterSetDefinitionPane filterDef;
+ private Map<String, Boolean> enableMap = new HashMap<String, Boolean>();
+ private Map<String, ComparisonPairFilterSet> filters = new HashMap<String, ComparisonPairFilterSet>();
+ private DefaultListModel model;
+ private JList list;
+
+ public FilterSelectionPane(StigmataFrame stigmata, ComparisonPairFilterManager manager){
+ this.stigmata = stigmata;
+ this.manager = manager;
+
+ initLayout();
+ }
+
+ public void addFilterSet(ComparisonPairFilterSet filter){
+ filters.put(filter.getName(), filter);
+ enableMap.put(filter.getName(), false);
+ model.addElement(filter.getName());
+ }
+
+ public void filterSelected(ComparisonPairFilter filter){
+ }
+
+ public ComparisonPairFilterSet getFilterSet(String name){
+ return filters.get(name);
+ }
+
+ public void removeFilterSet(String name){
+ filters.remove(name);
+ enableMap.remove(name);
+ model.removeElement(name);
+ }
+
+ public void updateFilterSet(String name, ComparisonPairFilterSet filter){
+ int index = model.indexOf(name);
+ model.set(index, filter.getName());
+ filters.put(filter.getName(), filter);
+ enableMap.put(filter.getName(), enableMap.get(name));
+
+ if(!name.equals(filter.getName())){
+ enableMap.remove(name);
+ filters.remove(name);
+ }
+ }
+
+ public String[] getSelectedFilters(){
+ List<String> list = new ArrayList<String>();
+ for(String key: enableMap.keySet()){
+ if(enableMap.get(key)){
+ list.add(key);
+ }
+ }
+ return list.toArray(new String[list.size()]);
+ }
+
+ private void initLayout(){
+ setLayout(new BorderLayout());
+ model = new DefaultListModel();
+ list = new JList(model);
+ list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+ list.setCellRenderer(new CheckableListCellRenderer());
+
+ JScrollPane scroll = new JScrollPane(list);
+ filterDef = new FilterSetDefinitionPane(stigmata, this, false);
+
+ add(scroll, BorderLayout.WEST);
+ add(filterDef, BorderLayout.CENTER);
+
+ list.addListSelectionListener(new ListSelectionListener(){
+ public void valueChanged(ListSelectionEvent e){
+ String name = (String)list.getSelectedValue();
+ filterDef.setFilterSet(filters.get(name));
+
+ updateUI();
+ }
+ });
+ list.addMouseListener(new MouseAdapter(){
+ @Override
+ public void mouseClicked(MouseEvent e){
+ int index = list.locationToIndex(e.getPoint());
+ String value = (String)model.getElementAt(index);
+ enableMap.put(value, !enableMap.get(value));
+ updateUI();
+ }
+ });
+
+ for(ComparisonPairFilterSet filterset: manager.getFilterSets()){
+ enableMap.put(filterset.getName(), false);
+ filters.put(filterset.getName(), filterset);
+ model.addElement(filterset.getName());
+ }
+ }
+
+ private class CheckableListCellRenderer extends JCheckBox implements ListCellRenderer{
+ private static final long serialVersionUID = 2120743754620361163L;
+
+ public CheckableListCellRenderer(){
+ setOpaque(true);
+ }
+
+ public Component getListCellRendererComponent(JList list, Object v, int index, boolean isSelected, boolean cellHasFocus){
+ String value = (String)v;
+ setText(value);
+ setSelected(enableMap.get(value));
+
+ if(isSelected){
+ setBackground(list.getSelectionBackground());
+ setForeground(list.getSelectionForeground());
+ }
+ else{
+ setBackground(list.getBackground());
+ setForeground(list.getForeground());
+ }
+ Border border = null;
+ if(cellHasFocus){
+ if(isSelected){
+ border = UIManager.getBorder("List.focusSelectedCellHighlightBorder");
+ }
+ if(border == null){
+ border = UIManager.getBorder("List.focusCellHighlightBorder");
+ }
+ }
+ else{
+ border = noFocusBorder;
+ }
+ setBorder(border);
+
+ return this;
+ }
+
+ }
+}
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.Component;\r
-import java.awt.Image;\r
-import java.lang.reflect.InvocationTargetException;\r
-import java.lang.reflect.Method;\r
-import java.net.URL;\r
-import java.text.MessageFormat;\r
-\r
-import javax.swing.Action;\r
-import javax.swing.Icon;\r
-import javax.swing.ImageIcon;\r
-import javax.swing.JButton;\r
-import javax.swing.JCheckBoxMenuItem;\r
-import javax.swing.JComponent;\r
-import javax.swing.JMenu;\r
-import javax.swing.JMenuItem;\r
-import javax.swing.JTabbedPane;\r
-import javax.swing.border.TitledBorder;\r
-\r
-import jp.sourceforge.talisman.i18n.Messages;\r
-\r
-/**\r
- * Utility routines for building GUI.\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class GUIUtility{\r
- private GUIUtility(){\r
- }\r
-\r
- public static void decorateJComponent(Messages messages, JComponent component, String label){\r
- if(messages.hasValue(label + ".tooltip")){\r
- component.setToolTipText(messages.get(label + ".tooltip"));\r
- }\r
- if(messages.hasValue(label + ".border")){\r
- component.setBorder(new TitledBorder(messages.get(label + ".border")));\r
- }\r
- try{\r
- Icon icon = getIcon(messages, label + ".icon");\r
- if(icon != null){\r
- Method[] methods = component.getClass().getMethods();\r
- for(Method m: methods){\r
- if(m.getName().equals("setIcon")){\r
- m.invoke(component, icon);\r
- }\r
- }\r
- }\r
- } catch(IllegalAccessException e){\r
- throw new InternalError(e.getMessage());\r
- } catch(InvocationTargetException e){\r
- throw new InternalError(e.getMessage());\r
- }\r
- }\r
-\r
- public static JButton createButton(Messages messages, String label, Action action){\r
- JButton button = new JButton(action);\r
- button.setText(messages.get(label + ".button.label"));\r
- button.setActionCommand(label);\r
- if(messages.hasValue(label + ".button.tooltip")){\r
- button.setToolTipText(messages.get(label + ".button.tooltip"));\r
- }\r
- Icon icon = getIcon(messages, label + ".button.icon");\r
- if(icon != null){\r
- button.setIcon(icon);\r
- }\r
-\r
- return button;\r
- }\r
-\r
- public static JButton createButton(Messages messages, String label){\r
- JButton button = new JButton(messages.get(label + ".button.label"));\r
- button.setActionCommand(label);\r
- if(messages.hasValue(label + ".button.tooltip")){\r
- button.setToolTipText(messages.get(label + ".button.tooltip"));\r
- }\r
- Icon icon = getIcon(messages, label + ".button.icon");\r
- if(icon != null){\r
- button.setIcon(icon);\r
- }\r
-\r
- return button;\r
- }\r
-\r
- public static JCheckBoxMenuItem createJCheckBoxMenuItem(Messages messages, String label){\r
- return createJCheckBoxMenuItem(messages, label, false);\r
- }\r
-\r
- public static JCheckBoxMenuItem createJCheckBoxMenuItem(Messages messages, String label, boolean status){\r
- JCheckBoxMenuItem item = new JCheckBoxMenuItem(messages.get(label + ".menuitem.label"), status);\r
- item.setActionCommand(label);\r
- if(messages.hasValue(label + ".menuitem.tooltip")){\r
- item.setToolTipText(messages.get(label + ".menuitem.tooltip"));\r
- }\r
- Icon icon = getIcon(messages, label + ".menuitem.icon");\r
- if(icon != null){\r
- item.setIcon(icon);\r
- }\r
- return item;\r
- }\r
-\r
- public static JMenuItem createJMenuItem(Messages messages, String label, Action action){\r
- JMenuItem item = new JMenuItem(action);\r
- item.setText(messages.get(label + ".menuitem.label"));\r
- item.setActionCommand(label);\r
- if(messages.hasValue(label + ".menuitem.tooltip")){\r
- item.setToolTipText(messages.get(label + ".menuitem.tooltip"));\r
- }\r
- Icon icon = getIcon(messages, label + ".menuitem.icon");\r
- if(icon != null){\r
- item.setIcon(icon);\r
- }\r
- return item;\r
- }\r
-\r
- public static JMenuItem createJMenuItem(Messages messages, String label){\r
- JMenuItem item = new JMenuItem(messages.get(label + ".menuitem.label"));\r
- item.setActionCommand(label);\r
- if(messages.hasValue(label + ".menuitem.tooltip")){\r
- item.setToolTipText(messages.get(label + ".menuitem.tooltip"));\r
- }\r
- Icon icon = getIcon(messages, label + ".menuitem.icon");\r
- if(icon != null){\r
- item.setIcon(icon);\r
- }\r
- return item;\r
- }\r
-\r
- public static JMenu createJMenu(Messages messages, String label){\r
- JMenu menu = new JMenu(messages.get(label + ".menu.label"));\r
- menu.setActionCommand(label);\r
- if(messages.hasValue(label + ".menu.tooltip")){\r
- menu.setToolTipText(messages.get(label + ".menu.tooltip"));\r
- }\r
- Icon icon = getIcon(messages, label + ".menu.icon");\r
- if(icon != null){\r
- menu.setIcon(icon);\r
- }\r
- return menu;\r
- }\r
-\r
- public static URL getResource(Messages messages, String resourcePathLabel, String resourcePathPrefix){\r
- if(messages.hasValue(resourcePathLabel)){\r
- String resourcePath = messages.get(resourcePathLabel);\r
- if(resourcePathPrefix != null){\r
- resourcePath = resourcePathPrefix + resourcePath;\r
- }\r
- return GUIUtility.class.getResource(resourcePath);\r
- }\r
- return null;\r
- }\r
-\r
- public static URL getResource(Messages messages, String resourcePathLabel){\r
- return getResource(messages, resourcePathLabel, null);\r
- }\r
-\r
- public static Icon getIcon(Messages messages, String label){\r
- URL url = getResource(messages, label, messages.get("icon.path"));\r
- if(url != null){\r
- ImageIcon icon = new ImageIcon(url);\r
- return icon;\r
- }\r
-\r
- return null;\r
- }\r
-\r
- public static Image getImage(Messages messages, String imageFilePathLabel){\r
- Icon icon = getIcon(messages, imageFilePathLabel);\r
- if(icon != null && icon instanceof ImageIcon){\r
- return ((ImageIcon)icon).getImage();\r
- }\r
- return null;\r
- }\r
-\r
- public static void addNewTab(Messages messages, String key, JTabbedPane tabPane, Component comp){\r
- addNewTab(messages, key, tabPane, comp, null, null);\r
- }\r
-\r
- public static void addNewTab(Messages messages, String key, JTabbedPane tabPane, Component comp, Object[] tabnameValues, Object[] values){\r
- String tabName = messages.get(key + ".tab.label");\r
- String tooltip = messages.get(key + ".tab.tooltip");\r
- Icon icon = getIcon(messages, key + ".tab.icon");\r
-\r
- if(tabnameValues != null){\r
- tabName = MessageFormat.format(tabName, tabnameValues);\r
- }\r
-\r
- if(values != null){\r
- tooltip = MessageFormat.format(tooltip, values);\r
- }\r
- tabPane.addTab(tabName, icon, comp, tooltip);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.Component;
+import java.awt.Image;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.text.MessageFormat;
+
+import javax.swing.Action;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JComponent;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.JTabbedPane;
+import javax.swing.border.TitledBorder;
+
+import jp.sourceforge.talisman.i18n.Messages;
+
+/**
+ * Utility routines for building GUI.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class GUIUtility{
+ private GUIUtility(){
+ }
+
+ public static void decorateJComponent(Messages messages, JComponent component, String label){
+ if(messages.hasValue(label + ".tooltip")){
+ component.setToolTipText(messages.get(label + ".tooltip"));
+ }
+ if(messages.hasValue(label + ".border")){
+ component.setBorder(new TitledBorder(messages.get(label + ".border")));
+ }
+ try{
+ Icon icon = getIcon(messages, label + ".icon");
+ if(icon != null){
+ Method[] methods = component.getClass().getMethods();
+ for(Method m: methods){
+ if(m.getName().equals("setIcon")){
+ m.invoke(component, icon);
+ }
+ }
+ }
+ } catch(IllegalAccessException e){
+ throw new InternalError(e.getMessage());
+ } catch(InvocationTargetException e){
+ throw new InternalError(e.getMessage());
+ }
+ }
+
+ public static JButton createButton(Messages messages, String label, Action action){
+ JButton button = new JButton(action);
+ button.setText(messages.get(label + ".button.label"));
+ button.setActionCommand(label);
+ if(messages.hasValue(label + ".button.tooltip")){
+ button.setToolTipText(messages.get(label + ".button.tooltip"));
+ }
+ Icon icon = getIcon(messages, label + ".button.icon");
+ if(icon != null){
+ button.setIcon(icon);
+ }
+
+ return button;
+ }
+
+ public static JButton createButton(Messages messages, String label){
+ JButton button = new JButton(messages.get(label + ".button.label"));
+ button.setActionCommand(label);
+ if(messages.hasValue(label + ".button.tooltip")){
+ button.setToolTipText(messages.get(label + ".button.tooltip"));
+ }
+ Icon icon = getIcon(messages, label + ".button.icon");
+ if(icon != null){
+ button.setIcon(icon);
+ }
+
+ return button;
+ }
+
+ public static JCheckBoxMenuItem createJCheckBoxMenuItem(Messages messages, String label){
+ return createJCheckBoxMenuItem(messages, label, false);
+ }
+
+ public static JCheckBoxMenuItem createJCheckBoxMenuItem(Messages messages, String label, boolean status){
+ JCheckBoxMenuItem item = new JCheckBoxMenuItem(messages.get(label + ".menuitem.label"), status);
+ item.setActionCommand(label);
+ if(messages.hasValue(label + ".menuitem.tooltip")){
+ item.setToolTipText(messages.get(label + ".menuitem.tooltip"));
+ }
+ Icon icon = getIcon(messages, label + ".menuitem.icon");
+ if(icon != null){
+ item.setIcon(icon);
+ }
+ return item;
+ }
+
+ public static JMenuItem createJMenuItem(Messages messages, String label, Action action){
+ JMenuItem item = new JMenuItem(action);
+ item.setText(messages.get(label + ".menuitem.label"));
+ item.setActionCommand(label);
+ if(messages.hasValue(label + ".menuitem.tooltip")){
+ item.setToolTipText(messages.get(label + ".menuitem.tooltip"));
+ }
+ Icon icon = getIcon(messages, label + ".menuitem.icon");
+ if(icon != null){
+ item.setIcon(icon);
+ }
+ return item;
+ }
+
+ public static JMenuItem createJMenuItem(Messages messages, String label){
+ JMenuItem item = new JMenuItem(messages.get(label + ".menuitem.label"));
+ item.setActionCommand(label);
+ if(messages.hasValue(label + ".menuitem.tooltip")){
+ item.setToolTipText(messages.get(label + ".menuitem.tooltip"));
+ }
+ Icon icon = getIcon(messages, label + ".menuitem.icon");
+ if(icon != null){
+ item.setIcon(icon);
+ }
+ return item;
+ }
+
+ public static JMenu createJMenu(Messages messages, String label){
+ JMenu menu = new JMenu(messages.get(label + ".menu.label"));
+ menu.setActionCommand(label);
+ if(messages.hasValue(label + ".menu.tooltip")){
+ menu.setToolTipText(messages.get(label + ".menu.tooltip"));
+ }
+ Icon icon = getIcon(messages, label + ".menu.icon");
+ if(icon != null){
+ menu.setIcon(icon);
+ }
+ return menu;
+ }
+
+ public static URL getResource(Messages messages, String resourcePathLabel, String resourcePathPrefix){
+ if(messages.hasValue(resourcePathLabel)){
+ String resourcePath = messages.get(resourcePathLabel);
+ if(resourcePathPrefix != null){
+ resourcePath = resourcePathPrefix + resourcePath;
+ }
+ return GUIUtility.class.getResource(resourcePath);
+ }
+ return null;
+ }
+
+ public static URL getResource(Messages messages, String resourcePathLabel){
+ return getResource(messages, resourcePathLabel, null);
+ }
+
+ public static Icon getIcon(Messages messages, String label){
+ URL url = getResource(messages, label, messages.get("icon.path"));
+ if(url != null){
+ ImageIcon icon = new ImageIcon(url);
+ return icon;
+ }
+
+ return null;
+ }
+
+ public static Image getImage(Messages messages, String imageFilePathLabel){
+ Icon icon = getIcon(messages, imageFilePathLabel);
+ if(icon != null && icon instanceof ImageIcon){
+ return ((ImageIcon)icon).getImage();
+ }
+ return null;
+ }
+
+ public static void addNewTab(Messages messages, String key, JTabbedPane tabPane, Component comp){
+ addNewTab(messages, key, tabPane, comp, null, null);
+ }
+
+ public static void addNewTab(Messages messages, String key, JTabbedPane tabPane, Component comp, Object[] tabnameValues, Object[] values){
+ String tabName = messages.get(key + ".tab.label");
+ String tooltip = messages.get(key + ".tab.tooltip");
+ Icon icon = getIcon(messages, key + ".tab.icon");
+
+ if(tabnameValues != null){
+ tabName = MessageFormat.format(tabName, tabnameValues);
+ }
+
+ if(values != null){
+ tooltip = MessageFormat.format(tooltip, values);
+ }
+ tabPane.addTab(tabName, icon, comp, tooltip);
+ }
+}
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.Dimension;\r
-import java.awt.FlowLayout;\r
-import java.awt.GridLayout;\r
-import java.io.IOException;\r
-import java.io.PrintWriter;\r
-\r
-import javax.swing.BorderFactory;\r
-import javax.swing.BoxLayout;\r
-import javax.swing.JButton;\r
-import javax.swing.JComboBox;\r
-import javax.swing.JLabel;\r
-import javax.swing.JPanel;\r
-import javax.swing.JScrollPane;\r
-import javax.swing.JSplitPane;\r
-import javax.swing.JTree;\r
-import javax.swing.border.TitledBorder;\r
-\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.ComparisonPair;\r
-import jp.naist.se.stigmata.ComparisonPairElement;\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.SaveAction;\r
-import jp.naist.se.stigmata.utils.AsciiDataWritable;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class PairComparisonPane extends JPanel{\r
- private static final long serialVersionUID = 2342856785474356234L;\r
-\r
- private StigmataFrame frame;\r
- private ComparisonPair pair;\r
-\r
- public PairComparisonPane(StigmataFrame frame, ComparisonPair pair){\r
- this.frame = frame;\r
- this.pair = pair;\r
-\r
- initialize(frame);\r
- }\r
-\r
- private void initialize(StigmataFrame frame){\r
- this.setLayout(new java.awt.BorderLayout());\r
- this.add(getSouthPanel(frame), java.awt.BorderLayout.SOUTH);\r
- this.add(getMainPane(frame), java.awt.BorderLayout.CENTER);\r
- }\r
-\r
- private JPanel getSouthPanel(StigmataFrame stigmata){\r
- JPanel panel = new JPanel();\r
- panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));\r
- JPanel similarityPanel = new JPanel();\r
- similarityPanel.setLayout(new GridLayout(1, 3));\r
-\r
- JLabel label = new JLabel(Double.toString(pair.calculateSimilarity()));\r
- label.setBorder(BorderFactory.createTitledBorder(stigmata.getMessages().get("result.border")));\r
- JComboBox combo = new JComboBox();\r
- for(ComparisonPairElement elem : pair){\r
- combo.addItem(new ClippedLRListCellRenderer.LRItem(elem.getType(), elem.getSimilarity()));\r
- }\r
- combo.setRenderer(new ClippedLRListCellRenderer(new Dimension(100, combo.getPreferredSize().height), 50));\r
- combo.setBorder(BorderFactory.createTitledBorder(stigmata.getMessages().get("eachbirthmarksimilarity.border")));\r
- similarityPanel.add(label);\r
- similarityPanel.add(combo);\r
- similarityPanel.setBorder(new TitledBorder(stigmata.getMessages().get("similarity.border")));\r
-\r
- panel.add(similarityPanel);\r
-\r
- JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));\r
- JButton saveButton = GUIUtility.createButton(\r
- frame.getMessages(), "savecomparison", new SaveAction(frame, new AsciiDataWritable(){\r
- public void writeAsciiData(PrintWriter out, String format) throws IOException{\r
- ResultPrinterSpi service = PrinterManager.getInstance().getService(format);\r
- if(service == null){\r
- service = PrinterManager.getDefaultFormatService();\r
- }\r
-\r
- service.getComparisonPairPrinter().printResult(out, pair);\r
- }\r
- })\r
- );\r
-\r
- buttonPanel.add(saveButton);\r
- panel.add(buttonPanel);\r
-\r
- return panel;\r
- }\r
-\r
- private JSplitPane getMainPane(StigmataFrame frame){\r
- JSplitPane spliter = new javax.swing.JSplitPane();\r
- spliter.setLeftComponent(getSpliterPanel(frame, pair.getTarget1()));\r
- spliter.setRightComponent(getSpliterPanel(frame, pair.getTarget2()));\r
- spliter.setDividerLocation((spliter.getWidth() - spliter.getDividerSize()) / 2);\r
- spliter.setContinuousLayout(true);\r
-\r
- return spliter;\r
- }\r
-\r
- private JPanel getSpliterPanel(StigmataFrame stigmata, BirthmarkSet birthmark){\r
- JPanel panel = new JPanel();\r
- panel.setLayout(new BorderLayout());\r
- JTree tree = new JTree(new BirthmarkTreeNode(birthmark));\r
-\r
- panel.add(new JScrollPane(tree), BorderLayout.CENTER);\r
- JPanel south = new JPanel(new BorderLayout());\r
- panel.add(south, BorderLayout.SOUTH);\r
-\r
- JLabel elementCount = new JLabel(Integer.toString(birthmark.getSumOfElementCount()));\r
- elementCount.setBorder(new TitledBorder(stigmata.getMessages().get("elementcount.border")));\r
- south.add(elementCount, BorderLayout.CENTER);\r
-\r
- return panel;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.JTree;
+import javax.swing.border.TitledBorder;
+
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.ComparisonPair;
+import jp.sourceforge.stigmata.ComparisonPairElement;
+import jp.sourceforge.stigmata.printer.PrinterManager;
+import jp.sourceforge.stigmata.spi.ResultPrinterSpi;
+import jp.sourceforge.stigmata.ui.swing.actions.SaveAction;
+import jp.sourceforge.stigmata.utils.AsciiDataWritable;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class PairComparisonPane extends JPanel{
+ private static final long serialVersionUID = 2342856785474356234L;
+
+ private StigmataFrame frame;
+ private ComparisonPair pair;
+
+ public PairComparisonPane(StigmataFrame frame, ComparisonPair pair){
+ this.frame = frame;
+ this.pair = pair;
+
+ initialize(frame);
+ }
+
+ private void initialize(StigmataFrame frame){
+ this.setLayout(new java.awt.BorderLayout());
+ this.add(getSouthPanel(frame), java.awt.BorderLayout.SOUTH);
+ this.add(getMainPane(frame), java.awt.BorderLayout.CENTER);
+ }
+
+ private JPanel getSouthPanel(StigmataFrame stigmata){
+ JPanel panel = new JPanel();
+ panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
+ JPanel similarityPanel = new JPanel();
+ similarityPanel.setLayout(new GridLayout(1, 3));
+
+ JLabel label = new JLabel(Double.toString(pair.calculateSimilarity()));
+ label.setBorder(BorderFactory.createTitledBorder(stigmata.getMessages().get("result.border")));
+ JComboBox combo = new JComboBox();
+ for(ComparisonPairElement elem : pair){
+ combo.addItem(new ClippedLRListCellRenderer.LRItem(elem.getType(), elem.getSimilarity()));
+ }
+ combo.setRenderer(new ClippedLRListCellRenderer(new Dimension(100, combo.getPreferredSize().height), 50));
+ combo.setBorder(BorderFactory.createTitledBorder(stigmata.getMessages().get("eachbirthmarksimilarity.border")));
+ similarityPanel.add(label);
+ similarityPanel.add(combo);
+ similarityPanel.setBorder(new TitledBorder(stigmata.getMessages().get("similarity.border")));
+
+ panel.add(similarityPanel);
+
+ JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
+ JButton saveButton = GUIUtility.createButton(
+ frame.getMessages(), "savecomparison", new SaveAction(frame, new AsciiDataWritable(){
+ public void writeAsciiData(PrintWriter out, String format) throws IOException{
+ ResultPrinterSpi service = PrinterManager.getInstance().getService(format);
+ if(service == null){
+ service = PrinterManager.getDefaultFormatService();
+ }
+
+ service.getComparisonPairPrinter().printResult(out, pair);
+ }
+ })
+ );
+
+ buttonPanel.add(saveButton);
+ panel.add(buttonPanel);
+
+ return panel;
+ }
+
+ private JSplitPane getMainPane(StigmataFrame frame){
+ JSplitPane spliter = new javax.swing.JSplitPane();
+ spliter.setLeftComponent(getSpliterPanel(frame, pair.getTarget1()));
+ spliter.setRightComponent(getSpliterPanel(frame, pair.getTarget2()));
+ spliter.setDividerLocation((spliter.getWidth() - spliter.getDividerSize()) / 2);
+ spliter.setContinuousLayout(true);
+
+ return spliter;
+ }
+
+ private JPanel getSpliterPanel(StigmataFrame stigmata, BirthmarkSet birthmark){
+ JPanel panel = new JPanel();
+ panel.setLayout(new BorderLayout());
+ JTree tree = new JTree(new BirthmarkTreeNode(birthmark));
+
+ panel.add(new JScrollPane(tree), BorderLayout.CENTER);
+ JPanel south = new JPanel(new BorderLayout());
+ panel.add(south, BorderLayout.SOUTH);
+
+ JLabel elementCount = new JLabel(Integer.toString(birthmark.getSumOfElementCount()));
+ elementCount.setBorder(new TitledBorder(stigmata.getMessages().get("elementcount.border")));
+ south.add(elementCount, BorderLayout.CENTER);
+
+ return panel;
+ }
+}
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.GridLayout;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.awt.event.MouseAdapter;\r
-import java.awt.event.MouseEvent;\r
-import java.io.File;\r
-import java.io.IOException;\r
-import java.io.PrintWriter;\r
-import java.util.ArrayList;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-\r
-import javax.swing.Box;\r
-import javax.swing.JButton;\r
-import javax.swing.JComponent;\r
-import javax.swing.JLabel;\r
-import javax.swing.JOptionPane;\r
-import javax.swing.JPanel;\r
-import javax.swing.JScrollPane;\r
-import javax.swing.JTable;\r
-import javax.swing.border.TitledBorder;\r
-import javax.swing.table.DefaultTableModel;\r
-\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.ComparisonPair;\r
-import jp.naist.se.stigmata.ComparisonResultSet;\r
-import jp.naist.se.stigmata.printer.PrinterManager;\r
-import jp.naist.se.stigmata.result.CertainPairComparisonResultSet;\r
-import jp.naist.se.stigmata.spi.ResultPrinterSpi;\r
-import jp.naist.se.stigmata.ui.swing.actions.SaveAction;\r
-import jp.naist.se.stigmata.ui.swing.actions.UpdateBirthmarkCellColorAction;\r
-import jp.naist.se.stigmata.utils.AsciiDataWritable;\r
-\r
-/**\r
- * \r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class PairComparisonResultSetPane extends JPanel{\r
- private static final long serialVersionUID = 3298346465652354302L;\r
-\r
- private StigmataFrame frame;\r
- private ComparisonResultSet comparison;\r
- private DefaultTableModel model = new PairComparisonResultSetTableModel();\r
- private JTable table = new JTable(model);\r
- private JLabel averageLabel, maximumLabel, minimumLabel;\r
- private double average, maximum, minimum;\r
-\r
- public PairComparisonResultSetPane(StigmataFrame frame, ComparisonResultSet resultset){\r
- this.frame = frame;\r
- this.comparison = resultset;\r
-\r
- initComponent();\r
- initData(model, resultset);\r
- }\r
-\r
- private void obfuscateClassNames(){\r
- ClassNameObfuscator obfuscator = new ClassNameObfuscator();\r
- List<ComparisonPair> newList = new ArrayList<ComparisonPair>();\r
- BirthmarkContext context = comparison.getContext();\r
-\r
- for(Iterator<ComparisonPair> i = comparison.iterator(); i.hasNext(); ){\r
- ComparisonPair pair = i.next();\r
- BirthmarkSet set1 = obfuscator.obfuscateClassName(pair.getTarget1());\r
- BirthmarkSet set2 = obfuscator.obfuscateClassName(pair.getTarget2());\r
-\r
- context = comparison.getContext();\r
- newList.add(new ComparisonPair(set1, set2, context));\r
- }\r
-\r
- try{\r
- File file = frame.getSaveFile(frame.getMessages().getArray("obfuscationmapping.extension"),\r
- frame.getMessages().get("obfuscationmapping.description"));\r
- if(file == null){\r
- return;\r
- }\r
- obfuscator.outputNameMappings(file);\r
- }catch(IOException e){\r
- JOptionPane.showMessageDialog(\r
- this, e.getMessage(), frame.getMessages().get("error.dialog.title"),\r
- JOptionPane.ERROR_MESSAGE\r
- );\r
- return;\r
- }\r
-\r
- DefaultTableModel newModel = new PairComparisonResultSetTableModel();\r
- initData(newModel, new CertainPairComparisonResultSet(newList.toArray(new ComparisonPair[newList.size()]), context));\r
- model = newModel;\r
- table.setModel(newModel);\r
- }\r
-\r
- private void initData(DefaultTableModel model, ComparisonResultSet comparison){\r
- maximum = 0d;\r
- minimum = 1d;\r
- average = 0d;\r
- model.setColumnIdentifiers(frame.getMessages().getArray("comparepair.table.columns"));\r
-\r
- for(Iterator<ComparisonPair> i = comparison.iterator(); i.hasNext(); ){\r
- ComparisonPair pair = i.next();\r
- double similarity = pair.calculateSimilarity();\r
- if(similarity > maximum) maximum = similarity;\r
- if(similarity < minimum) minimum = similarity;\r
- average += similarity;\r
-\r
- model.addRow(new Object[] { pair.getTarget1().getName(),\r
- pair.getTarget2().getName(), new Double(similarity) });\r
- }\r
- average = average / comparison.getPairCount();\r
- \r
- averageLabel.setText(Double.toString(average));\r
- maximumLabel.setText(Double.toString(maximum));\r
- minimumLabel.setText(Double.toString(minimum));\r
- }\r
-\r
- private void initComponent(){\r
- JComponent buttonPanel = Box.createHorizontalBox();\r
- JPanel similarityPane = new JPanel(new GridLayout(1, 3));\r
- JComponent southPanel = Box.createVerticalBox();\r
- JButton saveButton = GUIUtility.createButton(\r
- frame.getMessages(), "savecomparison", new SaveAction(frame, new AsciiDataWritable(){\r
- public void writeAsciiData(PrintWriter out, String format) throws IOException{\r
- ResultPrinterSpi service = PrinterManager.getInstance().getService(format);\r
- if(service == null){\r
- service = PrinterManager.getDefaultFormatService();\r
- }\r
- service.getComparisonResultSetPrinter().printResult(out, comparison);\r
- }\r
- })\r
- );\r
- JButton updateColorButton = GUIUtility.createButton(\r
- frame.getMessages(), "updatecellcolor", new UpdateBirthmarkCellColorAction(frame, comparison.getEnvironment())\r
- );\r
- JButton obfuscateButton = GUIUtility.createButton(frame.getMessages(), "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
- minimumLabel = new JLabel(Double.toString(minimum), JLabel.RIGHT);\r
-\r
- scroll.setViewportView(table);\r
- table.setDefaultRenderer(Double.class, new CompareTableCellRenderer(comparison.getEnvironment()));\r
- similarityPane.setBorder(new TitledBorder(frame.getMessages().get("similarity.border")));\r
- averageLabel.setBorder(new TitledBorder(frame.getMessages().get("average.border")));\r
- maximumLabel.setBorder(new TitledBorder(frame.getMessages().get("maximum.border")));\r
- minimumLabel.setBorder(new TitledBorder(frame.getMessages().get("minimum.border")));\r
-\r
- setLayout(new BorderLayout());\r
- add(scroll, BorderLayout.CENTER);\r
- add(southPanel, BorderLayout.SOUTH);\r
- similarityPane.add(averageLabel);\r
- similarityPane.add(maximumLabel);\r
- similarityPane.add(minimumLabel);\r
- southPanel.add(similarityPane);\r
- southPanel.add(buttonPanel);\r
- buttonPanel.add(Box.createHorizontalGlue());\r
- buttonPanel.add(saveButton);\r
- buttonPanel.add(Box.createHorizontalGlue());\r
- buttonPanel.add(updateColorButton);\r
- buttonPanel.add(Box.createHorizontalGlue());\r
- buttonPanel.add(obfuscateButton);\r
- buttonPanel.add(Box.createHorizontalGlue());\r
-\r
- table.addMouseListener(new MouseAdapter(){\r
- public void mouseClicked(MouseEvent e){\r
- if(e.getClickCount() == 2){\r
- int row = table.rowAtPoint(e.getPoint());\r
- int col = table.columnAtPoint(e.getPoint());\r
- if(col >= 1 && col < table.getColumnCount() && row >= 0\r
- && row < table.getRowCount()){\r
- ComparisonPair pair = comparison.getPairAt(row);\r
-\r
- frame.compareDetails(pair.getTarget1(), pair.getTarget2(), comparison.getContext());\r
- }\r
- }\r
- }\r
- });\r
-\r
- obfuscateButton.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- obfuscateClassNames();\r
- }\r
- });\r
- }\r
-\r
- private static class PairComparisonResultSetTableModel extends DefaultTableModel{\r
- private static final long serialVersionUID = 93457234571623497L;\r
-\r
- @Override\r
- public boolean isCellEditable(int row, int column){\r
- return false;\r
- }\r
-\r
- @Override\r
- public Class<?> getColumnClass(int column){\r
- if(column == 2){\r
- return Double.class;\r
- }\r
- else{\r
- return String.class;\r
- }\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.border.TitledBorder;
+import javax.swing.table.DefaultTableModel;
+
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.ComparisonPair;
+import jp.sourceforge.stigmata.ComparisonResultSet;
+import jp.sourceforge.stigmata.printer.PrinterManager;
+import jp.sourceforge.stigmata.result.CertainPairComparisonResultSet;
+import jp.sourceforge.stigmata.spi.ResultPrinterSpi;
+import jp.sourceforge.stigmata.ui.swing.actions.SaveAction;
+import jp.sourceforge.stigmata.ui.swing.actions.UpdateBirthmarkCellColorAction;
+import jp.sourceforge.stigmata.utils.AsciiDataWritable;
+
+/**
+ *
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class PairComparisonResultSetPane extends JPanel{
+ private static final long serialVersionUID = 3298346465652354302L;
+
+ private StigmataFrame frame;
+ private ComparisonResultSet comparison;
+ private DefaultTableModel model = new PairComparisonResultSetTableModel();
+ private JTable table = new JTable(model);
+ private JLabel averageLabel, maximumLabel, minimumLabel;
+ private double average, maximum, minimum;
+
+ public PairComparisonResultSetPane(StigmataFrame frame, ComparisonResultSet resultset){
+ this.frame = frame;
+ this.comparison = resultset;
+
+ initComponent();
+ initData(model, resultset);
+ }
+
+ private void obfuscateClassNames(){
+ ClassNameObfuscator obfuscator = new ClassNameObfuscator();
+ List<ComparisonPair> newList = new ArrayList<ComparisonPair>();
+ BirthmarkContext context = comparison.getContext();
+
+ for(Iterator<ComparisonPair> i = comparison.iterator(); i.hasNext(); ){
+ ComparisonPair pair = i.next();
+ BirthmarkSet set1 = obfuscator.obfuscateClassName(pair.getTarget1());
+ BirthmarkSet set2 = obfuscator.obfuscateClassName(pair.getTarget2());
+
+ context = comparison.getContext();
+ newList.add(new ComparisonPair(set1, set2, context));
+ }
+
+ try{
+ File file = frame.getSaveFile(frame.getMessages().getArray("obfuscationmapping.extension"),
+ frame.getMessages().get("obfuscationmapping.description"));
+ if(file == null){
+ return;
+ }
+ obfuscator.outputNameMappings(file);
+ }catch(IOException e){
+ JOptionPane.showMessageDialog(
+ this, e.getMessage(), frame.getMessages().get("error.dialog.title"),
+ JOptionPane.ERROR_MESSAGE
+ );
+ return;
+ }
+
+ DefaultTableModel newModel = new PairComparisonResultSetTableModel();
+ initData(newModel, new CertainPairComparisonResultSet(newList.toArray(new ComparisonPair[newList.size()]), context));
+ model = newModel;
+ table.setModel(newModel);
+ }
+
+ private void initData(DefaultTableModel model, ComparisonResultSet comparison){
+ maximum = 0d;
+ minimum = 1d;
+ average = 0d;
+ model.setColumnIdentifiers(frame.getMessages().getArray("comparepair.table.columns"));
+
+ for(Iterator<ComparisonPair> i = comparison.iterator(); i.hasNext(); ){
+ ComparisonPair pair = i.next();
+ double similarity = pair.calculateSimilarity();
+ if(similarity > maximum) maximum = similarity;
+ if(similarity < minimum) minimum = similarity;
+ average += similarity;
+
+ model.addRow(new Object[] { pair.getTarget1().getName(),
+ pair.getTarget2().getName(), new Double(similarity) });
+ }
+ average = average / comparison.getPairCount();
+
+ averageLabel.setText(Double.toString(average));
+ maximumLabel.setText(Double.toString(maximum));
+ minimumLabel.setText(Double.toString(minimum));
+ }
+
+ private void initComponent(){
+ JComponent buttonPanel = Box.createHorizontalBox();
+ JPanel similarityPane = new JPanel(new GridLayout(1, 3));
+ JComponent southPanel = Box.createVerticalBox();
+ JButton saveButton = GUIUtility.createButton(
+ frame.getMessages(), "savecomparison", new SaveAction(frame, new AsciiDataWritable(){
+ public void writeAsciiData(PrintWriter out, String format) throws IOException{
+ ResultPrinterSpi service = PrinterManager.getInstance().getService(format);
+ if(service == null){
+ service = PrinterManager.getDefaultFormatService();
+ }
+ service.getComparisonResultSetPrinter().printResult(out, comparison);
+ }
+ })
+ );
+ JButton updateColorButton = GUIUtility.createButton(
+ frame.getMessages(), "updatecellcolor", new UpdateBirthmarkCellColorAction(frame, comparison.getEnvironment())
+ );
+ JButton obfuscateButton = GUIUtility.createButton(frame.getMessages(), "obfuscate");
+ JScrollPane scroll = new JScrollPane();
+ averageLabel = new JLabel(Double.toString(average), JLabel.RIGHT);
+ maximumLabel = new JLabel(Double.toString(maximum), JLabel.RIGHT);
+ minimumLabel = new JLabel(Double.toString(minimum), JLabel.RIGHT);
+
+ scroll.setViewportView(table);
+ table.setDefaultRenderer(Double.class, new CompareTableCellRenderer(comparison.getEnvironment()));
+ similarityPane.setBorder(new TitledBorder(frame.getMessages().get("similarity.border")));
+ averageLabel.setBorder(new TitledBorder(frame.getMessages().get("average.border")));
+ maximumLabel.setBorder(new TitledBorder(frame.getMessages().get("maximum.border")));
+ minimumLabel.setBorder(new TitledBorder(frame.getMessages().get("minimum.border")));
+
+ setLayout(new BorderLayout());
+ add(scroll, BorderLayout.CENTER);
+ add(southPanel, BorderLayout.SOUTH);
+ similarityPane.add(averageLabel);
+ similarityPane.add(maximumLabel);
+ similarityPane.add(minimumLabel);
+ southPanel.add(similarityPane);
+ southPanel.add(buttonPanel);
+ buttonPanel.add(Box.createHorizontalGlue());
+ buttonPanel.add(saveButton);
+ buttonPanel.add(Box.createHorizontalGlue());
+ buttonPanel.add(updateColorButton);
+ buttonPanel.add(Box.createHorizontalGlue());
+ buttonPanel.add(obfuscateButton);
+ buttonPanel.add(Box.createHorizontalGlue());
+
+ table.addMouseListener(new MouseAdapter(){
+ public void mouseClicked(MouseEvent e){
+ if(e.getClickCount() == 2){
+ int row = table.rowAtPoint(e.getPoint());
+ int col = table.columnAtPoint(e.getPoint());
+ if(col >= 1 && col < table.getColumnCount() && row >= 0
+ && row < table.getRowCount()){
+ ComparisonPair pair = comparison.getPairAt(row);
+
+ frame.compareDetails(pair.getTarget1(), pair.getTarget2(), comparison.getContext());
+ }
+ }
+ }
+ });
+
+ obfuscateButton.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ obfuscateClassNames();
+ }
+ });
+ }
+
+ private static class PairComparisonResultSetTableModel extends DefaultTableModel{
+ private static final long serialVersionUID = 93457234571623497L;
+
+ @Override
+ public boolean isCellEditable(int row, int column){
+ return false;
+ }
+
+ @Override
+ public Class<?> getColumnClass(int column){
+ if(column == 2){
+ return Double.class;
+ }
+ else{
+ return String.class;
+ }
+ }
+ }
+}
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.Dimension;\r
-import java.awt.Point;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-\r
-import javax.swing.Icon;\r
-import javax.swing.JButton;\r
-import javax.swing.JMenuItem;\r
-import javax.swing.JPanel;\r
-import javax.swing.JPopupMenu;\r
-import javax.swing.plaf.metal.MetalComboBoxIcon;\r
-\r
-/**\r
- * Popup button.\r
- * \r
- * @author tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class PopupButton extends JPanel{\r
- private static final long serialVersionUID = -4428839967597028837L;\r
-\r
- private JButton button;\r
- private JPopupMenu popup;\r
- private JButton arrowButton;\r
- private Icon icon;\r
-\r
- public PopupButton(JButton initButton){\r
- setLayout(new BorderLayout());\r
-\r
- button = initButton;\r
- icon = new MetalComboBoxIcon();\r
- arrowButton = new JButton(icon);\r
- popup = new JPopupMenu();\r
- add(button, BorderLayout.CENTER);\r
- add(arrowButton, BorderLayout.EAST);\r
-\r
- arrowButton.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- Point p = button.getLocation();\r
- popup.show(PopupButton.this, p.x, button.getHeight());\r
- }\r
- });\r
- updateUI();\r
- }\r
-\r
- @Override\r
- public void setEnabled(boolean enabled){\r
- super.setEnabled(enabled);\r
- button.setEnabled(enabled);\r
- arrowButton.setEnabled(enabled);\r
- }\r
-\r
- public JButton getButton(){\r
- return button;\r
- }\r
-\r
- public JMenuItem addMenuItem(JMenuItem menuItem){\r
- return popup.add(menuItem);\r
- }\r
-\r
- public void updateUI(){\r
- super.updateUI();\r
- if(button != null){\r
- Dimension prefferedSize = button.getPreferredSize();\r
-\r
- arrowButton.setPreferredSize(new Dimension(icon.getIconWidth() + 4, prefferedSize.height));\r
- setPreferredSize(new Dimension(prefferedSize.width + icon.getIconWidth() + 4, prefferedSize.height));\r
-\r
- Dimension maxSize = button.getMaximumSize();\r
- arrowButton.setMaximumSize(new Dimension(icon.getIconWidth() + 4, maxSize.height));\r
- setMaximumSize(new Dimension(maxSize.width + icon.getIconWidth() + 4, maxSize.height));\r
-\r
- Dimension minSize = button.getMinimumSize();\r
- arrowButton.setMaximumSize(new Dimension(icon.getIconWidth() + 4, minSize.height));\r
- setMinimumSize(new Dimension(minSize.width + icon.getIconWidth() + 4, minSize.height));\r
-\r
- arrowButton.setSize(arrowButton.getPreferredSize());\r
- setSize(getPreferredSize());\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Point;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JMenuItem;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.plaf.metal.MetalComboBoxIcon;
+
+/**
+ * Popup button.
+ *
+ * @author tamada
+ * @version $Revision$ $Date$
+ */
+public class PopupButton extends JPanel{
+ private static final long serialVersionUID = -4428839967597028837L;
+
+ private JButton button;
+ private JPopupMenu popup;
+ private JButton arrowButton;
+ private Icon icon;
+
+ public PopupButton(JButton initButton){
+ setLayout(new BorderLayout());
+
+ button = initButton;
+ icon = new MetalComboBoxIcon();
+ arrowButton = new JButton(icon);
+ popup = new JPopupMenu();
+ add(button, BorderLayout.CENTER);
+ add(arrowButton, BorderLayout.EAST);
+
+ arrowButton.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ Point p = button.getLocation();
+ popup.show(PopupButton.this, p.x, button.getHeight());
+ }
+ });
+ updateUI();
+ }
+
+ @Override
+ public void setEnabled(boolean enabled){
+ super.setEnabled(enabled);
+ button.setEnabled(enabled);
+ arrowButton.setEnabled(enabled);
+ }
+
+ public JButton getButton(){
+ return button;
+ }
+
+ public JMenuItem addMenuItem(JMenuItem menuItem){
+ return popup.add(menuItem);
+ }
+
+ public void updateUI(){
+ super.updateUI();
+ if(button != null){
+ Dimension prefferedSize = button.getPreferredSize();
+
+ arrowButton.setPreferredSize(new Dimension(icon.getIconWidth() + 4, prefferedSize.height));
+ setPreferredSize(new Dimension(prefferedSize.width + icon.getIconWidth() + 4, prefferedSize.height));
+
+ Dimension maxSize = button.getMaximumSize();
+ arrowButton.setMaximumSize(new Dimension(icon.getIconWidth() + 4, maxSize.height));
+ setMaximumSize(new Dimension(maxSize.width + icon.getIconWidth() + 4, maxSize.height));
+
+ Dimension minSize = button.getMinimumSize();
+ arrowButton.setMaximumSize(new Dimension(icon.getIconWidth() + 4, minSize.height));
+ setMinimumSize(new Dimension(minSize.width + icon.getIconWidth() + 4, minSize.height));
+
+ arrowButton.setSize(arrowButton.getPreferredSize());
+ setSize(getPreferredSize());
+ }
+ }
+}
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.GridBagConstraints;\r
-import java.awt.GridBagLayout;\r
-import java.awt.Insets;\r
-import java.awt.event.ActionEvent;\r
-import java.beans.PropertyChangeEvent;\r
-import java.beans.PropertyChangeListener;\r
-import java.util.Iterator;\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.JLabel;\r
-import javax.swing.JOptionPane;\r
-import javax.swing.JPanel;\r
-import javax.swing.JPopupMenu;\r
-import javax.swing.JScrollPane;\r
-import javax.swing.JTable;\r
-import javax.swing.JTextField;\r
-import javax.swing.ListSelectionModel;\r
-import javax.swing.event.ListSelectionEvent;\r
-import javax.swing.event.ListSelectionListener;\r
-import javax.swing.table.DefaultTableModel;\r
-\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.ui.swing.actions.PopupShowAction;\r
-import jp.sourceforge.talisman.i18n.Messages;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class PropertyEditPane extends JPanel{\r
- private static final long serialVersionUID = 12397342543653L;\r
-\r
- private StigmataFrame stigmata;\r
- private JTable table;\r
- private DefaultTableModel model;\r
-\r
- public PropertyEditPane(StigmataFrame stigmata){\r
- this.stigmata = stigmata;\r
-\r
- initLayouts();\r
- initData();\r
- }\r
-\r
- public void updateEnvironment(BirthmarkEnvironment environment){\r
- environment.clearProperties();\r
- for(int i = 0; i < model.getRowCount(); i++){\r
- environment.addProperty(\r
- (String)model.getValueAt(i, 0),\r
- (String)model.getValueAt(i, 1)\r
- );\r
- }\r
- }\r
-\r
- private void initData(){\r
- BirthmarkEnvironment environment = stigmata.getEnvironment();\r
- environment.addPropertyListener(new PropertyChangeListener(){\r
- public void propertyChange(PropertyChangeEvent evt){\r
- String name = evt.getPropertyName();\r
- String value = (String)evt.getNewValue();\r
- if(value == null){\r
- removeProperty(name);\r
- }\r
- else{\r
- addOrUpdateProperty(name, value);\r
- }\r
- }\r
- });\r
- for(Iterator<String> i = environment.propertyKeys(); i.hasNext(); ){\r
- String key = i.next();\r
- model.addRow(new Object[] { key, environment.getProperty(key), });\r
- }\r
- }\r
-\r
- private void removeProperty(String name){\r
- int index = findIndex(name);\r
- if(index >= 0){\r
- model.removeRow(index);\r
- }\r
- stigmata.setNeedToSaveSettings(true);\r
- }\r
-\r
- private void addOrUpdateProperty(String name, String value){\r
- int index = findIndex(name);\r
- if(index >= 0){\r
- model.setValueAt(value, index, 1);\r
- }\r
- else{\r
- model.addRow(new Object[] { name, value, });\r
- }\r
- stigmata.setNeedToSaveSettings(true);\r
- }\r
-\r
- private int findIndex(String name){\r
- for(int i = 0; i < model.getRowCount(); i++){\r
- String v = (String)model.getValueAt(i, 0);\r
- if(v.equals(name)){\r
- return i;\r
- }\r
- }\r
- return -1;\r
- }\r
-\r
- private void addNewProperty(int index){\r
- final Messages messages = stigmata.getMessages();\r
- GridBagLayout layout = new GridBagLayout();\r
- JPanel panel = new JPanel(layout);\r
- JLabel nameLabel = new JLabel(messages.get("propertyname.label"));\r
- JLabel valueLabel = new JLabel(messages.get("propertyvalue.label"));\r
- JTextField name = new JTextField(15);\r
- JTextField value = new JTextField(15);\r
-\r
- GridBagConstraints gbc = new GridBagConstraints();\r
- gbc.gridx = 0; gbc.gridwidth = 1;\r
- gbc.gridy = 0; gbc.gridheight = 1;\r
- gbc.insets = new Insets(5, 5, 5, 0);\r
- layout.setConstraints(nameLabel, gbc);\r
- panel.add(nameLabel);\r
-\r
- gbc.gridx = 1; gbc.gridwidth = 2;\r
- gbc.gridy = 0; gbc.gridheight = 1;\r
- gbc.fill = GridBagConstraints.HORIZONTAL;\r
- layout.setConstraints(name, gbc);\r
- panel.add(name);\r
-\r
- gbc.gridx = 0; gbc.gridwidth = 1;\r
- gbc.gridy = 1; gbc.gridheight = 1;\r
- layout.setConstraints(valueLabel, gbc);\r
- panel.add(valueLabel);\r
-\r
- gbc.gridx = 1; gbc.gridwidth = 2;\r
- gbc.gridy = 1; gbc.gridheight = 1;\r
- gbc.fill = GridBagConstraints.HORIZONTAL;\r
- layout.setConstraints(value, gbc);\r
- panel.add(value);\r
-\r
- if(index >= 0){\r
- String keyValue = String.valueOf(table.getValueAt(index, 0));\r
- String valueValue = String.valueOf(table.getValueAt(index, 1));\r
- if(keyValue != null) name.setText(keyValue);\r
- if(valueValue != null) value.setText(valueValue);\r
- }\r
-\r
- int val = JOptionPane.showConfirmDialog(\r
- stigmata, panel, messages.get("propertyadd.dialog.title"),\r
- JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE\r
- );\r
- if(val == JOptionPane.YES_OPTION){\r
- if(index >= 0){\r
- model.setValueAt(name.getText(), index, 0);\r
- model.setValueAt(value.getText(), index, 1);\r
- }\r
- else{\r
- model.addRow(new Object[] {\r
- name.getText().trim(),\r
- value.getText()\r
- });\r
- }\r
- stigmata.setNeedToSaveSettings(true);\r
- }\r
- }\r
-\r
- private void removeSelectedProperty(){\r
- int[] indexes = table.getSelectedRows();\r
- for(int i = indexes.length - 1; i >= 0; i--){\r
- model.removeRow(indexes[i]);\r
- }\r
- stigmata.setNeedToSaveSettings(true);\r
- }\r
-\r
- private void initLayouts(){\r
- final Messages messages = stigmata.getMessages();\r
- model = new DefaultTableModel();\r
- model.addColumn(messages.get("propertyname.label"));\r
- model.addColumn(messages.get("propertyvalue.label"));\r
- table = new JTable(model);\r
- table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);\r
- table.setColumnSelectionAllowed(false);\r
-\r
- Action addAction = new AbstractAction(){\r
- private static final long serialVersionUID = 1283676936119122278L;\r
-\r
- public void actionPerformed(ActionEvent e){\r
- addNewProperty(-1);\r
- }\r
- };\r
- final Action removeAction = new AbstractAction(){\r
- private static final long serialVersionUID = -411260949451039374L;\r
-\r
- public void actionPerformed(ActionEvent e){\r
- removeSelectedProperty();\r
- }\r
- };\r
- final Action changeAction = new AbstractAction(){\r
- private static final long serialVersionUID = -7406073660916286349L;\r
-\r
- public void actionPerformed(ActionEvent e){\r
- addNewProperty(table.getSelectedRow());\r
- }\r
- };\r
- JButton addButton = GUIUtility.createButton(messages, "propertyadd", addAction);\r
- JButton changeButton = GUIUtility.createButton(messages, "propertychange", changeAction);\r
- JButton removeButton = GUIUtility.createButton(messages, "propertyremove", removeAction);\r
-\r
- final JPopupMenu popup = new JPopupMenu();\r
- popup.add(GUIUtility.createJMenuItem(messages, "propertyadd", addAction));\r
- popup.add(GUIUtility.createJMenuItem(messages, "propertychange", changeAction));\r
- popup.add(GUIUtility.createJMenuItem(messages, "propertyremove", removeAction));\r
-\r
- setLayout(new BorderLayout());\r
- JScrollPane scroll = new JScrollPane(table);\r
- Box box = Box.createHorizontalBox();\r
- box.add(Box.createHorizontalGlue());\r
- box.add(addButton);\r
- box.add(Box.createHorizontalGlue());\r
- box.add(changeButton);\r
- box.add(Box.createHorizontalGlue());\r
- box.add(removeButton);\r
- box.add(Box.createHorizontalGlue());\r
-\r
- add(scroll, BorderLayout.CENTER);\r
- add(box, BorderLayout.SOUTH);\r
-\r
- table.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
- public void valueChanged(ListSelectionEvent arg0){\r
- removeAction.setEnabled(table.getSelectedRowCount() != 0);\r
- changeAction.setEnabled(table.getSelectedRowCount() == 1);\r
- }\r
- });\r
- table.addMouseListener(new PopupShowAction(popup));\r
- changeAction.setEnabled(false);\r
- removeAction.setEnabled(false);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.Iterator;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.table.DefaultTableModel;
+
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.ui.swing.actions.PopupShowAction;
+import jp.sourceforge.talisman.i18n.Messages;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class PropertyEditPane extends JPanel{
+ private static final long serialVersionUID = 12397342543653L;
+
+ private StigmataFrame stigmata;
+ private JTable table;
+ private DefaultTableModel model;
+
+ public PropertyEditPane(StigmataFrame stigmata){
+ this.stigmata = stigmata;
+
+ initLayouts();
+ initData();
+ }
+
+ public void updateEnvironment(BirthmarkEnvironment environment){
+ environment.clearProperties();
+ for(int i = 0; i < model.getRowCount(); i++){
+ environment.addProperty(
+ (String)model.getValueAt(i, 0),
+ (String)model.getValueAt(i, 1)
+ );
+ }
+ }
+
+ private void initData(){
+ BirthmarkEnvironment environment = stigmata.getEnvironment();
+ environment.addPropertyListener(new PropertyChangeListener(){
+ public void propertyChange(PropertyChangeEvent evt){
+ String name = evt.getPropertyName();
+ String value = (String)evt.getNewValue();
+ if(value == null){
+ removeProperty(name);
+ }
+ else{
+ addOrUpdateProperty(name, value);
+ }
+ }
+ });
+ for(Iterator<String> i = environment.propertyKeys(); i.hasNext(); ){
+ String key = i.next();
+ model.addRow(new Object[] { key, environment.getProperty(key), });
+ }
+ }
+
+ private void removeProperty(String name){
+ int index = findIndex(name);
+ if(index >= 0){
+ model.removeRow(index);
+ }
+ stigmata.setNeedToSaveSettings(true);
+ }
+
+ private void addOrUpdateProperty(String name, String value){
+ int index = findIndex(name);
+ if(index >= 0){
+ model.setValueAt(value, index, 1);
+ }
+ else{
+ model.addRow(new Object[] { name, value, });
+ }
+ stigmata.setNeedToSaveSettings(true);
+ }
+
+ private int findIndex(String name){
+ for(int i = 0; i < model.getRowCount(); i++){
+ String v = (String)model.getValueAt(i, 0);
+ if(v.equals(name)){
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ private void addNewProperty(int index){
+ final Messages messages = stigmata.getMessages();
+ GridBagLayout layout = new GridBagLayout();
+ JPanel panel = new JPanel(layout);
+ JLabel nameLabel = new JLabel(messages.get("propertyname.label"));
+ JLabel valueLabel = new JLabel(messages.get("propertyvalue.label"));
+ JTextField name = new JTextField(15);
+ JTextField value = new JTextField(15);
+
+ GridBagConstraints gbc = new GridBagConstraints();
+ gbc.gridx = 0; gbc.gridwidth = 1;
+ gbc.gridy = 0; gbc.gridheight = 1;
+ gbc.insets = new Insets(5, 5, 5, 0);
+ layout.setConstraints(nameLabel, gbc);
+ panel.add(nameLabel);
+
+ gbc.gridx = 1; gbc.gridwidth = 2;
+ gbc.gridy = 0; gbc.gridheight = 1;
+ gbc.fill = GridBagConstraints.HORIZONTAL;
+ layout.setConstraints(name, gbc);
+ panel.add(name);
+
+ gbc.gridx = 0; gbc.gridwidth = 1;
+ gbc.gridy = 1; gbc.gridheight = 1;
+ layout.setConstraints(valueLabel, gbc);
+ panel.add(valueLabel);
+
+ gbc.gridx = 1; gbc.gridwidth = 2;
+ gbc.gridy = 1; gbc.gridheight = 1;
+ gbc.fill = GridBagConstraints.HORIZONTAL;
+ layout.setConstraints(value, gbc);
+ panel.add(value);
+
+ if(index >= 0){
+ String keyValue = String.valueOf(table.getValueAt(index, 0));
+ String valueValue = String.valueOf(table.getValueAt(index, 1));
+ if(keyValue != null) name.setText(keyValue);
+ if(valueValue != null) value.setText(valueValue);
+ }
+
+ int val = JOptionPane.showConfirmDialog(
+ stigmata, panel, messages.get("propertyadd.dialog.title"),
+ JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE
+ );
+ if(val == JOptionPane.YES_OPTION){
+ if(index >= 0){
+ model.setValueAt(name.getText(), index, 0);
+ model.setValueAt(value.getText(), index, 1);
+ }
+ else{
+ model.addRow(new Object[] {
+ name.getText().trim(),
+ value.getText()
+ });
+ }
+ stigmata.setNeedToSaveSettings(true);
+ }
+ }
+
+ private void removeSelectedProperty(){
+ int[] indexes = table.getSelectedRows();
+ for(int i = indexes.length - 1; i >= 0; i--){
+ model.removeRow(indexes[i]);
+ }
+ stigmata.setNeedToSaveSettings(true);
+ }
+
+ private void initLayouts(){
+ final Messages messages = stigmata.getMessages();
+ model = new DefaultTableModel();
+ model.addColumn(messages.get("propertyname.label"));
+ model.addColumn(messages.get("propertyvalue.label"));
+ table = new JTable(model);
+ table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+ table.setColumnSelectionAllowed(false);
+
+ Action addAction = new AbstractAction(){
+ private static final long serialVersionUID = 1283676936119122278L;
+
+ public void actionPerformed(ActionEvent e){
+ addNewProperty(-1);
+ }
+ };
+ final Action removeAction = new AbstractAction(){
+ private static final long serialVersionUID = -411260949451039374L;
+
+ public void actionPerformed(ActionEvent e){
+ removeSelectedProperty();
+ }
+ };
+ final Action changeAction = new AbstractAction(){
+ private static final long serialVersionUID = -7406073660916286349L;
+
+ public void actionPerformed(ActionEvent e){
+ addNewProperty(table.getSelectedRow());
+ }
+ };
+ JButton addButton = GUIUtility.createButton(messages, "propertyadd", addAction);
+ JButton changeButton = GUIUtility.createButton(messages, "propertychange", changeAction);
+ JButton removeButton = GUIUtility.createButton(messages, "propertyremove", removeAction);
+
+ final JPopupMenu popup = new JPopupMenu();
+ popup.add(GUIUtility.createJMenuItem(messages, "propertyadd", addAction));
+ popup.add(GUIUtility.createJMenuItem(messages, "propertychange", changeAction));
+ popup.add(GUIUtility.createJMenuItem(messages, "propertyremove", removeAction));
+
+ setLayout(new BorderLayout());
+ JScrollPane scroll = new JScrollPane(table);
+ Box box = Box.createHorizontalBox();
+ box.add(Box.createHorizontalGlue());
+ box.add(addButton);
+ box.add(Box.createHorizontalGlue());
+ box.add(changeButton);
+ box.add(Box.createHorizontalGlue());
+ box.add(removeButton);
+ box.add(Box.createHorizontalGlue());
+
+ add(scroll, BorderLayout.CENTER);
+ add(box, BorderLayout.SOUTH);
+
+ table.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
+ public void valueChanged(ListSelectionEvent arg0){
+ removeAction.setEnabled(table.getSelectedRowCount() != 0);
+ changeAction.setEnabled(table.getSelectedRowCount() == 1);
+ }
+ });
+ table.addMouseListener(new PopupShowAction(popup));
+ changeAction.setEnabled(false);
+ removeAction.setEnabled(false);
+ }
+}
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.Component;\r
-import java.awt.GridLayout;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.awt.event.MouseAdapter;\r
-import java.awt.event.MouseEvent;\r
-import java.io.File;\r
-import java.io.IOException;\r
-import java.io.PrintWriter;\r
-import java.net.URL;\r
-import java.util.HashMap;\r
-import java.util.Iterator;\r
-import java.util.Map;\r
-\r
-import javax.swing.Box;\r
-import javax.swing.JButton;\r
-import javax.swing.JComponent;\r
-import javax.swing.JLabel;\r
-import javax.swing.JMenuItem;\r
-import javax.swing.JOptionPane;\r
-import javax.swing.JPanel;\r
-import javax.swing.JScrollPane;\r
-import javax.swing.JTable;\r
-import javax.swing.border.TitledBorder;\r
-import javax.swing.table.DefaultTableModel;\r
-\r
-import jp.naist.se.stigmata.Birthmark;\r
-import jp.naist.se.stigmata.BirthmarkComparator;\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.BirthmarkStoreException;\r
-import jp.naist.se.stigmata.ComparisonResultSet;\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-import jp.naist.se.stigmata.ExtractionTarget;\r
-import jp.naist.se.stigmata.filter.FilteredComparisonResultSet;\r
-import jp.naist.se.stigmata.printer.PrinterManager;\r
-import jp.naist.se.stigmata.result.CertainPairComparisonResultSet;\r
-import jp.naist.se.stigmata.result.RoundRobinComparisonResultSet;\r
-import jp.naist.se.stigmata.spi.ResultPrinterSpi;\r
-import jp.naist.se.stigmata.ui.swing.actions.SaveAction;\r
-import jp.naist.se.stigmata.ui.swing.actions.UpdateBirthmarkCellColorAction;\r
-import jp.naist.se.stigmata.utils.AsciiDataWritable;\r
-import jp.sourceforge.talisman.i18n.Messages;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class RoundRobinComparisonResultPane extends JPanel{\r
- private static final long serialVersionUID = 2134574576543623L;\r
-\r
- private StigmataFrame stigmata;\r
- private ExtractionResultSet extraction;\r
- private JTable table;\r
- private DefaultTableModel model;\r
- private JLabel classCount, comparisonCount, distinctionRatio;\r
- private JLabel average, minimum, maximum;\r
-\r
- public RoundRobinComparisonResultPane(StigmataFrame stigmata, ExtractionResultSet resultset){\r
- this.stigmata = stigmata;\r
- this.extraction = resultset;\r
- initialize();\r
- compare(model);\r
- }\r
-\r
- private void compare(DefaultTableModel model){\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
- int correct = 0;\r
- double avg = 0d;\r
- double max = 0d;\r
- double min = 100d;\r
- model.addColumn("");\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(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(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
- if(Math.abs(similarity - 1) < 1E-8){\r
- correct += 1;\r
- }\r
- avg += similarity;\r
- if(max < similarity) max = similarity;\r
- if(min > similarity) min = similarity;\r
- index++;\r
- }\r
- model.addRow(rows);\r
- }\r
- distinctionRatio.setText(\r
- Double.toString((double)(comparisonCount - correct) / (double)comparisonCount)\r
- );\r
- avg = avg / comparisonCount;\r
- average.setText(Double.toString(avg));\r
- minimum.setText(Double.toString(min));\r
- maximum.setText(Double.toString(max));\r
- }\r
-\r
- private double compare(BirthmarkSet x, BirthmarkSet y, BirthmarkEnvironment environment){\r
- double similarity = 0d;\r
- int count = 0;\r
-\r
- for(String type: x.getBirthmarkTypes()){\r
- Birthmark b1 = x.getBirthmark(type);\r
- Birthmark b2 = y.getBirthmark(type);\r
- if(b1 != null && b2 != null){\r
- BirthmarkComparator comparator = environment.getService(type).getComparator();\r
- double result = comparator.compare(b1, b2);\r
- if(!Double.isNaN(result)){\r
- similarity += result;\r
- count++;\r
- }\r
- }\r
- }\r
- return similarity / count;\r
- }\r
-\r
- private Component getMainPane(){\r
- JPanel panel = new JPanel();\r
- panel.setLayout(new BorderLayout());\r
-\r
- model = new RoundRobinComparisonResultSetTableModel();\r
- table = new JTable(model);\r
- table.setDefaultRenderer(Double.class, new CompareTableCellRenderer(extraction.getEnvironment()));\r
- table.addMouseListener(new MouseAdapter(){\r
- public void mouseClicked(MouseEvent e){\r
- if(e.getClickCount() == 2){\r
- int row = table.rowAtPoint(e.getPoint());\r
- int col = table.columnAtPoint(e.getPoint());\r
- if(col >= 1 && col < table.getColumnCount() && row >= 0\r
- && row < table.getRowCount()){\r
- BirthmarkSet b1 = extraction.getBirthmarkSet(ExtractionTarget.TARGET_X, col - 1);\r
- BirthmarkSet b2 = extraction.getBirthmarkSet(ExtractionTarget.TARGET_Y, row);\r
-\r
- stigmata.compareDetails(b1, b2, extraction.getContext());\r
- }\r
- }\r
- }\r
- });\r
- table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);\r
- table.setCellSelectionEnabled(true);\r
- JScrollPane scroll = new JScrollPane();\r
- scroll.setViewportView(table);\r
- scroll.setWheelScrollingEnabled(true);\r
- panel.add(scroll, BorderLayout.CENTER);\r
- JComponent south = Box.createVerticalBox();\r
- JPanel box1 = new JPanel(new GridLayout(1, 3));\r
- box1.add(classCount = new JLabel());\r
- box1.add(comparisonCount = new JLabel());\r
- box1.add(distinctionRatio = new JLabel());\r
- south.add(box1);\r
- JPanel box2 = new JPanel(new GridLayout(1, 3));\r
- box2.setBorder(new TitledBorder(stigmata.getMessages().get("similarity.border")));\r
- box2.add(average = new JLabel());\r
- box2.add(minimum = new JLabel());\r
- box2.add(maximum = new JLabel());\r
- south.add(box2);\r
-\r
- classCount.setBorder(new TitledBorder(stigmata.getMessages().get("numberofclasses.border")));\r
- comparisonCount.setBorder(new TitledBorder(stigmata.getMessages().get("comparisoncount.border")));\r
- distinctionRatio.setBorder(new TitledBorder(stigmata.getMessages().get("distinctionratio.border")));\r
- average.setBorder(new TitledBorder(stigmata.getMessages().get("average.border")));\r
- minimum.setBorder(new TitledBorder(stigmata.getMessages().get("minimum.border")));\r
- maximum.setBorder(new TitledBorder(stigmata.getMessages().get("maximum.border")));\r
-\r
- panel.add(south, BorderLayout.SOUTH);\r
-\r
- return panel;\r
- }\r
-\r
- private void mdsButtonActionPerformed(ActionEvent e){\r
- Map<URL, BirthmarkSet> map = new HashMap<URL, BirthmarkSet>();\r
- for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_X); i.hasNext(); ){\r
- BirthmarkSet bs = i.next();\r
- map.put(bs.getLocation(), bs);\r
- }\r
- for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_Y); i.hasNext(); ){\r
- BirthmarkSet bs = i.next();\r
- map.put(bs.getLocation(), bs);\r
- }\r
- int index = 0;\r
- BirthmarkSet[] set = new BirthmarkSet[map.size()];\r
- for(Map.Entry<URL, BirthmarkSet> entry: map.entrySet()){\r
- set[index] = entry.getValue();\r
- index++;\r
- }\r
- \r
- stigmata.showMDSGraph(set, extraction.getContext());\r
- }\r
-\r
- private void graphButtonActionPerformed(ActionEvent e){\r
- Map<Integer, Integer> values = new HashMap<Integer, Integer>();\r
- for(int i = 0; i < table.getRowCount(); i++){\r
- for(int j = 1; j < table.getColumnCount(); j++){\r
- Double d = (Double)table.getValueAt(i, j);\r
- int similarity = (int)Math.round(d.doubleValue() * 100);\r
- Integer dist = values.get(new Integer(similarity));\r
- if(dist == null){\r
- dist = new Integer(0);\r
- }\r
- dist = new Integer(dist.intValue() + 1);\r
- values.put(new Integer(similarity), dist);\r
- }\r
- }\r
- stigmata.showSimilarityDistributionGraph(values);\r
- }\r
-\r
- private void initialize(){\r
- final Messages messages = stigmata.getMessages();\r
- JButton save = GUIUtility.createButton(\r
- messages, "savecomparison", new SaveAction(stigmata, new AsciiDataWritable(){\r
- public void writeAsciiData(PrintWriter out, String format){\r
- ResultPrinterSpi service = PrinterManager.getInstance().getService(format);\r
- if(service == null){\r
- service = PrinterManager.getDefaultFormatService();\r
- }\r
-\r
- service.getComparisonResultSetPrinter().printResult(\r
- out, new RoundRobinComparisonResultSet(extraction)\r
- );\r
- }\r
- }\r
- ));\r
- JButton graph = GUIUtility.createButton(messages, "showgraph");\r
- JButton obfuscate = GUIUtility.createButton(messages, "obfuscate");\r
- JButton compare = GUIUtility.createButton(messages, "guessedpair");\r
- JButton updateColor = GUIUtility.createButton(\r
- messages, "updatecellcolor",\r
- new UpdateBirthmarkCellColorAction(stigmata, extraction.getEnvironment())\r
- );\r
- JMenuItem mdsMenu = GUIUtility.createJMenuItem(messages, "mdsmap");\r
-\r
- PopupButton comparePopup = new PopupButton(compare);\r
- PopupButton graphPopup = new PopupButton(graph);\r
-\r
- JComponent southPanel = Box.createHorizontalBox();\r
-\r
- setLayout(new BorderLayout());\r
- add(getMainPane(), BorderLayout.CENTER);\r
- add(southPanel, BorderLayout.SOUTH);\r
- southPanel.add(Box.createHorizontalGlue());\r
- southPanel.add(save);\r
- southPanel.add(Box.createHorizontalGlue());\r
- southPanel.add(updateColor);\r
- southPanel.add(Box.createHorizontalGlue());\r
- southPanel.add(graphPopup);\r
- southPanel.add(Box.createHorizontalGlue());\r
- southPanel.add(obfuscate);\r
- southPanel.add(Box.createHorizontalGlue());\r
- southPanel.add(comparePopup);\r
- southPanel.add(Box.createHorizontalGlue());\r
-\r
- graph.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- graphButtonActionPerformed(e);\r
- }\r
- });\r
- mdsMenu.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- mdsButtonActionPerformed(e);\r
- }\r
- });\r
-\r
- obfuscate.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- obfuscateClassNames();\r
- }\r
- });\r
-\r
- ActionListener compareListener = new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- String item = e.getActionCommand();\r
- if(item.equals("guessedpair")){\r
- compareGuessedPair();\r
- }\r
- else if(item.equals("specifiedpair")){\r
- compareSpecifiedPair();\r
- }\r
- else if(item.equals("roundrobin.filtering")){\r
- compareRoundRobinWithFiltering();\r
- }\r
- }\r
- };\r
-\r
- compare.addActionListener(compareListener);\r
- String[] comparisonMethods = stigmata.getMessages().getArray("comparison.methods.inroundrobinresult");\r
- for(int i = 1; i < comparisonMethods.length; i++){\r
- JMenuItem item = GUIUtility.createJMenuItem(messages, comparisonMethods[i]);\r
- comparePopup.addMenuItem(item);\r
- item.addActionListener(compareListener);\r
- }\r
- graphPopup.addMenuItem(mdsMenu);\r
- }\r
-\r
- private void compareRoundRobinWithFiltering(){\r
- FilterSelectionPane pane = new FilterSelectionPane(\r
- stigmata, extraction.getEnvironment().getFilterManager()\r
- );\r
- int returnValue = JOptionPane.showConfirmDialog(\r
- stigmata, pane, stigmata.getMessages().get("filterselection.dialog.title"),\r
- JOptionPane.OK_CANCEL_OPTION,\r
- JOptionPane.QUESTION_MESSAGE\r
- );\r
- if(returnValue == JOptionPane.OK_OPTION){\r
- String[] filterSetList = pane.getSelectedFilters();\r
-\r
- ComparisonResultSet rs = new RoundRobinComparisonResultSet(extraction);\r
- \r
- ComparisonResultSet filterResultSet = new FilteredComparisonResultSet(\r
- rs, extraction.getEnvironment().getFilterManager().getFilterSets(filterSetList)\r
- );\r
- stigmata.showComparisonResultSet(filterResultSet);\r
- }\r
- }\r
-\r
- private void compareGuessedPair(){\r
- ComparisonResultSet rs = new CertainPairComparisonResultSet(extraction);\r
- stigmata.showComparisonResultSet(rs);\r
- }\r
-\r
- private void compareSpecifiedPair(){\r
- File file = stigmata.getOpenFile(\r
- stigmata.getMessages().getArray("comparemapping.extension"),\r
- stigmata.getMessages().get("comparemapping.description")\r
- );\r
- if(file != null){\r
- Map<String, String> mapping = stigmata.constructMapping(file);\r
-\r
- ComparisonResultSet comparison = new CertainPairComparisonResultSet(extraction, mapping);\r
- stigmata.showComparisonResultSet(comparison);\r
- }\r
- }\r
-\r
- private void obfuscateClassNames(){\r
- ClassNameObfuscator obfuscator = new ClassNameObfuscator();\r
-\r
- try{\r
- File file = stigmata.getSaveFile(\r
- stigmata.getMessages().getArray("obfuscationmapping.extension"),\r
- stigmata.getMessages().get("obfuscationmapping.description")\r
- );\r
- if(file != null){\r
- BirthmarkContext context = extraction.getContext();\r
- BirthmarkEnvironment env = context.getEnvironment();\r
- ExtractionResultSet ers = env.getHistoryManager().createDefaultResultSet(context);\r
- try{\r
- for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_X); i.hasNext(); ){\r
- BirthmarkSet bs = i.next();\r
- ers.addBirthmarkSet(ExtractionTarget.TARGET_X, obfuscator.obfuscateClassName(bs));\r
- }\r
- for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_Y); i.hasNext(); ){\r
- BirthmarkSet bs = i.next();\r
- ers.addBirthmarkSet(ExtractionTarget.TARGET_Y, obfuscator.obfuscateClassName(bs));\r
- }\r
- } catch(BirthmarkStoreException e){\r
- }\r
- this.extraction = ers;\r
- obfuscator.outputNameMappings(file);\r
- }\r
- }catch(IOException e){\r
- JOptionPane.showMessageDialog(\r
- this, e.getMessage(), stigmata.getMessages().get("error.dialog.title"),\r
- JOptionPane.ERROR_MESSAGE\r
- );\r
- return;\r
- }\r
-\r
- DefaultTableModel model = new RoundRobinComparisonResultSetTableModel();\r
- compare(model);\r
- table.setModel(model);\r
- this.model = model;\r
- }\r
-\r
- private static class RoundRobinComparisonResultSetTableModel extends DefaultTableModel{\r
- private static final long serialVersionUID = 765435324523543242L;\r
-\r
- @Override\r
- public boolean isCellEditable(int row, int col){\r
- return false;\r
- }\r
-\r
- public Class<?> getColumnClass(int column){\r
- if(column == 0){\r
- return String.class;\r
- }\r
- else{\r
- return Double.class;\r
- }\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.border.TitledBorder;
+import javax.swing.table.DefaultTableModel;
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkComparator;
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.BirthmarkStoreException;
+import jp.sourceforge.stigmata.ComparisonResultSet;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.ExtractionTarget;
+import jp.sourceforge.stigmata.filter.FilteredComparisonResultSet;
+import jp.sourceforge.stigmata.printer.PrinterManager;
+import jp.sourceforge.stigmata.result.CertainPairComparisonResultSet;
+import jp.sourceforge.stigmata.result.RoundRobinComparisonResultSet;
+import jp.sourceforge.stigmata.spi.ResultPrinterSpi;
+import jp.sourceforge.stigmata.ui.swing.actions.SaveAction;
+import jp.sourceforge.stigmata.ui.swing.actions.UpdateBirthmarkCellColorAction;
+import jp.sourceforge.stigmata.utils.AsciiDataWritable;
+import jp.sourceforge.talisman.i18n.Messages;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class RoundRobinComparisonResultPane extends JPanel{
+ private static final long serialVersionUID = 2134574576543623L;
+
+ private StigmataFrame stigmata;
+ private ExtractionResultSet extraction;
+ private JTable table;
+ private DefaultTableModel model;
+ private JLabel classCount, comparisonCount, distinctionRatio;
+ private JLabel average, minimum, maximum;
+
+ public RoundRobinComparisonResultPane(StigmataFrame stigmata, ExtractionResultSet resultset){
+ this.stigmata = stigmata;
+ this.extraction = resultset;
+ initialize();
+ compare(model);
+ }
+
+ private void compare(DefaultTableModel model){
+ ExtractionTarget targetX = ExtractionTarget.TARGET_X;
+ ExtractionTarget targetY = ExtractionTarget.TARGET_Y;
+ int countX = extraction.getBirthmarkSetSize(targetX);
+ int countY = extraction.getBirthmarkSetSize(targetY);
+ int comparisonCount = countX * countY;
+ if(countX == 0 && countY == 0){
+ targetX = ExtractionTarget.TARGET_XY;
+ targetY = ExtractionTarget.TARGET_XY;
+ countX = extraction.getBirthmarkSetSize(targetX);
+ countY = extraction.getBirthmarkSetSize(targetY);
+ comparisonCount = countX * (countY - 1) / 2;
+ }
+ else if(countX == 0 || countY == 0){
+ targetX = ExtractionTarget.TARGET_BOTH;
+ targetY = ExtractionTarget.TARGET_BOTH;
+ countX = extraction.getBirthmarkSetSize(targetX);
+ countY = extraction.getBirthmarkSetSize(targetY);
+ comparisonCount = countX * (countY - 1) / 2;
+ }
+
+ classCount.setText(Integer.toString(countX + countY));
+ this.comparisonCount.setText(Integer.toString(comparisonCount));
+ int correct = 0;
+ double avg = 0d;
+ double max = 0d;
+ double min = 100d;
+ model.addColumn("");
+ for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(targetX); i.hasNext(); ){
+ BirthmarkSet x = i.next();
+ model.addColumn(x.getName());
+ }
+ int sizeX = extraction.getBirthmarkSetSize(targetX);
+ for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(targetY); i.hasNext(); ){
+ Object[] rows = new Object[sizeX + 1];
+ BirthmarkSet setY = i.next();
+ rows[0] = setY.getName();
+
+ int index = 0;
+ for(Iterator<BirthmarkSet> j = extraction.birthmarkSets(targetX); j.hasNext(); ){
+ BirthmarkSet setX = j.next();
+ double similarity = compare(setX, setY, extraction.getEnvironment());
+ rows[index + 1] = new Double(similarity);
+
+ if(Math.abs(similarity - 1) < 1E-8){
+ correct += 1;
+ }
+ avg += similarity;
+ if(max < similarity) max = similarity;
+ if(min > similarity) min = similarity;
+ index++;
+ }
+ model.addRow(rows);
+ }
+ distinctionRatio.setText(
+ Double.toString((double)(comparisonCount - correct) / (double)comparisonCount)
+ );
+ avg = avg / comparisonCount;
+ average.setText(Double.toString(avg));
+ minimum.setText(Double.toString(min));
+ maximum.setText(Double.toString(max));
+ }
+
+ private double compare(BirthmarkSet x, BirthmarkSet y, BirthmarkEnvironment environment){
+ double similarity = 0d;
+ int count = 0;
+
+ for(String type: x.getBirthmarkTypes()){
+ Birthmark b1 = x.getBirthmark(type);
+ Birthmark b2 = y.getBirthmark(type);
+ if(b1 != null && b2 != null){
+ BirthmarkComparator comparator = environment.getService(type).getComparator();
+ double result = comparator.compare(b1, b2);
+ if(!Double.isNaN(result)){
+ similarity += result;
+ count++;
+ }
+ }
+ }
+ return similarity / count;
+ }
+
+ private Component getMainPane(){
+ JPanel panel = new JPanel();
+ panel.setLayout(new BorderLayout());
+
+ model = new RoundRobinComparisonResultSetTableModel();
+ table = new JTable(model);
+ table.setDefaultRenderer(Double.class, new CompareTableCellRenderer(extraction.getEnvironment()));
+ table.addMouseListener(new MouseAdapter(){
+ public void mouseClicked(MouseEvent e){
+ if(e.getClickCount() == 2){
+ int row = table.rowAtPoint(e.getPoint());
+ int col = table.columnAtPoint(e.getPoint());
+ if(col >= 1 && col < table.getColumnCount() && row >= 0
+ && row < table.getRowCount()){
+ BirthmarkSet b1 = extraction.getBirthmarkSet(ExtractionTarget.TARGET_X, col - 1);
+ BirthmarkSet b2 = extraction.getBirthmarkSet(ExtractionTarget.TARGET_Y, row);
+
+ stigmata.compareDetails(b1, b2, extraction.getContext());
+ }
+ }
+ }
+ });
+ table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+ table.setCellSelectionEnabled(true);
+ JScrollPane scroll = new JScrollPane();
+ scroll.setViewportView(table);
+ scroll.setWheelScrollingEnabled(true);
+ panel.add(scroll, BorderLayout.CENTER);
+ JComponent south = Box.createVerticalBox();
+ JPanel box1 = new JPanel(new GridLayout(1, 3));
+ box1.add(classCount = new JLabel());
+ box1.add(comparisonCount = new JLabel());
+ box1.add(distinctionRatio = new JLabel());
+ south.add(box1);
+ JPanel box2 = new JPanel(new GridLayout(1, 3));
+ box2.setBorder(new TitledBorder(stigmata.getMessages().get("similarity.border")));
+ box2.add(average = new JLabel());
+ box2.add(minimum = new JLabel());
+ box2.add(maximum = new JLabel());
+ south.add(box2);
+
+ classCount.setBorder(new TitledBorder(stigmata.getMessages().get("numberofclasses.border")));
+ comparisonCount.setBorder(new TitledBorder(stigmata.getMessages().get("comparisoncount.border")));
+ distinctionRatio.setBorder(new TitledBorder(stigmata.getMessages().get("distinctionratio.border")));
+ average.setBorder(new TitledBorder(stigmata.getMessages().get("average.border")));
+ minimum.setBorder(new TitledBorder(stigmata.getMessages().get("minimum.border")));
+ maximum.setBorder(new TitledBorder(stigmata.getMessages().get("maximum.border")));
+
+ panel.add(south, BorderLayout.SOUTH);
+
+ return panel;
+ }
+
+ private void mdsButtonActionPerformed(ActionEvent e){
+ Map<URL, BirthmarkSet> map = new HashMap<URL, BirthmarkSet>();
+ for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_X); i.hasNext(); ){
+ BirthmarkSet bs = i.next();
+ map.put(bs.getLocation(), bs);
+ }
+ for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_Y); i.hasNext(); ){
+ BirthmarkSet bs = i.next();
+ map.put(bs.getLocation(), bs);
+ }
+ int index = 0;
+ BirthmarkSet[] set = new BirthmarkSet[map.size()];
+ for(Map.Entry<URL, BirthmarkSet> entry: map.entrySet()){
+ set[index] = entry.getValue();
+ index++;
+ }
+
+ stigmata.showMDSGraph(set, extraction.getContext());
+ }
+
+ private void graphButtonActionPerformed(ActionEvent e){
+ Map<Integer, Integer> values = new HashMap<Integer, Integer>();
+ for(int i = 0; i < table.getRowCount(); i++){
+ for(int j = 1; j < table.getColumnCount(); j++){
+ Double d = (Double)table.getValueAt(i, j);
+ int similarity = (int)Math.round(d.doubleValue() * 100);
+ Integer dist = values.get(new Integer(similarity));
+ if(dist == null){
+ dist = new Integer(0);
+ }
+ dist = new Integer(dist.intValue() + 1);
+ values.put(new Integer(similarity), dist);
+ }
+ }
+ stigmata.showSimilarityDistributionGraph(values);
+ }
+
+ private void initialize(){
+ final Messages messages = stigmata.getMessages();
+ JButton save = GUIUtility.createButton(
+ messages, "savecomparison", new SaveAction(stigmata, new AsciiDataWritable(){
+ public void writeAsciiData(PrintWriter out, String format){
+ ResultPrinterSpi service = PrinterManager.getInstance().getService(format);
+ if(service == null){
+ service = PrinterManager.getDefaultFormatService();
+ }
+
+ service.getComparisonResultSetPrinter().printResult(
+ out, new RoundRobinComparisonResultSet(extraction)
+ );
+ }
+ }
+ ));
+ JButton graph = GUIUtility.createButton(messages, "showgraph");
+ JButton obfuscate = GUIUtility.createButton(messages, "obfuscate");
+ JButton compare = GUIUtility.createButton(messages, "guessedpair");
+ JButton updateColor = GUIUtility.createButton(
+ messages, "updatecellcolor",
+ new UpdateBirthmarkCellColorAction(stigmata, extraction.getEnvironment())
+ );
+ JMenuItem mdsMenu = GUIUtility.createJMenuItem(messages, "mdsmap");
+
+ PopupButton comparePopup = new PopupButton(compare);
+ PopupButton graphPopup = new PopupButton(graph);
+
+ JComponent southPanel = Box.createHorizontalBox();
+
+ setLayout(new BorderLayout());
+ add(getMainPane(), BorderLayout.CENTER);
+ add(southPanel, BorderLayout.SOUTH);
+ southPanel.add(Box.createHorizontalGlue());
+ southPanel.add(save);
+ southPanel.add(Box.createHorizontalGlue());
+ southPanel.add(updateColor);
+ southPanel.add(Box.createHorizontalGlue());
+ southPanel.add(graphPopup);
+ southPanel.add(Box.createHorizontalGlue());
+ southPanel.add(obfuscate);
+ southPanel.add(Box.createHorizontalGlue());
+ southPanel.add(comparePopup);
+ southPanel.add(Box.createHorizontalGlue());
+
+ graph.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ graphButtonActionPerformed(e);
+ }
+ });
+ mdsMenu.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ mdsButtonActionPerformed(e);
+ }
+ });
+
+ obfuscate.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ obfuscateClassNames();
+ }
+ });
+
+ ActionListener compareListener = new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ String item = e.getActionCommand();
+ if(item.equals("guessedpair")){
+ compareGuessedPair();
+ }
+ else if(item.equals("specifiedpair")){
+ compareSpecifiedPair();
+ }
+ else if(item.equals("roundrobin.filtering")){
+ compareRoundRobinWithFiltering();
+ }
+ }
+ };
+
+ compare.addActionListener(compareListener);
+ String[] comparisonMethods = stigmata.getMessages().getArray("comparison.methods.inroundrobinresult");
+ for(int i = 1; i < comparisonMethods.length; i++){
+ JMenuItem item = GUIUtility.createJMenuItem(messages, comparisonMethods[i]);
+ comparePopup.addMenuItem(item);
+ item.addActionListener(compareListener);
+ }
+ graphPopup.addMenuItem(mdsMenu);
+ }
+
+ private void compareRoundRobinWithFiltering(){
+ FilterSelectionPane pane = new FilterSelectionPane(
+ stigmata, extraction.getEnvironment().getFilterManager()
+ );
+ int returnValue = JOptionPane.showConfirmDialog(
+ stigmata, pane, stigmata.getMessages().get("filterselection.dialog.title"),
+ JOptionPane.OK_CANCEL_OPTION,
+ JOptionPane.QUESTION_MESSAGE
+ );
+ if(returnValue == JOptionPane.OK_OPTION){
+ String[] filterSetList = pane.getSelectedFilters();
+
+ ComparisonResultSet rs = new RoundRobinComparisonResultSet(extraction);
+
+ ComparisonResultSet filterResultSet = new FilteredComparisonResultSet(
+ rs, extraction.getEnvironment().getFilterManager().getFilterSets(filterSetList)
+ );
+ stigmata.showComparisonResultSet(filterResultSet);
+ }
+ }
+
+ private void compareGuessedPair(){
+ ComparisonResultSet rs = new CertainPairComparisonResultSet(extraction);
+ stigmata.showComparisonResultSet(rs);
+ }
+
+ private void compareSpecifiedPair(){
+ File file = stigmata.getOpenFile(
+ stigmata.getMessages().getArray("comparemapping.extension"),
+ stigmata.getMessages().get("comparemapping.description")
+ );
+ if(file != null){
+ Map<String, String> mapping = stigmata.constructMapping(file);
+
+ ComparisonResultSet comparison = new CertainPairComparisonResultSet(extraction, mapping);
+ stigmata.showComparisonResultSet(comparison);
+ }
+ }
+
+ private void obfuscateClassNames(){
+ ClassNameObfuscator obfuscator = new ClassNameObfuscator();
+
+ try{
+ File file = stigmata.getSaveFile(
+ stigmata.getMessages().getArray("obfuscationmapping.extension"),
+ stigmata.getMessages().get("obfuscationmapping.description")
+ );
+ if(file != null){
+ BirthmarkContext context = extraction.getContext();
+ BirthmarkEnvironment env = context.getEnvironment();
+ ExtractionResultSet ers = env.getHistoryManager().createDefaultResultSet(context);
+ try{
+ for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_X); i.hasNext(); ){
+ BirthmarkSet bs = i.next();
+ ers.addBirthmarkSet(ExtractionTarget.TARGET_X, obfuscator.obfuscateClassName(bs));
+ }
+ for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_Y); i.hasNext(); ){
+ BirthmarkSet bs = i.next();
+ ers.addBirthmarkSet(ExtractionTarget.TARGET_Y, obfuscator.obfuscateClassName(bs));
+ }
+ } catch(BirthmarkStoreException e){
+ }
+ this.extraction = ers;
+ obfuscator.outputNameMappings(file);
+ }
+ }catch(IOException e){
+ JOptionPane.showMessageDialog(
+ this, e.getMessage(), stigmata.getMessages().get("error.dialog.title"),
+ JOptionPane.ERROR_MESSAGE
+ );
+ return;
+ }
+
+ DefaultTableModel model = new RoundRobinComparisonResultSetTableModel();
+ compare(model);
+ table.setModel(model);
+ this.model = model;
+ }
+
+ private static class RoundRobinComparisonResultSetTableModel extends DefaultTableModel{
+ private static final long serialVersionUID = 765435324523543242L;
+
+ @Override
+ public boolean isCellEditable(int row, int col){
+ return false;
+ }
+
+ public Class<?> getColumnClass(int column){
+ if(column == 0){
+ return String.class;
+ }
+ else{
+ return Double.class;
+ }
+ }
+ }
+}
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.Image;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.awt.event.WindowAdapter;\r
-import java.awt.event.WindowEvent;\r
-import java.io.BufferedReader;\r
-import java.io.File;\r
-import java.io.FileReader;\r
-import java.io.IOException;\r
-import java.io.PrintWriter;\r
-import java.io.StringWriter;\r
-import java.util.HashMap;\r
-import java.util.Iterator;\r
-import java.util.Map;\r
-\r
-import javax.swing.ButtonGroup;\r
-import javax.swing.JCheckBoxMenuItem;\r
-import javax.swing.JFrame;\r
-import javax.swing.JLabel;\r
-import javax.swing.JMenu;\r
-import javax.swing.JMenuBar;\r
-import javax.swing.JMenuItem;\r
-import javax.swing.JOptionPane;\r
-import javax.swing.JPanel;\r
-import javax.swing.JScrollPane;\r
-import javax.swing.JSeparator;\r
-import javax.swing.JTabbedPane;\r
-import javax.swing.JTextArea;\r
-import javax.swing.LookAndFeel;\r
-import javax.swing.SwingUtilities;\r
-import javax.swing.UIManager;\r
-import javax.swing.WindowConstants;\r
-import javax.swing.event.ChangeEvent;\r
-import javax.swing.event.ChangeListener;\r
-import javax.swing.filechooser.FileFilter;\r
-\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkElementClassNotFoundException;\r
-import jp.naist.se.stigmata.BirthmarkEngine;\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.BirthmarkExtractionFailedException;\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.ComparisonPair;\r
-import jp.naist.se.stigmata.ComparisonResultSet;\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-import jp.naist.se.stigmata.Main;\r
-import jp.naist.se.stigmata.Stigmata;\r
-import jp.naist.se.stigmata.event.BirthmarkEngineAdapter;\r
-import jp.naist.se.stigmata.event.BirthmarkEngineEvent;\r
-import jp.naist.se.stigmata.event.WarningMessages;\r
-import jp.naist.se.stigmata.result.CertainPairComparisonResultSet;\r
-import jp.naist.se.stigmata.ui.swing.actions.AboutAction;\r
-import jp.naist.se.stigmata.ui.swing.actions.LicenseAction;\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
-import jp.sourceforge.talisman.i18n.Messages;\r
-import jp.sourceforge.talisman.i18n.ResourceNotFoundException;\r
-\r
-import org.apache.commons.cli.ParseException;\r
-\r
-/**\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class StigmataFrame extends JFrame{\r
- private static final long serialVersionUID = 92345543665342134L;\r
-\r
- private Messages messages;\r
- private JTabbedPane tabPane;\r
- private JMenuItem closeTabMenu;\r
- private JMenuItem saveMenu;\r
- private JCheckBoxMenuItem expertmodeMenu;\r
- private Stigmata stigmata;\r
- private BirthmarkEnvironment environment;\r
- private ControlPane control;\r
- private FileIOManager fileio;\r
- private Map<String, Integer> countmap = new HashMap<String, Integer>();\r
-\r
- public StigmataFrame(){\r
- this(Stigmata.getInstance());\r
- }\r
-\r
- public StigmataFrame(Stigmata stigmata){\r
- this(stigmata, BirthmarkEnvironment.getDefaultEnvironment());\r
- }\r
-\r
- public StigmataFrame(Stigmata stigmata, BirthmarkEnvironment environment){\r
- this.stigmata = stigmata;\r
- this.environment = environment;\r
- this.fileio = new FileIOManager(this, environment);\r
- try{\r
- this.messages = new Messages("resources.messages");\r
- } catch(ResourceNotFoundException e){\r
- throw new InternalError(e.getMessage());\r
- }\r
- Image iconImage = GUIUtility.getImage(getMessages(), "stigmata.icon");\r
- if(iconImage != null){\r
- setIconImage(iconImage);\r
- }\r
-\r
- stigmata.addBirthmarkEngineListener(new BirthmarkEngineAdapter(){\r
- @Override\r
- public void operationDone(BirthmarkEngineEvent e){\r
- showWarnings(e.getMessage());\r
- }\r
- });\r
-\r
- initLayouts();\r
- }\r
-\r
- public Messages getMessages(){\r
- return messages;\r
- }\r
-\r
- public boolean isNeedToSaveSettings(){\r
- return saveMenu.isEnabled();\r
- }\r
-\r
- public void setNeedToSaveSettings(boolean flag){\r
- saveMenu.setEnabled(flag);\r
- }\r
-\r
- public Stigmata getStigmata(){\r
- return stigmata;\r
- }\r
-\r
- public BirthmarkEnvironment getEnvironment(){\r
- return environment;\r
- }\r
-\r
- public File getCurrentDirectory(){\r
- return fileio.getCurrentDirectory();\r
- }\r
-\r
- public void setCurrentDirectory(File file){\r
- try{\r
- fileio.setCurrentDirectory(file);\r
- } catch(IllegalArgumentException e){\r
- JOptionPane.showMessageDialog(\r
- this,\r
- getMessages().get("notdirectory.dialog.message", file.getName()),\r
- getMessages().get("notdirectory.dialog.title"),\r
- JOptionPane.ERROR_MESSAGE\r
- );\r
- } catch(Exception e){\r
- showExceptionMessage(e);\r
- }\r
- }\r
-\r
- public File[] openFiles(FileFilter[] filters, boolean multipleSelectable, boolean directorySelectable){\r
- return fileio.openFiles(filters, multipleSelectable, directorySelectable);\r
- }\r
-\r
- /**\r
- * Find file to open it.\r
- */\r
- public File getOpenFile(String[] exts, String desc){\r
- return fileio.findFile(true, exts, desc);\r
- }\r
-\r
- /**\r
- * Find file for storing data to it.\r
- * Extension of found file is correct as selected extension.\r
- */\r
- public File getSaveFile(String[] exts, String desc){\r
- return fileio.findFile(false, exts, desc);\r
- }\r
-\r
- public void addBirthmarkServiceListener(BirthmarkServiceListener listener){\r
- control.addBirthmarkServiceListener(listener);\r
- }\r
-\r
- public void removeBirthmarkServiceListener(BirthmarkServiceListener listener){\r
- control.removeBirthmarkServiceListener(listener);\r
- }\r
-\r
- public void compareDetails(BirthmarkSet target1, BirthmarkSet target2, BirthmarkContext context){\r
- PairComparisonPane detail = new PairComparisonPane(\r
- this, new ComparisonPair(target1, target2, context)\r
- );\r
- int compareDetail = getNextCount("compare_detail");\r
-\r
- GUIUtility.addNewTab(getMessages(), "comparedetail", tabPane, detail,\r
- new Object[] { new Integer(compareDetail), },\r
- new Object[] {\r
- Utility.array2String(target1.getBirthmarkTypes()),\r
- target1.getName(),\r
- target2.getName(),\r
- }\r
- );\r
- tabPane.setSelectedIndex(tabPane.getTabCount() - 1);\r
- }\r
-\r
- public void compareRoundRobin(String[] targetX, String[] targetY, \r
- BirthmarkContext context){\r
- try{\r
- BirthmarkEngine engine = getStigmata().createEngine(context.getEnvironment());\r
- ExtractionResultSet ers = engine.extract(targetX, targetY, context);\r
-\r
- RoundRobinComparisonResultPane compare = new RoundRobinComparisonResultPane(this, ers);\r
- int compareCount = getNextCount("compare");\r
- GUIUtility.addNewTab(\r
- getMessages(), "compare", tabPane, compare,\r
- new Object[] { new Integer(compareCount), },\r
- new Object[] {\r
- Utility.array2String(context.getBirthmarkTypes()),\r
- Utility.array2String(targetX),\r
- Utility.array2String(targetY),\r
- }\r
- );\r
- tabPane.setSelectedIndex(tabPane.getTabCount() - 1);\r
- } catch(Throwable e){\r
- showExceptionMessage(e);\r
- }\r
- }\r
-\r
- public void compareRoundRobinFilter(String[] targetX, String[] targetY, \r
- BirthmarkContext context){\r
- try{\r
- BirthmarkEngine engine = getStigmata().createEngine(context.getEnvironment());\r
-\r
- ExtractionResultSet ers = engine.extract(targetX, targetY, context);\r
- ComparisonResultSet resultset = engine.compare(ers);\r
- if(context.hasFilter()){\r
- resultset = engine.filter(resultset);\r
- }\r
- int compareCount = getNextCount("compare");\r
- GUIUtility.addNewTab(\r
- getMessages(), "compare", tabPane, new PairComparisonResultSetPane(this, resultset),\r
- new Object[] { new Integer(compareCount), },\r
- new Object[] {\r
- Utility.array2String(context.getBirthmarkTypes()),\r
- Utility.array2String(targetX),\r
- Utility.array2String(targetY),\r
- }\r
- );\r
- tabPane.setSelectedIndex(tabPane.getTabCount() - 1);\r
- } catch(Throwable e){\r
- showExceptionMessage(e);\r
- }\r
- }\r
-\r
- public void compareGuessedPair(String[] targetX, String[] targetY, BirthmarkContext context){\r
- try{\r
- BirthmarkEngine engine = getStigmata().createEngine(context.getEnvironment());\r
- ExtractionResultSet extraction = engine.extract(targetX, targetY, context);\r
- int comparePair = getNextCount("compare_pair");\r
-\r
- ComparisonResultSet resultset = new CertainPairComparisonResultSet(extraction);\r
- GUIUtility.addNewTab(\r
- getMessages(), "comparepair", tabPane,\r
- new PairComparisonResultSetPane(this, resultset),\r
- new Object[] { new Integer(comparePair), },\r
- new Object[] {\r
- Utility.array2String(context.getBirthmarkTypes()),\r
- Utility.array2String(targetX),\r
- Utility.array2String(targetY),\r
- }\r
- );\r
- tabPane.setSelectedIndex(tabPane.getTabCount() - 1);\r
- }catch(Throwable e){\r
- showExceptionMessage(e);\r
- }\r
- }\r
-\r
- public void compareSpecifiedPair(String[] targetX, String[] targetY, BirthmarkContext context){\r
- File file = getOpenFile(\r
- getMessages().getArray("comparemapping.extension"),\r
- getMessages().get("comparemapping.description")\r
- );\r
-\r
- if(file != null){\r
- Map<String, String> mapping = constructMapping(file);\r
-\r
- try{\r
- BirthmarkEngine engine = getStigmata().createEngine(context.getEnvironment());\r
- context.setNameMappings(mapping);\r
- ComparisonResultSet crs = engine.compare(targetX, targetY, context);\r
- int comparePair = getNextCount("compare_pair");\r
-\r
- GUIUtility.addNewTab(\r
- getMessages(), "comparepair", tabPane,\r
- new PairComparisonResultSetPane(this, crs),\r
- new Object[] { new Integer(comparePair), },\r
- new Object[] {\r
- Utility.array2String(context.getBirthmarkTypes()),\r
- Utility.array2String(targetX),\r
- Utility.array2String(targetY),\r
- }\r
- );\r
- tabPane.setSelectedIndex(tabPane.getTabCount() - 1);\r
- }catch(Exception e){\r
- showExceptionMessage(e);\r
- }\r
- }\r
- }\r
-\r
- public void showComparisonResultSet(ComparisonResultSet resultset){\r
- int comparePair = getNextCount("compare_pair");\r
- GUIUtility.addNewTab(\r
- getMessages(), "comparisonresultset", tabPane,\r
- new PairComparisonResultSetPane(this, resultset),\r
- new Object[] { new Integer(comparePair), }, null\r
- );\r
- tabPane.setSelectedIndex(tabPane.getTabCount() - 1);\r
- }\r
-\r
- public void showMDSGraph(BirthmarkSet[] set, BirthmarkContext context){\r
- try{\r
- MDSGraphPanel panel = new MDSGraphPanel(this, set, context);\r
- int mappingGraphCount = getNextCount("mds_graph");\r
- GUIUtility.addNewTab(\r
- getMessages(), "mappinggraph", tabPane, panel,\r
- new Object[] { new Integer(mappingGraphCount), }, null\r
- );\r
- tabPane.setSelectedIndex(tabPane.getTabCount() - 1);\r
- } catch(Exception e){\r
- showExceptionMessage(e);\r
- }\r
- }\r
-\r
- public void showSimilarityDistributionGraph(Map<Integer, Integer> distributions){\r
- SimilarityDistributionGraphPane graph = new SimilarityDistributionGraphPane(this, distributions);\r
-\r
- int similarityGraphCount = getNextCount("similarity_graph");\r
- GUIUtility.addNewTab(\r
- getMessages(), "similaritygraph", tabPane, graph,\r
- new Object[] { new Integer(similarityGraphCount), }, null\r
- );\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
- getMessages(), "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
- GUIUtility.addNewTab(\r
- getMessages(), "extract", tabPane, viewer,\r
- new Object[] { new Integer(extractCount), },\r
- new Object[] { Utility.array2String(ers.getBirthmarkTypes()), }\r
- );\r
- tabPane.setSelectedIndex(tabPane.getTabCount() - 1);\r
- \r
- }\r
-\r
- public void extract(String[] targetX, String[] targetY, BirthmarkContext context){\r
- try{\r
- BirthmarkEngine engine = getStigmata().createEngine(context.getEnvironment());\r
- ExtractionResultSet ers = engine.extract(targetX, targetY, context);\r
- showExtractionResult(ers);\r
- }catch(Throwable e){\r
- showExceptionMessage(e);\r
- }\r
- }\r
-\r
- /**\r
- * csv file to Map.\r
- */\r
- public Map<String, String> constructMapping(File file){\r
- Map<String, String> mapping = new HashMap<String, String>();\r
- BufferedReader in = null;\r
- try{\r
- in = new BufferedReader(new FileReader(file));\r
- String line;\r
- while((line = in.readLine()) != null){\r
- String[] tokens = line.split(", *");\r
- if(tokens.length >= 2){\r
- mapping.put(tokens[0], tokens[1]);\r
- }\r
- }\r
-\r
- }catch(Exception e){\r
- showExceptionMessage(e);\r
- }finally{\r
- if(in != null){\r
- try{\r
- in.close();\r
- }catch(IOException e){\r
- }\r
- }\r
- }\r
- return mapping;\r
- }\r
-\r
- private void reloadSettings(String[] args){\r
- try{\r
- setVisible(false);\r
- dispose();\r
- new Main(args);\r
- } catch(ParseException e){\r
- }\r
- }\r
-\r
- private void clearSettings(){\r
- Utility.deleteDirectory(new File(BirthmarkEnvironment.getStigmataHome()));\r
- reloadSettings(new String[] { "--reset-config", "--mode", "gui", });\r
- }\r
-\r
- private void initLayouts(){\r
- setTitle(getMessages().get("stigmata.frame.title"));\r
- initComponents();\r
-\r
- GUIUtility.addNewTab(getMessages(), "control", tabPane, control = new ControlPane(this), null, null);\r
- control.inititalize();\r
- tabPane.setSelectedIndex(tabPane.getTabCount() - 1);\r
-\r
- setNeedToSaveSettings(false);\r
- setSize(900, 600);\r
- }\r
-\r
- private void showWarnings(WarningMessages warnings){\r
- if(warnings.getWarningCount() > 0){\r
- StringBuilder sb = new StringBuilder("<html><body><dl>");\r
- for(Iterator<Exception> i = warnings.exceptions(); i.hasNext(); ){\r
- Exception e = i.next();\r
- sb.append("<dt>").append(e.getClass().getName()).append("</dt>");\r
- sb.append("<dd>").append(e.getMessage()).append("</dd>");\r
- sb.append("<dd>").append(warnings.getString(e)).append("</dd>");\r
- }\r
- sb.append("</dl></body></html>");\r
-\r
- JOptionPane.showMessageDialog(\r
- this, new String(sb), getMessages().get("warning.dialog.title"),\r
- JOptionPane.WARNING_MESSAGE\r
- );\r
- }\r
- }\r
-\r
- private void initComponents(){\r
- setDefaultUI();\r
- JMenuBar menubar = new JMenuBar();\r
- menubar.add(createFileMenu());\r
- menubar.add(createHelpMenu());\r
-\r
- setJMenuBar(menubar);\r
-\r
- tabPane = new EditableTabbedPane(this);\r
- add(tabPane, BorderLayout.CENTER);\r
-\r
- tabPane.addChangeListener(new ChangeListener(){\r
- public void stateChanged(ChangeEvent arg0){\r
- String title = tabPane.getTitleAt(tabPane.getSelectedIndex());\r
- closeTabMenu.setEnabled(!title.equals(getMessages().get("control.tab.label")));\r
- }\r
- });\r
- addWindowListener(new WindowAdapter(){\r
- @Override\r
- public void windowClosing(WindowEvent e){\r
- boolean closeFlag = true;\r
- if(isNeedToSaveSettings()){\r
- int returnValue = JOptionPane.showConfirmDialog(\r
- StigmataFrame.this,\r
- getMessages().get("needtosave.settings.message"),\r
- getMessages().get("needtosave.settings.title"),\r
- JOptionPane.YES_NO_CANCEL_OPTION,\r
- JOptionPane.WARNING_MESSAGE\r
- );\r
- closeFlag = returnValue != JOptionPane.CANCEL_OPTION;\r
- if(returnValue == JOptionPane.YES_OPTION){\r
- control.saveSettings(new File(BirthmarkEnvironment.getStigmataHome(), "stigmata.xml"));\r
- }\r
- }\r
- if(closeFlag){\r
- setVisible(false);\r
- dispose();\r
- }\r
- }\r
- });\r
- setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);\r
- }\r
-\r
- private JMenu createFileMenu(){\r
- JMenu fileMenu = GUIUtility.createJMenu(getMessages(), "fileMenu");\r
- JMenuItem newFrameMenu = GUIUtility.createJMenuItem(getMessages(), "newframe");\r
- JMenuItem saveMenu = GUIUtility.createJMenuItem(getMessages(), "savesetting");\r
- JMenuItem exportMenu = GUIUtility.createJMenuItem(getMessages(), "exportsetting");\r
- JMenuItem clearMenu = GUIUtility.createJMenuItem(getMessages(), "clearsetting");\r
- JMenuItem refreshMenu = GUIUtility.createJMenuItem(getMessages(), "refreshsetting");\r
- JMenuItem closeTabMenu = GUIUtility.createJMenuItem(getMessages(), "closetab");\r
- JMenuItem closeMenu = GUIUtility.createJMenuItem(getMessages(), "closeframe");\r
- JMenuItem exitMenu = GUIUtility.createJMenuItem(getMessages(), "exit");\r
- this.closeTabMenu = closeTabMenu;\r
- this.saveMenu = saveMenu;\r
- saveMenu.setEnabled(false);\r
-\r
- fileMenu.add(newFrameMenu);\r
- fileMenu.add(new JSeparator());\r
- fileMenu.add(saveMenu);\r
- fileMenu.add(exportMenu);\r
- fileMenu.add(refreshMenu);\r
- fileMenu.add(clearMenu);\r
- fileMenu.add(new JSeparator());\r
- fileMenu.add(closeTabMenu);\r
- fileMenu.add(closeMenu);\r
- fileMenu.add(new JSeparator());\r
- fileMenu.add(exitMenu);\r
-\r
- newFrameMenu.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent evt){\r
- StigmataFrame frame = new StigmataFrame(stigmata, environment);\r
- frame.setVisible(true);\r
- }\r
- });\r
- saveMenu.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- control.saveSettings(new File(BirthmarkEnvironment.getStigmataHome(), "stigmata.xml"));\r
- setNeedToSaveSettings(false);\r
- }\r
- });\r
-\r
- exportMenu.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- control.exportSettings();\r
- }\r
- });\r
-\r
- closeTabMenu.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent evt){\r
- closeTabMenuActionPerformed();\r
- }\r
- });\r
-\r
- clearMenu.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent evt){\r
- clearSettings();\r
- }\r
- });\r
- refreshMenu.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent evt){\r
- reloadSettings(new String[] { "--mode", "gui", });\r
- }\r
- });\r
-\r
- closeMenu.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent evt){\r
- setVisible(false);\r
- dispose();\r
- }\r
- });\r
-\r
- exitMenu.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent evt){\r
- System.exit(0);\r
- }\r
- });\r
- return fileMenu;\r
- }\r
-\r
- private JMenu createHelpMenu(){\r
- JMenu menu = GUIUtility.createJMenu(getMessages(), "helpmenu");\r
- JMenuItem about = GUIUtility.createJMenuItem(getMessages(), "about", new AboutAction(this));\r
- JMenuItem license = GUIUtility.createJMenuItem(getMessages(), "license", new LicenseAction(this));\r
- JMenuItem help = GUIUtility.createJMenuItem(getMessages(), "helpmenu");\r
- expertmodeMenu = GUIUtility.createJCheckBoxMenuItem(getMessages(), "expertmenu");\r
-\r
- menu.add(about);\r
- menu.add(license);\r
- menu.add(help);\r
- menu.add(new JSeparator());\r
- menu.add(createLookAndFeelMenu());\r
- menu.add(new JSeparator());\r
- menu.add(expertmodeMenu);\r
-\r
- expertmodeMenu.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- expertMenuActionPerformed(((JCheckBoxMenuItem)e.getSource()).getState());\r
- }\r
- });\r
- help.setEnabled(false);\r
-\r
- return menu;\r
- }\r
-\r
- private JMenu createLookAndFeelMenu(){\r
- JMenu laf = GUIUtility.createJMenu(getMessages(), "lookandfeel");\r
- ButtonGroup bg = new ButtonGroup();\r
- UIManager.LookAndFeelInfo[] info = UIManager.getInstalledLookAndFeels();\r
- LookAndFeel lookfeel = UIManager.getLookAndFeel();\r
-\r
- ActionListener listener = new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- try{\r
- String command = e.getActionCommand();\r
- UIManager.setLookAndFeel(command);\r
- SwingUtilities.updateComponentTreeUI(StigmataFrame.this);\r
- } catch(Exception ee){\r
- }\r
- }\r
- };\r
- for(int i = 0; i < info.length; i++){\r
- JCheckBoxMenuItem item = new JCheckBoxMenuItem(info[i].getName());\r
- item.setActionCommand(info[i].getClassName());\r
- item.addActionListener(listener);\r
- bg.add(item);\r
- laf.add(item);\r
-\r
- if(info[i].getClassName().equals(lookfeel.getClass().getName())){\r
- item.setState(true);\r
- }\r
- }\r
-\r
- return laf;\r
- }\r
-\r
- public void setExpertMode(boolean expertmode){\r
- expertmodeMenu.setState(expertmode);\r
- }\r
-\r
- private void expertMenuActionPerformed(boolean status){\r
- control.setExpertMode(status);\r
- }\r
-\r
- private void showExceptionMessage(Throwable e){\r
- if(e instanceof BirthmarkElementClassNotFoundException){\r
- showClassNotFoundMessage((BirthmarkElementClassNotFoundException)e);\r
- }\r
- else if(e instanceof OutOfMemoryError){\r
- showOutOfMemoryError();\r
- }\r
- else{\r
- JTextArea area = new JTextArea(20, 60);\r
- StringWriter writer = new StringWriter();\r
- PrintWriter out = new PrintWriter(writer);\r
- e.printStackTrace(out);\r
- if(e instanceof BirthmarkExtractionFailedException){\r
- out.println("Causes:");\r
- for(Throwable t: ((BirthmarkExtractionFailedException)e).getCauses()){\r
- t.printStackTrace(out);\r
- }\r
- }\r
- out.close();\r
- area.setText(writer.toString());\r
- JPanel panel = new JPanel(new BorderLayout());\r
- panel.add(new JLabel("<html><body><p>" + getMessages().get("error.message.contactus") + "</p></body></html>"), BorderLayout.NORTH);\r
- panel.add(new JScrollPane(area), BorderLayout.CENTER);\r
-\r
- JOptionPane.showMessageDialog(\r
- this, panel, getMessages().get("error.dialog.title"),\r
- JOptionPane.WARNING_MESSAGE\r
- );\r
- }\r
- }\r
-\r
- private void showOutOfMemoryError(){\r
- StringBuffer sb = new StringBuffer();\r
- sb.append("<html><body><p>");\r
- sb.append(getMessages().get("error.message.outofmemory"));\r
- sb.append("</p></body></html>");\r
- JOptionPane.showMessageDialog(\r
- this, new String(sb), getMessages().get("error.dialog.title"),\r
- JOptionPane.WARNING_MESSAGE\r
- );\r
- }\r
-\r
- private void showClassNotFoundMessage(BirthmarkElementClassNotFoundException e){\r
- StringBuffer sb = new StringBuffer();\r
- sb.append("<html><body><p>");\r
- sb.append(getMessages().get("error.message.classpath"));\r
- sb.append("</p><ul>");\r
- for(String name: e.getClassNames()){\r
- sb.append("<li>").append(name).append("</li>");\r
- }\r
- sb.append("</ul></body></html>");\r
- JOptionPane.showMessageDialog(\r
- this, new String(sb), getMessages().get("error.dialog.title"),\r
- JOptionPane.WARNING_MESSAGE\r
- );\r
- }\r
-\r
- private void closeTabMenuActionPerformed(){\r
- int index = tabPane.getSelectedIndex();\r
- if(index == 0){\r
- JOptionPane.showMessageDialog(\r
- this, getMessages().get("cannotclosecontroltab.dialog.message"),\r
- getMessages().get("cannotclosecontroltab.dialog.title"),\r
- JOptionPane.ERROR_MESSAGE\r
- );\r
- }\r
- else{\r
- tabPane.removeTabAt(index);\r
- }\r
- }\r
-\r
- private int getNextCount(String label){\r
- Integer i = countmap.get(label);\r
- if(i == null){\r
- i = new Integer(0);\r
- }\r
- i = i + 1;\r
- countmap.put(label, i);\r
- return i;\r
- }\r
-\r
- private void setDefaultUI(){\r
- try{\r
- UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());\r
- } catch(Exception e){\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Image;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSeparator;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextArea;
+import javax.swing.LookAndFeel;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.WindowConstants;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.filechooser.FileFilter;
+
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkElementClassNotFoundException;
+import jp.sourceforge.stigmata.BirthmarkEngine;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.BirthmarkExtractionFailedException;
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.ComparisonPair;
+import jp.sourceforge.stigmata.ComparisonResultSet;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.Main;
+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.result.CertainPairComparisonResultSet;
+import jp.sourceforge.stigmata.ui.swing.actions.AboutAction;
+import jp.sourceforge.stigmata.ui.swing.actions.LicenseAction;
+import jp.sourceforge.stigmata.ui.swing.graph.SimilarityDistributionGraphPane;
+import jp.sourceforge.stigmata.ui.swing.mds.MDSGraphPanel;
+import jp.sourceforge.stigmata.ui.swing.tab.EditableTabbedPane;
+import jp.sourceforge.stigmata.utils.Utility;
+import jp.sourceforge.talisman.i18n.Messages;
+import jp.sourceforge.talisman.i18n.ResourceNotFoundException;
+
+import org.apache.commons.cli.ParseException;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class StigmataFrame extends JFrame{
+ private static final long serialVersionUID = 92345543665342134L;
+
+ private Messages messages;
+ private JTabbedPane tabPane;
+ private JMenuItem closeTabMenu;
+ private JMenuItem saveMenu;
+ private JCheckBoxMenuItem expertmodeMenu;
+ private Stigmata stigmata;
+ private BirthmarkEnvironment environment;
+ private ControlPane control;
+ private FileIOManager fileio;
+ private Map<String, Integer> countmap = new HashMap<String, Integer>();
+
+ public StigmataFrame(){
+ this(Stigmata.getInstance());
+ }
+
+ public StigmataFrame(Stigmata stigmata){
+ this(stigmata, BirthmarkEnvironment.getDefaultEnvironment());
+ }
+
+ public StigmataFrame(Stigmata stigmata, BirthmarkEnvironment environment){
+ this.stigmata = stigmata;
+ this.environment = environment;
+ this.fileio = new FileIOManager(this, environment);
+ try{
+ this.messages = new Messages("resources.messages");
+ } catch(ResourceNotFoundException e){
+ throw new InternalError(e.getMessage());
+ }
+ Image iconImage = GUIUtility.getImage(getMessages(), "stigmata.icon");
+ if(iconImage != null){
+ setIconImage(iconImage);
+ }
+
+ stigmata.addBirthmarkEngineListener(new BirthmarkEngineAdapter(){
+ @Override
+ public void operationDone(BirthmarkEngineEvent e){
+ showWarnings(e.getMessage());
+ }
+ });
+
+ initLayouts();
+ }
+
+ public Messages getMessages(){
+ return messages;
+ }
+
+ public boolean isNeedToSaveSettings(){
+ return saveMenu.isEnabled();
+ }
+
+ public void setNeedToSaveSettings(boolean flag){
+ saveMenu.setEnabled(flag);
+ }
+
+ public Stigmata getStigmata(){
+ return stigmata;
+ }
+
+ public BirthmarkEnvironment getEnvironment(){
+ return environment;
+ }
+
+ public File getCurrentDirectory(){
+ return fileio.getCurrentDirectory();
+ }
+
+ public void setCurrentDirectory(File file){
+ try{
+ fileio.setCurrentDirectory(file);
+ } catch(IllegalArgumentException e){
+ JOptionPane.showMessageDialog(
+ this,
+ getMessages().get("notdirectory.dialog.message", file.getName()),
+ getMessages().get("notdirectory.dialog.title"),
+ JOptionPane.ERROR_MESSAGE
+ );
+ } catch(Exception e){
+ showExceptionMessage(e);
+ }
+ }
+
+ public File[] openFiles(FileFilter[] filters, boolean multipleSelectable, boolean directorySelectable){
+ return fileio.openFiles(filters, multipleSelectable, directorySelectable);
+ }
+
+ /**
+ * Find file to open it.
+ */
+ public File getOpenFile(String[] exts, String desc){
+ return fileio.findFile(true, exts, desc);
+ }
+
+ /**
+ * Find file for storing data to it.
+ * Extension of found file is correct as selected extension.
+ */
+ public File getSaveFile(String[] exts, String desc){
+ return fileio.findFile(false, exts, desc);
+ }
+
+ public void addBirthmarkServiceListener(BirthmarkServiceListener listener){
+ control.addBirthmarkServiceListener(listener);
+ }
+
+ public void removeBirthmarkServiceListener(BirthmarkServiceListener listener){
+ control.removeBirthmarkServiceListener(listener);
+ }
+
+ public void compareDetails(BirthmarkSet target1, BirthmarkSet target2, BirthmarkContext context){
+ PairComparisonPane detail = new PairComparisonPane(
+ this, new ComparisonPair(target1, target2, context)
+ );
+ int compareDetail = getNextCount("compare_detail");
+
+ GUIUtility.addNewTab(getMessages(), "comparedetail", tabPane, detail,
+ new Object[] { new Integer(compareDetail), },
+ new Object[] {
+ Utility.array2String(target1.getBirthmarkTypes()),
+ target1.getName(),
+ target2.getName(),
+ }
+ );
+ tabPane.setSelectedIndex(tabPane.getTabCount() - 1);
+ }
+
+ public void compareRoundRobin(String[] targetX, String[] targetY,
+ BirthmarkContext context){
+ try{
+ BirthmarkEngine engine = getStigmata().createEngine(context.getEnvironment());
+ ExtractionResultSet ers = engine.extract(targetX, targetY, context);
+
+ RoundRobinComparisonResultPane compare = new RoundRobinComparisonResultPane(this, ers);
+ int compareCount = getNextCount("compare");
+ GUIUtility.addNewTab(
+ getMessages(), "compare", tabPane, compare,
+ new Object[] { new Integer(compareCount), },
+ new Object[] {
+ Utility.array2String(context.getBirthmarkTypes()),
+ Utility.array2String(targetX),
+ Utility.array2String(targetY),
+ }
+ );
+ tabPane.setSelectedIndex(tabPane.getTabCount() - 1);
+ } catch(Throwable e){
+ showExceptionMessage(e);
+ }
+ }
+
+ public void compareRoundRobinFilter(String[] targetX, String[] targetY,
+ BirthmarkContext context){
+ try{
+ BirthmarkEngine engine = getStigmata().createEngine(context.getEnvironment());
+
+ ExtractionResultSet ers = engine.extract(targetX, targetY, context);
+ ComparisonResultSet resultset = engine.compare(ers);
+ if(context.hasFilter()){
+ resultset = engine.filter(resultset);
+ }
+ int compareCount = getNextCount("compare");
+ GUIUtility.addNewTab(
+ getMessages(), "compare", tabPane, new PairComparisonResultSetPane(this, resultset),
+ new Object[] { new Integer(compareCount), },
+ new Object[] {
+ Utility.array2String(context.getBirthmarkTypes()),
+ Utility.array2String(targetX),
+ Utility.array2String(targetY),
+ }
+ );
+ tabPane.setSelectedIndex(tabPane.getTabCount() - 1);
+ } catch(Throwable e){
+ showExceptionMessage(e);
+ }
+ }
+
+ public void compareGuessedPair(String[] targetX, String[] targetY, BirthmarkContext context){
+ try{
+ BirthmarkEngine engine = getStigmata().createEngine(context.getEnvironment());
+ ExtractionResultSet extraction = engine.extract(targetX, targetY, context);
+ int comparePair = getNextCount("compare_pair");
+
+ ComparisonResultSet resultset = new CertainPairComparisonResultSet(extraction);
+ GUIUtility.addNewTab(
+ getMessages(), "comparepair", tabPane,
+ new PairComparisonResultSetPane(this, resultset),
+ new Object[] { new Integer(comparePair), },
+ new Object[] {
+ Utility.array2String(context.getBirthmarkTypes()),
+ Utility.array2String(targetX),
+ Utility.array2String(targetY),
+ }
+ );
+ tabPane.setSelectedIndex(tabPane.getTabCount() - 1);
+ }catch(Throwable e){
+ showExceptionMessage(e);
+ }
+ }
+
+ public void compareSpecifiedPair(String[] targetX, String[] targetY, BirthmarkContext context){
+ File file = getOpenFile(
+ getMessages().getArray("comparemapping.extension"),
+ getMessages().get("comparemapping.description")
+ );
+
+ if(file != null){
+ Map<String, String> mapping = constructMapping(file);
+
+ try{
+ BirthmarkEngine engine = getStigmata().createEngine(context.getEnvironment());
+ context.setNameMappings(mapping);
+ ComparisonResultSet crs = engine.compare(targetX, targetY, context);
+ int comparePair = getNextCount("compare_pair");
+
+ GUIUtility.addNewTab(
+ getMessages(), "comparepair", tabPane,
+ new PairComparisonResultSetPane(this, crs),
+ new Object[] { new Integer(comparePair), },
+ new Object[] {
+ Utility.array2String(context.getBirthmarkTypes()),
+ Utility.array2String(targetX),
+ Utility.array2String(targetY),
+ }
+ );
+ tabPane.setSelectedIndex(tabPane.getTabCount() - 1);
+ }catch(Exception e){
+ showExceptionMessage(e);
+ }
+ }
+ }
+
+ public void showComparisonResultSet(ComparisonResultSet resultset){
+ int comparePair = getNextCount("compare_pair");
+ GUIUtility.addNewTab(
+ getMessages(), "comparisonresultset", tabPane,
+ new PairComparisonResultSetPane(this, resultset),
+ new Object[] { new Integer(comparePair), }, null
+ );
+ tabPane.setSelectedIndex(tabPane.getTabCount() - 1);
+ }
+
+ public void showMDSGraph(BirthmarkSet[] set, BirthmarkContext context){
+ try{
+ MDSGraphPanel panel = new MDSGraphPanel(this, set, context);
+ int mappingGraphCount = getNextCount("mds_graph");
+ GUIUtility.addNewTab(
+ getMessages(), "mappinggraph", tabPane, panel,
+ new Object[] { new Integer(mappingGraphCount), }, null
+ );
+ tabPane.setSelectedIndex(tabPane.getTabCount() - 1);
+ } catch(Exception e){
+ showExceptionMessage(e);
+ }
+ }
+
+ public void showSimilarityDistributionGraph(Map<Integer, Integer> distributions){
+ SimilarityDistributionGraphPane graph = new SimilarityDistributionGraphPane(this, distributions);
+
+ int similarityGraphCount = getNextCount("similarity_graph");
+ GUIUtility.addNewTab(
+ getMessages(), "similaritygraph", tabPane, graph,
+ new Object[] { new Integer(similarityGraphCount), }, null
+ );
+ tabPane.setSelectedIndex(tabPane.getTabCount() - 1);
+ }
+
+ public void compareExtractionResult(ExtractionResultSet ers){
+ RoundRobinComparisonResultPane compare = new RoundRobinComparisonResultPane(this, ers);
+ int compareCount = getNextCount("compare");
+ GUIUtility.addNewTab(
+ getMessages(), "compare", tabPane, compare,
+ new Object[] { new Integer(compareCount), },
+ new Object[] {
+ Utility.array2String(ers.getBirthmarkTypes()),
+ Utility.array2String(new String[0]),
+ Utility.array2String(new String[0]),
+ }
+ );
+ tabPane.setSelectedIndex(tabPane.getTabCount() - 1);
+ }
+
+ public void showExtractionResult(ExtractionResultSet ers){
+ int extractCount = getNextCount("extract");
+ BirthmarkExtractionResultPane viewer = new BirthmarkExtractionResultPane(this, ers);
+ GUIUtility.addNewTab(
+ getMessages(), "extract", tabPane, viewer,
+ new Object[] { new Integer(extractCount), },
+ new Object[] { Utility.array2String(ers.getBirthmarkTypes()), }
+ );
+ tabPane.setSelectedIndex(tabPane.getTabCount() - 1);
+
+ }
+
+ public void extract(String[] targetX, String[] targetY, BirthmarkContext context){
+ try{
+ BirthmarkEngine engine = getStigmata().createEngine(context.getEnvironment());
+ ExtractionResultSet ers = engine.extract(targetX, targetY, context);
+ showExtractionResult(ers);
+ }catch(Throwable e){
+ showExceptionMessage(e);
+ }
+ }
+
+ /**
+ * csv file to Map.
+ */
+ public Map<String, String> constructMapping(File file){
+ Map<String, String> mapping = new HashMap<String, String>();
+ BufferedReader in = null;
+ try{
+ in = new BufferedReader(new FileReader(file));
+ String line;
+ while((line = in.readLine()) != null){
+ String[] tokens = line.split(", *");
+ if(tokens.length >= 2){
+ mapping.put(tokens[0], tokens[1]);
+ }
+ }
+
+ }catch(Exception e){
+ showExceptionMessage(e);
+ }finally{
+ if(in != null){
+ try{
+ in.close();
+ }catch(IOException e){
+ }
+ }
+ }
+ return mapping;
+ }
+
+ private void reloadSettings(String[] args){
+ try{
+ setVisible(false);
+ dispose();
+ new Main(args);
+ } catch(ParseException e){
+ }
+ }
+
+ private void clearSettings(){
+ Utility.deleteDirectory(new File(BirthmarkEnvironment.getStigmataHome()));
+ reloadSettings(new String[] { "--reset-config", "--mode", "gui", });
+ }
+
+ private void initLayouts(){
+ setTitle(getMessages().get("stigmata.frame.title"));
+ initComponents();
+
+ GUIUtility.addNewTab(getMessages(), "control", tabPane, control = new ControlPane(this), null, null);
+ control.inititalize();
+ tabPane.setSelectedIndex(tabPane.getTabCount() - 1);
+
+ setNeedToSaveSettings(false);
+ setSize(900, 600);
+ }
+
+ private void showWarnings(WarningMessages warnings){
+ if(warnings.getWarningCount() > 0){
+ StringBuilder sb = new StringBuilder("<html><body><dl>");
+ for(Iterator<Exception> i = warnings.exceptions(); i.hasNext(); ){
+ Exception e = i.next();
+ sb.append("<dt>").append(e.getClass().getName()).append("</dt>");
+ sb.append("<dd>").append(e.getMessage()).append("</dd>");
+ sb.append("<dd>").append(warnings.getString(e)).append("</dd>");
+ }
+ sb.append("</dl></body></html>");
+
+ JOptionPane.showMessageDialog(
+ this, new String(sb), getMessages().get("warning.dialog.title"),
+ JOptionPane.WARNING_MESSAGE
+ );
+ }
+ }
+
+ private void initComponents(){
+ setDefaultUI();
+ JMenuBar menubar = new JMenuBar();
+ menubar.add(createFileMenu());
+ menubar.add(createHelpMenu());
+
+ setJMenuBar(menubar);
+
+ tabPane = new EditableTabbedPane(this);
+ add(tabPane, BorderLayout.CENTER);
+
+ tabPane.addChangeListener(new ChangeListener(){
+ public void stateChanged(ChangeEvent arg0){
+ String title = tabPane.getTitleAt(tabPane.getSelectedIndex());
+ closeTabMenu.setEnabled(!title.equals(getMessages().get("control.tab.label")));
+ }
+ });
+ addWindowListener(new WindowAdapter(){
+ @Override
+ public void windowClosing(WindowEvent e){
+ boolean closeFlag = true;
+ if(isNeedToSaveSettings()){
+ int returnValue = JOptionPane.showConfirmDialog(
+ StigmataFrame.this,
+ getMessages().get("needtosave.settings.message"),
+ getMessages().get("needtosave.settings.title"),
+ JOptionPane.YES_NO_CANCEL_OPTION,
+ JOptionPane.WARNING_MESSAGE
+ );
+ closeFlag = returnValue != JOptionPane.CANCEL_OPTION;
+ if(returnValue == JOptionPane.YES_OPTION){
+ control.saveSettings(new File(BirthmarkEnvironment.getStigmataHome(), "stigmata.xml"));
+ }
+ }
+ if(closeFlag){
+ setVisible(false);
+ dispose();
+ }
+ }
+ });
+ setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+ }
+
+ private JMenu createFileMenu(){
+ JMenu fileMenu = GUIUtility.createJMenu(getMessages(), "fileMenu");
+ JMenuItem newFrameMenu = GUIUtility.createJMenuItem(getMessages(), "newframe");
+ JMenuItem saveMenu = GUIUtility.createJMenuItem(getMessages(), "savesetting");
+ JMenuItem exportMenu = GUIUtility.createJMenuItem(getMessages(), "exportsetting");
+ JMenuItem clearMenu = GUIUtility.createJMenuItem(getMessages(), "clearsetting");
+ JMenuItem refreshMenu = GUIUtility.createJMenuItem(getMessages(), "refreshsetting");
+ JMenuItem closeTabMenu = GUIUtility.createJMenuItem(getMessages(), "closetab");
+ JMenuItem closeMenu = GUIUtility.createJMenuItem(getMessages(), "closeframe");
+ JMenuItem exitMenu = GUIUtility.createJMenuItem(getMessages(), "exit");
+ this.closeTabMenu = closeTabMenu;
+ this.saveMenu = saveMenu;
+ saveMenu.setEnabled(false);
+
+ fileMenu.add(newFrameMenu);
+ fileMenu.add(new JSeparator());
+ fileMenu.add(saveMenu);
+ fileMenu.add(exportMenu);
+ fileMenu.add(refreshMenu);
+ fileMenu.add(clearMenu);
+ fileMenu.add(new JSeparator());
+ fileMenu.add(closeTabMenu);
+ fileMenu.add(closeMenu);
+ fileMenu.add(new JSeparator());
+ fileMenu.add(exitMenu);
+
+ newFrameMenu.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent evt){
+ StigmataFrame frame = new StigmataFrame(stigmata, environment);
+ frame.setVisible(true);
+ }
+ });
+ saveMenu.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ control.saveSettings(new File(BirthmarkEnvironment.getStigmataHome(), "stigmata.xml"));
+ setNeedToSaveSettings(false);
+ }
+ });
+
+ exportMenu.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ control.exportSettings();
+ }
+ });
+
+ closeTabMenu.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent evt){
+ closeTabMenuActionPerformed();
+ }
+ });
+
+ clearMenu.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent evt){
+ clearSettings();
+ }
+ });
+ refreshMenu.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent evt){
+ reloadSettings(new String[] { "--mode", "gui", });
+ }
+ });
+
+ closeMenu.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent evt){
+ setVisible(false);
+ dispose();
+ }
+ });
+
+ exitMenu.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent evt){
+ System.exit(0);
+ }
+ });
+ return fileMenu;
+ }
+
+ private JMenu createHelpMenu(){
+ JMenu menu = GUIUtility.createJMenu(getMessages(), "helpmenu");
+ JMenuItem about = GUIUtility.createJMenuItem(getMessages(), "about", new AboutAction(this));
+ JMenuItem license = GUIUtility.createJMenuItem(getMessages(), "license", new LicenseAction(this));
+ JMenuItem help = GUIUtility.createJMenuItem(getMessages(), "helpmenu");
+ expertmodeMenu = GUIUtility.createJCheckBoxMenuItem(getMessages(), "expertmenu");
+
+ menu.add(about);
+ menu.add(license);
+ menu.add(help);
+ menu.add(new JSeparator());
+ menu.add(createLookAndFeelMenu());
+ menu.add(new JSeparator());
+ menu.add(expertmodeMenu);
+
+ expertmodeMenu.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ expertMenuActionPerformed(((JCheckBoxMenuItem)e.getSource()).getState());
+ }
+ });
+ help.setEnabled(false);
+
+ return menu;
+ }
+
+ private JMenu createLookAndFeelMenu(){
+ JMenu laf = GUIUtility.createJMenu(getMessages(), "lookandfeel");
+ ButtonGroup bg = new ButtonGroup();
+ UIManager.LookAndFeelInfo[] info = UIManager.getInstalledLookAndFeels();
+ LookAndFeel lookfeel = UIManager.getLookAndFeel();
+
+ ActionListener listener = new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ try{
+ String command = e.getActionCommand();
+ UIManager.setLookAndFeel(command);
+ SwingUtilities.updateComponentTreeUI(StigmataFrame.this);
+ } catch(Exception ee){
+ }
+ }
+ };
+ for(int i = 0; i < info.length; i++){
+ JCheckBoxMenuItem item = new JCheckBoxMenuItem(info[i].getName());
+ item.setActionCommand(info[i].getClassName());
+ item.addActionListener(listener);
+ bg.add(item);
+ laf.add(item);
+
+ if(info[i].getClassName().equals(lookfeel.getClass().getName())){
+ item.setState(true);
+ }
+ }
+
+ return laf;
+ }
+
+ public void setExpertMode(boolean expertmode){
+ expertmodeMenu.setState(expertmode);
+ }
+
+ private void expertMenuActionPerformed(boolean status){
+ control.setExpertMode(status);
+ }
+
+ private void showExceptionMessage(Throwable e){
+ if(e instanceof BirthmarkElementClassNotFoundException){
+ showClassNotFoundMessage((BirthmarkElementClassNotFoundException)e);
+ }
+ else if(e instanceof OutOfMemoryError){
+ showOutOfMemoryError();
+ }
+ else{
+ JTextArea area = new JTextArea(20, 60);
+ StringWriter writer = new StringWriter();
+ PrintWriter out = new PrintWriter(writer);
+ e.printStackTrace(out);
+ if(e instanceof BirthmarkExtractionFailedException){
+ out.println("Causes:");
+ for(Throwable t: ((BirthmarkExtractionFailedException)e).getCauses()){
+ t.printStackTrace(out);
+ }
+ }
+ out.close();
+ area.setText(writer.toString());
+ JPanel panel = new JPanel(new BorderLayout());
+ panel.add(new JLabel("<html><body><p>" + getMessages().get("error.message.contactus") + "</p></body></html>"), BorderLayout.NORTH);
+ panel.add(new JScrollPane(area), BorderLayout.CENTER);
+
+ JOptionPane.showMessageDialog(
+ this, panel, getMessages().get("error.dialog.title"),
+ JOptionPane.WARNING_MESSAGE
+ );
+ }
+ }
+
+ private void showOutOfMemoryError(){
+ StringBuffer sb = new StringBuffer();
+ sb.append("<html><body><p>");
+ sb.append(getMessages().get("error.message.outofmemory"));
+ sb.append("</p></body></html>");
+ JOptionPane.showMessageDialog(
+ this, new String(sb), getMessages().get("error.dialog.title"),
+ JOptionPane.WARNING_MESSAGE
+ );
+ }
+
+ private void showClassNotFoundMessage(BirthmarkElementClassNotFoundException e){
+ StringBuffer sb = new StringBuffer();
+ sb.append("<html><body><p>");
+ sb.append(getMessages().get("error.message.classpath"));
+ sb.append("</p><ul>");
+ for(String name: e.getClassNames()){
+ sb.append("<li>").append(name).append("</li>");
+ }
+ sb.append("</ul></body></html>");
+ JOptionPane.showMessageDialog(
+ this, new String(sb), getMessages().get("error.dialog.title"),
+ JOptionPane.WARNING_MESSAGE
+ );
+ }
+
+ private void closeTabMenuActionPerformed(){
+ int index = tabPane.getSelectedIndex();
+ if(index == 0){
+ JOptionPane.showMessageDialog(
+ this, getMessages().get("cannotclosecontroltab.dialog.message"),
+ getMessages().get("cannotclosecontroltab.dialog.title"),
+ JOptionPane.ERROR_MESSAGE
+ );
+ }
+ else{
+ tabPane.removeTabAt(index);
+ }
+ }
+
+ private int getNextCount(String label){
+ Integer i = countmap.get(label);
+ if(i == null){
+ i = new Integer(0);
+ }
+ i = i + 1;
+ countmap.put(label, i);
+ return i;
+ }
+
+ private void setDefaultUI(){
+ try{
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch(Exception e){
+ }
+ }
+}
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.datatransfer.DataFlavor;\r
-import java.awt.datatransfer.Transferable;\r
-import java.awt.datatransfer.UnsupportedFlavorException;\r
-import java.awt.dnd.DnDConstants;\r
-import java.awt.dnd.DragGestureEvent;\r
-import java.awt.dnd.DragGestureListener;\r
-import java.awt.dnd.DragSource;\r
-import java.awt.dnd.DragSourceAdapter;\r
-import java.awt.dnd.DragSourceDropEvent;\r
-import java.awt.dnd.DragSourceListener;\r
-import java.awt.dnd.DropTarget;\r
-import java.awt.dnd.DropTargetDragEvent;\r
-import java.awt.dnd.DropTargetDropEvent;\r
-import java.awt.dnd.DropTargetEvent;\r
-import java.awt.event.ActionEvent;\r
-import java.io.File;\r
-import java.io.IOException;\r
-import java.text.MessageFormat;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import javax.swing.AbstractAction;\r
-import javax.swing.Action;\r
-import javax.swing.Box;\r
-import javax.swing.DefaultListModel;\r
-import javax.swing.JButton;\r
-import javax.swing.JComponent;\r
-import javax.swing.JList;\r
-import javax.swing.JOptionPane;\r
-import javax.swing.JPanel;\r
-import javax.swing.JPopupMenu;\r
-import javax.swing.JScrollPane;\r
-import javax.swing.event.ListSelectionEvent;\r
-import javax.swing.event.ListSelectionListener;\r
-import javax.swing.filechooser.FileFilter;\r
-\r
-import jp.naist.se.stigmata.ui.swing.actions.PopupShowAction;\r
-import jp.sourceforge.talisman.i18n.Messages;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class TargetSelectionPane extends JPanel{\r
- private static final long serialVersionUID = 3209435745432235432L;\r
-\r
- private StigmataFrame stigmata;\r
- private FileFilter[] filters;\r
- private List<String> extensions = new ArrayList<String>();\r
- private String description;\r
- private DefaultListModel model = new DefaultListModel();\r
- private List<DataChangeListener> listeners = new ArrayList<DataChangeListener>();\r
- private boolean directorySelectable = false;\r
- private boolean multipleSelectable = true;\r
- private JList list;\r
- private Action addAction;\r
- private Action removeAction;\r
-\r
- public TargetSelectionPane(StigmataFrame stigmata){\r
- this.stigmata = stigmata;\r
- initComponents();\r
- list.setModel(model);\r
-\r
- DropTarget dropTarget = new TargetSelectionDropTarget();\r
- list.setDropTarget(dropTarget);\r
- DragSource dragSource = DragSource.getDefaultDragSource();\r
- dragSource.createDefaultDragGestureRecognizer(\r
- list, DnDConstants.ACTION_MOVE,\r
- new TargetDragGestureListener(list, model)\r
- );\r
- }\r
-\r
- public void addDataChangeListener(DataChangeListener listener){\r
- listeners.add(listener);\r
- }\r
-\r
- public void addTargetExtension(String ext){\r
- if(filters != null){\r
- filters = null;\r
- }\r
- extensions.add(ext);\r
- }\r
-\r
- public void addTargetExtensions(String[] exts){\r
- if(filters != null){\r
- filters = null;\r
- }\r
- for(String ext: exts){\r
- extensions.add(ext);\r
- }\r
- }\r
-\r
- public void addValue(String value){\r
- model.addElement(value);\r
- fireEvent();\r
- }\r
-\r
- public void addValues(String[] values){\r
- for(String value: values){\r
- addValue(value);\r
- }\r
- }\r
-\r
- public String getDescription(){\r
- return description;\r
- }\r
-\r
- public synchronized String[] getExtensions(){\r
- return extensions.toArray(new String[extensions.size()]);\r
- }\r
-\r
- public FileFilter[] getFileFilters(){\r
- if(filters == null){\r
- String[] exts = getExtensions();\r
- filters = new FileFilter[exts.length];\r
- for(int i = 0; i < exts.length; i++){\r
- filters[i] = new ExtensionFilter(\r
- exts[i], MessageFormat.format(getSelectDescription(), exts[i])\r
- );\r
- }\r
- ;\r
- }\r
- return filters;\r
- }\r
-\r
- public String getSelectDescription(){\r
- return description;\r
- }\r
-\r
- public String[] getSelectedValues(){\r
- int[] indeces = list.getSelectedIndices();\r
- String[] strings = new String[indeces.length];\r
- for(int i = 0; i < strings.length; i++){\r
- strings[i] = (String)model.getElementAt(indeces[i]);\r
- }\r
- return strings;\r
- }\r
-\r
- public String[] getValues(){\r
- String[] strings = new String[model.getSize()];\r
- for(int i = 0; i < strings.length; i++){\r
- strings[i] = (String)model.getElementAt(i);\r
- }\r
- return strings;\r
- }\r
-\r
- public boolean isDirectorySelectable(){\r
- return directorySelectable;\r
- }\r
-\r
- public boolean isMultipleSelectable(){\r
- return multipleSelectable;\r
- }\r
-\r
- public void removeAllElements(){\r
- model.removeAllElements();\r
- fireEvent();\r
- }\r
-\r
- public void setDescription(String description){\r
- this.description = description;\r
- }\r
-\r
- public void setDirectorySelectable(boolean flag){\r
- directorySelectable = flag;\r
- }\r
-\r
- @Override\r
- public void setEnabled(boolean flag){\r
- super.setEnabled(flag);\r
- addAction.setEnabled(flag);\r
- removeAction.setEnabled(false);\r
- list.setEnabled(flag);\r
- }\r
-\r
- public void setFileFilter(FileFilter filter){\r
- setFileFilters(new FileFilter[] { filter, });\r
- }\r
-\r
- public void setFileFilters(FileFilter[] filters){\r
- this.filters = filters;\r
- }\r
-\r
- public void setMultipleSelectable(boolean flag){\r
- multipleSelectable = flag;\r
- }\r
-\r
- public void setSelectDescription(String description){\r
- this.description = description;\r
- }\r
-\r
- private void addButtonActionPerformed(ActionEvent evt){\r
- File[] files = stigmata.openFiles(getFileFilters(), true, true);\r
- for(File file: files){\r
- addValue(file.getPath());\r
- }\r
- }\r
-\r
- private void fireEvent(){\r
- for(int i = listeners.size() - 1; i >= 0; i--){\r
- DataChangeListener listener = listeners.get(i);\r
- listener.valueChanged(model);\r
- }\r
- }\r
-\r
- private void initComponents(){\r
- final Messages messages = stigmata.getMessages();\r
- JScrollPane scroll = new JScrollPane();\r
- JComponent south = Box.createHorizontalBox();\r
- list = new JList();\r
-\r
- addAction = new AbstractAction(){\r
- private static final long serialVersionUID = 1406018312294328837L;\r
-\r
- public void actionPerformed(ActionEvent e){\r
- addButtonActionPerformed(e);\r
- }\r
- };\r
- removeAction = new AbstractAction(){\r
- private static final long serialVersionUID = 7910621850068803554L;\r
-\r
- public void actionPerformed(ActionEvent e){\r
- removeButtonActionPerformed(e);\r
- }\r
- };\r
-\r
- JButton addButton = GUIUtility.createButton(messages, "addpackage", addAction);\r
- JButton removeButton = GUIUtility.createButton(messages, "removepackage", removeAction);\r
- removeAction.setEnabled(false);\r
-\r
- final JPopupMenu popup = new JPopupMenu();\r
- popup.add(GUIUtility.createJMenuItem(messages, "addpackage", addAction));\r
- popup.add(GUIUtility.createJMenuItem(messages, "removepackage", removeAction));\r
-\r
- setLayout(new BorderLayout());\r
-\r
- scroll.setViewportView(list);\r
- south.add(Box.createHorizontalGlue());\r
- south.add(addButton);\r
- south.add(Box.createHorizontalGlue());\r
- south.add(removeButton);\r
- south.add(Box.createHorizontalGlue());\r
-\r
- list.addListSelectionListener(new ListSelectionListener(){\r
- public void valueChanged(ListSelectionEvent evt){\r
- listValueChanged(evt);\r
- }\r
- });\r
-\r
- list.addMouseListener(new PopupShowAction(popup));\r
-\r
- add(scroll, java.awt.BorderLayout.CENTER);\r
- add(south, BorderLayout.SOUTH);\r
- }\r
-\r
- private void listValueChanged(ListSelectionEvent evt){\r
- int[] indeces = list.getSelectedIndices();\r
- removeAction.setEnabled(isEnabled() && indeces != null);\r
- }\r
-\r
- private void removeButtonActionPerformed(ActionEvent evt){\r
- int[] indeces = list.getSelectedIndices();\r
- if(indeces != null && indeces.length >= 1){\r
- for(int i = indeces.length - 1; i >= 0; i--){\r
- model.removeElementAt(indeces[i]);\r
- fireEvent();\r
- }\r
- }\r
- removeAction.setEnabled(false);\r
- }\r
-\r
- private class DataRemoveWhenDragSuccessfulAdapter extends DragSourceAdapter{\r
- private DefaultListModel model;\r
- private int[] indeces;\r
-\r
- public DataRemoveWhenDragSuccessfulAdapter(DefaultListModel model,\r
- int[] indeces){\r
- this.model = model;\r
- this.indeces = indeces;\r
- }\r
-\r
- @Override\r
- public void dragDropEnd(DragSourceDropEvent dsde){\r
- for(int i = indeces.length - 1; i >= 0; i--){\r
- model.removeElementAt(indeces[i]);\r
- }\r
- fireEvent();\r
- super.dragDropEnd(dsde);\r
- }\r
- };\r
-\r
- private class TargetDragGestureListener implements DragGestureListener{\r
- private JList list;\r
-\r
- public TargetDragGestureListener(JList list, DefaultListModel model){\r
- this.list = list;\r
- }\r
-\r
- public void dragGestureRecognized(DragGestureEvent dge){\r
- int[] indeces = list.getSelectedIndices();\r
- if(indeces.length > 0){\r
- String[] strings = new String[indeces.length];\r
- for(int i = 0; i < strings.length; i++){\r
- strings[i] = (String)model.getElementAt(indeces[i]);\r
- }\r
- Transferable transferable = new TargetTransferable(strings);\r
- DragSourceListener listener = new DataRemoveWhenDragSuccessfulAdapter(\r
- model, indeces);\r
-\r
- dge.startDrag(DragSource.DefaultMoveDrop, transferable,\r
- listener);\r
- }\r
- }\r
- };\r
-\r
- @SuppressWarnings("unchecked")\r
- private class TargetSelectionDropTarget extends DropTarget{\r
- private static final long serialVersionUID = 3204457621345L;\r
-\r
- @Override\r
- public void dragEnter(DropTargetDragEvent arg0){\r
- }\r
-\r
- @Override\r
- public void dragExit(DropTargetEvent arg0){\r
- }\r
-\r
- @Override\r
- public void dragOver(DropTargetDragEvent arg0){\r
- }\r
-\r
- @Override\r
- public void drop(DropTargetDropEvent dtde){\r
- dtde.acceptDrop(DnDConstants.ACTION_REFERENCE);\r
- Transferable trans = dtde.getTransferable();\r
- try{\r
- if(trans.isDataFlavorSupported(DataFlavor.javaFileListFlavor)){\r
- List list = (List)trans\r
- .getTransferData(DataFlavor.javaFileListFlavor);\r
- List<String> errorList = checkAndAddDroppedFile(list);\r
- if(errorList.size() > 0){\r
- showError(errorList);\r
- }\r
- }\r
- } catch(UnsupportedFlavorException e){\r
- } catch(IOException e){\r
- }\r
- }\r
-\r
- @Override\r
- public void dropActionChanged(DropTargetDragEvent arg0){\r
- }\r
-\r
- private List<String> checkAndAddDroppedFile(List list){\r
- List<String> errorList = new ArrayList<String>();\r
-\r
- FileFilter[] filters = getFileFilters();\r
- for(int i = 0; i < list.size(); i++){\r
- File file = (File)list.get(i);\r
- boolean neverAddedFlag = true;\r
- for(FileFilter filter: filters){\r
- if(filter.accept(file)){\r
- addValue(file.getPath());\r
- neverAddedFlag = false;\r
- }\r
- }\r
- if(neverAddedFlag){\r
- errorList.add(file.getName());\r
- }\r
- }\r
- return errorList;\r
- }\r
-\r
- private void showError(List<String> errorList){\r
- StringBuilder builder = new StringBuilder("<html><body>");\r
- builder.append(stigmata.getMessages().get("unsupportedfiletype.dialog.message"));\r
- builder.append("<ul>");\r
- for(int i = 0; i < errorList.size(); i++){\r
- builder.append("<li>").append(errorList.get(i)).append("</li>");\r
- }\r
- builder.append("</ul></body></html>");\r
- JOptionPane.showMessageDialog(\r
- TargetSelectionPane.this, new String(builder),\r
- stigmata.getMessages().get("unsupportedfiletype.dialog.title"),\r
- JOptionPane.ERROR_MESSAGE\r
- );\r
- }\r
- };\r
-\r
- private class TargetTransferable implements Transferable{\r
- private String[] strings;\r
-\r
- public TargetTransferable(String[] strings){\r
- this.strings = strings;\r
- }\r
-\r
- public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException,\r
- IOException{\r
- List<File> list = new ArrayList<File>();\r
- for(int i = 0; i < strings.length; i++){\r
- list.add(new File(strings[i]));\r
- }\r
- return list;\r
- }\r
-\r
- public DataFlavor[] getTransferDataFlavors(){\r
- return new DataFlavor[] { DataFlavor.javaFileListFlavor, };\r
- }\r
-\r
- public boolean isDataFlavorSupported(DataFlavor flavor){\r
- return flavor.equals(DataFlavor.javaFileListFlavor);\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DragGestureEvent;
+import java.awt.dnd.DragGestureListener;
+import java.awt.dnd.DragSource;
+import java.awt.dnd.DragSourceAdapter;
+import java.awt.dnd.DragSourceDropEvent;
+import java.awt.dnd.DragSourceListener;
+import java.awt.dnd.DropTarget;
+import java.awt.dnd.DropTargetDragEvent;
+import java.awt.dnd.DropTargetDropEvent;
+import java.awt.dnd.DropTargetEvent;
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.io.IOException;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.Box;
+import javax.swing.DefaultListModel;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JList;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.filechooser.FileFilter;
+
+import jp.sourceforge.stigmata.ui.swing.actions.PopupShowAction;
+import jp.sourceforge.talisman.i18n.Messages;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class TargetSelectionPane extends JPanel{
+ private static final long serialVersionUID = 3209435745432235432L;
+
+ private StigmataFrame stigmata;
+ private FileFilter[] filters;
+ private List<String> extensions = new ArrayList<String>();
+ private String description;
+ private DefaultListModel model = new DefaultListModel();
+ private List<DataChangeListener> listeners = new ArrayList<DataChangeListener>();
+ private boolean directorySelectable = false;
+ private boolean multipleSelectable = true;
+ private JList list;
+ private Action addAction;
+ private Action removeAction;
+
+ public TargetSelectionPane(StigmataFrame stigmata){
+ this.stigmata = stigmata;
+ initComponents();
+ list.setModel(model);
+
+ DropTarget dropTarget = new TargetSelectionDropTarget();
+ list.setDropTarget(dropTarget);
+ DragSource dragSource = DragSource.getDefaultDragSource();
+ dragSource.createDefaultDragGestureRecognizer(
+ list, DnDConstants.ACTION_MOVE,
+ new TargetDragGestureListener(list, model)
+ );
+ }
+
+ public void addDataChangeListener(DataChangeListener listener){
+ listeners.add(listener);
+ }
+
+ public void addTargetExtension(String ext){
+ if(filters != null){
+ filters = null;
+ }
+ extensions.add(ext);
+ }
+
+ public void addTargetExtensions(String[] exts){
+ if(filters != null){
+ filters = null;
+ }
+ for(String ext: exts){
+ extensions.add(ext);
+ }
+ }
+
+ public void addValue(String value){
+ model.addElement(value);
+ fireEvent();
+ }
+
+ public void addValues(String[] values){
+ for(String value: values){
+ addValue(value);
+ }
+ }
+
+ public String getDescription(){
+ return description;
+ }
+
+ public synchronized String[] getExtensions(){
+ return extensions.toArray(new String[extensions.size()]);
+ }
+
+ public FileFilter[] getFileFilters(){
+ if(filters == null){
+ String[] exts = getExtensions();
+ filters = new FileFilter[exts.length];
+ for(int i = 0; i < exts.length; i++){
+ filters[i] = new ExtensionFilter(
+ exts[i], MessageFormat.format(getSelectDescription(), exts[i])
+ );
+ }
+ ;
+ }
+ return filters;
+ }
+
+ public String getSelectDescription(){
+ return description;
+ }
+
+ public String[] getSelectedValues(){
+ int[] indeces = list.getSelectedIndices();
+ String[] strings = new String[indeces.length];
+ for(int i = 0; i < strings.length; i++){
+ strings[i] = (String)model.getElementAt(indeces[i]);
+ }
+ return strings;
+ }
+
+ public String[] getValues(){
+ String[] strings = new String[model.getSize()];
+ for(int i = 0; i < strings.length; i++){
+ strings[i] = (String)model.getElementAt(i);
+ }
+ return strings;
+ }
+
+ public boolean isDirectorySelectable(){
+ return directorySelectable;
+ }
+
+ public boolean isMultipleSelectable(){
+ return multipleSelectable;
+ }
+
+ public void removeAllElements(){
+ model.removeAllElements();
+ fireEvent();
+ }
+
+ public void setDescription(String description){
+ this.description = description;
+ }
+
+ public void setDirectorySelectable(boolean flag){
+ directorySelectable = flag;
+ }
+
+ @Override
+ public void setEnabled(boolean flag){
+ super.setEnabled(flag);
+ addAction.setEnabled(flag);
+ removeAction.setEnabled(false);
+ list.setEnabled(flag);
+ }
+
+ public void setFileFilter(FileFilter filter){
+ setFileFilters(new FileFilter[] { filter, });
+ }
+
+ public void setFileFilters(FileFilter[] filters){
+ this.filters = filters;
+ }
+
+ public void setMultipleSelectable(boolean flag){
+ multipleSelectable = flag;
+ }
+
+ public void setSelectDescription(String description){
+ this.description = description;
+ }
+
+ private void addButtonActionPerformed(ActionEvent evt){
+ File[] files = stigmata.openFiles(getFileFilters(), true, true);
+ for(File file: files){
+ addValue(file.getPath());
+ }
+ }
+
+ private void fireEvent(){
+ for(int i = listeners.size() - 1; i >= 0; i--){
+ DataChangeListener listener = listeners.get(i);
+ listener.valueChanged(model);
+ }
+ }
+
+ private void initComponents(){
+ final Messages messages = stigmata.getMessages();
+ JScrollPane scroll = new JScrollPane();
+ JComponent south = Box.createHorizontalBox();
+ list = new JList();
+
+ addAction = new AbstractAction(){
+ private static final long serialVersionUID = 1406018312294328837L;
+
+ public void actionPerformed(ActionEvent e){
+ addButtonActionPerformed(e);
+ }
+ };
+ removeAction = new AbstractAction(){
+ private static final long serialVersionUID = 7910621850068803554L;
+
+ public void actionPerformed(ActionEvent e){
+ removeButtonActionPerformed(e);
+ }
+ };
+
+ JButton addButton = GUIUtility.createButton(messages, "addpackage", addAction);
+ JButton removeButton = GUIUtility.createButton(messages, "removepackage", removeAction);
+ removeAction.setEnabled(false);
+
+ final JPopupMenu popup = new JPopupMenu();
+ popup.add(GUIUtility.createJMenuItem(messages, "addpackage", addAction));
+ popup.add(GUIUtility.createJMenuItem(messages, "removepackage", removeAction));
+
+ setLayout(new BorderLayout());
+
+ scroll.setViewportView(list);
+ south.add(Box.createHorizontalGlue());
+ south.add(addButton);
+ south.add(Box.createHorizontalGlue());
+ south.add(removeButton);
+ south.add(Box.createHorizontalGlue());
+
+ list.addListSelectionListener(new ListSelectionListener(){
+ public void valueChanged(ListSelectionEvent evt){
+ listValueChanged(evt);
+ }
+ });
+
+ list.addMouseListener(new PopupShowAction(popup));
+
+ add(scroll, java.awt.BorderLayout.CENTER);
+ add(south, BorderLayout.SOUTH);
+ }
+
+ private void listValueChanged(ListSelectionEvent evt){
+ int[] indeces = list.getSelectedIndices();
+ removeAction.setEnabled(isEnabled() && indeces != null);
+ }
+
+ private void removeButtonActionPerformed(ActionEvent evt){
+ int[] indeces = list.getSelectedIndices();
+ if(indeces != null && indeces.length >= 1){
+ for(int i = indeces.length - 1; i >= 0; i--){
+ model.removeElementAt(indeces[i]);
+ fireEvent();
+ }
+ }
+ removeAction.setEnabled(false);
+ }
+
+ private class DataRemoveWhenDragSuccessfulAdapter extends DragSourceAdapter{
+ private DefaultListModel model;
+ private int[] indeces;
+
+ public DataRemoveWhenDragSuccessfulAdapter(DefaultListModel model,
+ int[] indeces){
+ this.model = model;
+ this.indeces = indeces;
+ }
+
+ @Override
+ public void dragDropEnd(DragSourceDropEvent dsde){
+ for(int i = indeces.length - 1; i >= 0; i--){
+ model.removeElementAt(indeces[i]);
+ }
+ fireEvent();
+ super.dragDropEnd(dsde);
+ }
+ };
+
+ private class TargetDragGestureListener implements DragGestureListener{
+ private JList list;
+
+ public TargetDragGestureListener(JList list, DefaultListModel model){
+ this.list = list;
+ }
+
+ public void dragGestureRecognized(DragGestureEvent dge){
+ int[] indeces = list.getSelectedIndices();
+ if(indeces.length > 0){
+ String[] strings = new String[indeces.length];
+ for(int i = 0; i < strings.length; i++){
+ strings[i] = (String)model.getElementAt(indeces[i]);
+ }
+ Transferable transferable = new TargetTransferable(strings);
+ DragSourceListener listener = new DataRemoveWhenDragSuccessfulAdapter(
+ model, indeces);
+
+ dge.startDrag(DragSource.DefaultMoveDrop, transferable,
+ listener);
+ }
+ }
+ };
+
+ @SuppressWarnings("unchecked")
+ private class TargetSelectionDropTarget extends DropTarget{
+ private static final long serialVersionUID = 3204457621345L;
+
+ @Override
+ public void dragEnter(DropTargetDragEvent arg0){
+ }
+
+ @Override
+ public void dragExit(DropTargetEvent arg0){
+ }
+
+ @Override
+ public void dragOver(DropTargetDragEvent arg0){
+ }
+
+ @Override
+ public void drop(DropTargetDropEvent dtde){
+ dtde.acceptDrop(DnDConstants.ACTION_REFERENCE);
+ Transferable trans = dtde.getTransferable();
+ try{
+ if(trans.isDataFlavorSupported(DataFlavor.javaFileListFlavor)){
+ List list = (List)trans
+ .getTransferData(DataFlavor.javaFileListFlavor);
+ List<String> errorList = checkAndAddDroppedFile(list);
+ if(errorList.size() > 0){
+ showError(errorList);
+ }
+ }
+ } catch(UnsupportedFlavorException e){
+ } catch(IOException e){
+ }
+ }
+
+ @Override
+ public void dropActionChanged(DropTargetDragEvent arg0){
+ }
+
+ private List<String> checkAndAddDroppedFile(List list){
+ List<String> errorList = new ArrayList<String>();
+
+ FileFilter[] filters = getFileFilters();
+ for(int i = 0; i < list.size(); i++){
+ File file = (File)list.get(i);
+ boolean neverAddedFlag = true;
+ for(FileFilter filter: filters){
+ if(filter.accept(file)){
+ addValue(file.getPath());
+ neverAddedFlag = false;
+ }
+ }
+ if(neverAddedFlag){
+ errorList.add(file.getName());
+ }
+ }
+ return errorList;
+ }
+
+ private void showError(List<String> errorList){
+ StringBuilder builder = new StringBuilder("<html><body>");
+ builder.append(stigmata.getMessages().get("unsupportedfiletype.dialog.message"));
+ builder.append("<ul>");
+ for(int i = 0; i < errorList.size(); i++){
+ builder.append("<li>").append(errorList.get(i)).append("</li>");
+ }
+ builder.append("</ul></body></html>");
+ JOptionPane.showMessageDialog(
+ TargetSelectionPane.this, new String(builder),
+ stigmata.getMessages().get("unsupportedfiletype.dialog.title"),
+ JOptionPane.ERROR_MESSAGE
+ );
+ }
+ };
+
+ private class TargetTransferable implements Transferable{
+ private String[] strings;
+
+ public TargetTransferable(String[] strings){
+ this.strings = strings;
+ }
+
+ public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException,
+ IOException{
+ List<File> list = new ArrayList<File>();
+ for(int i = 0; i < strings.length; i++){
+ list.add(new File(strings[i]));
+ }
+ return list;
+ }
+
+ public DataFlavor[] getTransferDataFlavors(){
+ return new DataFlavor[] { DataFlavor.javaFileListFlavor, };
+ }
+
+ public boolean isDataFlavorSupported(DataFlavor flavor){
+ return flavor.equals(DataFlavor.javaFileListFlavor);
+ }
+ }
+}
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class UnsupportedFormatException extends Exception{\r
- private static final long serialVersionUID = 8165384564671102575L;\r
-\r
- public UnsupportedFormatException(){\r
- }\r
-\r
- public UnsupportedFormatException(String message){\r
- super(message);\r
- }\r
-\r
- public UnsupportedFormatException(Throwable cause){\r
- super(cause);\r
- }\r
-\r
- public UnsupportedFormatException(String message, Throwable cause){\r
- super(message, cause);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class UnsupportedFormatException extends Exception{
+ private static final long serialVersionUID = 8165384564671102575L;
+
+ public UnsupportedFormatException(){
+ }
+
+ public UnsupportedFormatException(String message){
+ super(message);
+ }
+
+ public UnsupportedFormatException(Throwable cause){
+ super(cause);
+ }
+
+ public UnsupportedFormatException(String message, Throwable cause){
+ super(message, cause);
+ }
+}
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.FlowLayout;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.awt.event.MouseAdapter;\r
-import java.awt.event.MouseEvent;\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-\r
-import javax.swing.AbstractAction;\r
-import javax.swing.Action;\r
-import javax.swing.Box;\r
-import javax.swing.DefaultListModel;\r
-import javax.swing.JButton;\r
-import javax.swing.JCheckBox;\r
-import javax.swing.JComboBox;\r
-import javax.swing.JComponent;\r
-import javax.swing.JLabel;\r
-import javax.swing.JList;\r
-import javax.swing.JOptionPane;\r
-import javax.swing.JPanel;\r
-import javax.swing.JPopupMenu;\r
-import javax.swing.JScrollPane;\r
-import javax.swing.JTextField;\r
-import javax.swing.border.TitledBorder;\r
-import javax.swing.event.DocumentEvent;\r
-import javax.swing.event.DocumentListener;\r
-import javax.swing.event.ListSelectionEvent;\r
-import javax.swing.event.ListSelectionListener;\r
-\r
-import jp.naist.se.stigmata.ui.swing.actions.PopupShowAction;\r
-import jp.naist.se.stigmata.utils.WellknownClassJudgeRule;\r
-import jp.naist.se.stigmata.utils.WellknownClassManager;\r
-import jp.sourceforge.talisman.i18n.Messages;\r
-\r
-/**\r
- * Well-known classes judge rules management pane.\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class WellknownClassesSettingsPane extends JPanel{\r
- private static final long serialVersionUID = 329734546345634532L;\r
-\r
- private StigmataFrame stigmata;\r
- private WellknownClassManager manager;\r
- private JList list;\r
- private DefaultListModel listmodel;\r
-\r
- private Map<String, String> matchTypeMap = new HashMap<String, String>();\r
- private Map<String, String> partTypeMap = new HashMap<String, String>();\r
-\r
- public WellknownClassesSettingsPane(StigmataFrame stigmata){\r
- this.stigmata = stigmata;\r
- this.manager = stigmata.getEnvironment().getWellknownClassManager();\r
-\r
- initLayouts();\r
- initializeData();\r
- }\r
-\r
- public synchronized void setWellknownClasses(WellknownClassManager manager){\r
- manager.clear();\r
- for(int i = 0; i < listmodel.getSize(); i++){\r
- WellknownClassJudgeRule rule = (WellknownClassJudgeRule)listmodel.getElementAt(i);\r
- manager.add(rule);\r
- }\r
- }\r
-\r
- public synchronized WellknownClassManager createWellknownClassManager(){\r
- WellknownClassManager manager = new WellknownClassManager();\r
- setWellknownClasses(manager);\r
- return manager;\r
- }\r
-\r
- public void reset(){\r
- listmodel.clear();\r
- initializeData();\r
- }\r
-\r
- private synchronized boolean isWellknownClass(String className){\r
- WellknownClassManager manager = createWellknownClassManager();\r
-\r
- return manager.isWellKnownClass(className);\r
- }\r
-\r
- private String findType(JComboBox combo, Map<String, String> map){\r
- String item = (String)combo.getSelectedItem();\r
- for(Map.Entry<String, String> entry: map.entrySet()){\r
- if(item.equals(entry.getValue())){\r
- return entry.getKey();\r
- }\r
- }\r
- return null;\r
- }\r
-\r
- public void addRule(WellknownClassJudgeRule rule){\r
- if(rule != null){\r
- listmodel.addElement(rule);\r
- stigmata.setNeedToSaveSettings(true);\r
- }\r
- }\r
-\r
- public void editRule(int index){\r
- WellknownClassJudgeRule rule = (WellknownClassJudgeRule)listmodel.getElementAt(index);\r
- WellknownClassJudgeRule newrule = createOrUpdateRule(stigmata.getMessages(), rule);\r
- if(newrule != null){\r
- listmodel.setElementAt(newrule, index);\r
- stigmata.setNeedToSaveSettings(true);\r
- }\r
- }\r
-\r
-\r
- private void initializeData(){\r
- for(WellknownClassJudgeRule rule : manager){\r
- listmodel.addElement(rule);\r
- }\r
-\r
- for(WellknownClassJudgeRule.MatchType type: WellknownClassJudgeRule.MatchType.values()){\r
- matchTypeMap.put(type.name(), stigmata.getMessages().get("matchtype." + type.name()));\r
- }\r
- for(WellknownClassJudgeRule.MatchPartType type: WellknownClassJudgeRule.MatchPartType.values()){\r
- partTypeMap.put(type.name(), stigmata.getMessages().get("matchparttype." + type.name()));\r
- }\r
- }\r
-\r
- private void initLayouts(){\r
- setLayout(new BorderLayout());\r
- JPanel center = new JPanel(new BorderLayout());\r
- listmodel = new DefaultListModel();\r
-\r
- list = new JList(listmodel);\r
- JScrollPane scroll = new JScrollPane(list);\r
-\r
- center.add(scroll, BorderLayout.CENTER);\r
- center.add(createSouthPane(stigmata.getMessages()), BorderLayout.SOUTH);\r
-\r
- add(center, BorderLayout.CENTER);\r
- add(createCheckPane(stigmata.getMessages()), BorderLayout.SOUTH);\r
- }\r
-\r
- private JComponent createCheckPane(final Messages messages){\r
- final JTextField text = new JTextField();\r
- final JButton checkButton = GUIUtility.createButton(messages, "checkwellknown");\r
- final JLabel label = new JLabel(GUIUtility.getIcon(messages, "wellknownclasschecker.default.icon"));\r
- checkButton.setEnabled(false);\r
-\r
- ActionListener listener = new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- String t = text.getText().trim();\r
- if(t.length() > 0){\r
- String message = messages.get("wellknownclasschecker.wellknown.tooltip");\r
- if(isWellknownClass(t)){\r
- label.setIcon(GUIUtility.getIcon(messages, "wellknownclasschecker.wellknown.icon"));\r
- }\r
- else{\r
- label.setIcon(GUIUtility.getIcon(messages, "wellknownclasschecker.notwellknown.icon"));\r
- message = messages.get("wellknownclasschecker.notwellknown.tooltip");\r
- }\r
- label.setToolTipText(message);\r
- String dm = String.format(\r
- "<html><body><dl><dt>%s</dt><dd>%s</dd></body></html>", t, message\r
- );\r
- JOptionPane.showMessageDialog(\r
- stigmata, dm, stigmata.getMessages().get("wellknownclasschecker.dialog.title"),\r
- JOptionPane.INFORMATION_MESSAGE\r
- );\r
- }\r
- }\r
- };\r
- checkButton.addActionListener(listener);\r
- text.addActionListener(listener);\r
- text.getDocument().addDocumentListener(new DocumentListener(){\r
- public void changedUpdate(DocumentEvent arg0){\r
- checkButton.setEnabled(text.getText().trim().length() > 0);\r
- }\r
-\r
- public void insertUpdate(DocumentEvent arg0){\r
- checkButton.setEnabled(text.getText().trim().length() > 0);\r
- }\r
-\r
- public void removeUpdate(DocumentEvent arg0){\r
- checkButton.setEnabled(text.getText().trim().length() > 0);\r
- }\r
- });\r
-\r
- JComponent south = Box.createHorizontalBox();\r
- south.add(Box.createHorizontalGlue());\r
- south.add(text);\r
- south.add(Box.createHorizontalGlue());\r
- south.add(checkButton);\r
- south.add(Box.createHorizontalGlue());\r
- south.add(label);\r
- south.add(Box.createHorizontalGlue());\r
-\r
- south.setBorder(new TitledBorder(stigmata.getMessages().get("wellknownclasschecker.border")));\r
-\r
- return south;\r
- }\r
-\r
- private JComponent createSouthPane(final Messages messages){\r
- JComponent southPanel = Box.createHorizontalBox();\r
- Action addAction = new AbstractAction(){\r
- private static final long serialVersionUID = -8749957850400877529L;\r
-\r
- public void actionPerformed(ActionEvent e){\r
- addRule(createOrUpdateRule(messages, null));\r
- }\r
- };\r
- final Action removeAction = new AbstractAction(){\r
- private static final long serialVersionUID = 8776209200186477040L;\r
-\r
- public void actionPerformed(ActionEvent e){\r
- int[] indeces = list.getSelectedIndices();\r
- for(int i = indeces.length - 1; i >= 0; i--){\r
- listmodel.removeElementAt(indeces[i]);\r
- }\r
- list.getSelectionModel().clearSelection();\r
- stigmata.setNeedToSaveSettings(true);\r
- }\r
- };\r
- final Action updateAction = new AbstractAction(){\r
- private static final long serialVersionUID = 852965501722574084L;\r
-\r
- public void actionPerformed(ActionEvent e){\r
- editRule(list.getSelectedIndex());\r
- }\r
- };\r
- JButton addButton = GUIUtility.createButton(messages, "addwellknown", addAction);\r
- JButton removeButton = GUIUtility.createButton(messages, "removewellknown", removeAction);\r
- JButton updateButton = GUIUtility.createButton(messages, "updatewellknown", updateAction);\r
- removeAction.setEnabled(false);\r
- updateAction.setEnabled(false);\r
-\r
- southPanel.add(Box.createHorizontalGlue());\r
- southPanel.add(addButton);\r
- southPanel.add(Box.createHorizontalGlue());\r
- southPanel.add(updateButton);\r
- southPanel.add(Box.createHorizontalGlue());\r
- southPanel.add(removeButton);\r
- southPanel.add(Box.createHorizontalGlue());\r
-\r
- list.addMouseListener(new MouseAdapter(){\r
- @Override\r
- public void mouseClicked(MouseEvent e){\r
- if(e.getClickCount() == 2){\r
- editRule(list.getSelectedIndex());\r
- }\r
- }\r
- });\r
- JPopupMenu popup = new JPopupMenu();\r
- popup.add(GUIUtility.createJMenuItem(messages, "addwellknown", addAction));\r
- popup.add(GUIUtility.createJMenuItem(messages, "updatewellknown", updateAction));\r
- popup.add(GUIUtility.createJMenuItem(messages, "removewellknown", removeAction));\r
-\r
- list.addMouseListener(new PopupShowAction(popup));\r
- list.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
- public void valueChanged(ListSelectionEvent arg0){\r
- int[] indeces = list.getSelectedIndices();\r
- removeAction.setEnabled(indeces != null && indeces.length > 0);\r
- updateAction.setEnabled(indeces != null && indeces.length == 1);\r
- }\r
- });\r
-\r
- return southPanel;\r
- }\r
-\r
- private WellknownClassJudgeRule createOrUpdateRule(Messages messages, WellknownClassJudgeRule rule){\r
- JTextField text = new JTextField();\r
- text.setOpaque(true);\r
- GUIUtility.decorateJComponent(messages, text, "addwellknown.newrule.pattern");\r
- JCheckBox excludeCheck = new JCheckBox(messages.get("addwellknown.newrule.exclude.label"), false);\r
- GUIUtility.decorateJComponent(messages, excludeCheck, "addwellknown.newrule.exclude");\r
- JComboBox matchTypeComboBox = new JComboBox();\r
- for(Map.Entry<String, String> entry: matchTypeMap.entrySet()){\r
- matchTypeComboBox.addItem(entry.getValue());\r
- }\r
- JComboBox partTypeComboBox = new JComboBox();\r
- for(Map.Entry<String, String> entry: partTypeMap.entrySet()){\r
- partTypeComboBox.addItem(entry.getValue());\r
- }\r
- if(rule != null){\r
- text.setText(rule.getPattern());\r
- excludeCheck.setSelected(rule.isExclude());\r
- matchTypeComboBox.setSelectedItem(matchTypeMap.get(rule.getMatchType().name()));\r
- partTypeComboBox.setSelectedItem(partTypeMap.get(rule.getMatchPartType().name()));\r
- }\r
-\r
- JPanel panel = new JPanel(new BorderLayout());\r
- panel.setOpaque(true);\r
- JPanel centerPanel = new JPanel(new FlowLayout());\r
-\r
- centerPanel.add(partTypeComboBox);\r
- centerPanel.add(matchTypeComboBox);\r
-\r
- panel.add(excludeCheck, BorderLayout.NORTH);\r
- panel.add(centerPanel, BorderLayout.CENTER);\r
- panel.add(text, BorderLayout.SOUTH);\r
-\r
- int value = JOptionPane.showConfirmDialog(\r
- stigmata, panel, stigmata.getMessages().get("addwellknown.dialog.title"),\r
- JOptionPane.OK_CANCEL_OPTION\r
- );\r
- if(value == JOptionPane.OK_OPTION){\r
- String matchType = findType(matchTypeComboBox, matchTypeMap);\r
- String partType = findType(partTypeComboBox, partTypeMap);\r
- WellknownClassJudgeRule.MatchType match = null;\r
- WellknownClassJudgeRule.MatchPartType part = null;\r
- String pattern = text.getText();\r
- boolean excludeFlag = excludeCheck.isSelected();\r
-\r
- if(matchType != null && partType != null){\r
- match = WellknownClassJudgeRule.MatchType.valueOf(matchType);\r
- part = WellknownClassJudgeRule.MatchPartType.valueOf(partType);\r
- }\r
-\r
- if(match != null && partType != null && pattern != null && !pattern.equals("")){\r
- return new WellknownClassJudgeRule(pattern, match, part, excludeFlag);\r
- }\r
- }\r
- return null;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.Box;
+import javax.swing.DefaultListModel;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.border.TitledBorder;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import jp.sourceforge.stigmata.ui.swing.actions.PopupShowAction;
+import jp.sourceforge.stigmata.utils.WellknownClassJudgeRule;
+import jp.sourceforge.stigmata.utils.WellknownClassManager;
+import jp.sourceforge.talisman.i18n.Messages;
+
+/**
+ * Well-known classes judge rules management pane.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class WellknownClassesSettingsPane extends JPanel{
+ private static final long serialVersionUID = 329734546345634532L;
+
+ private StigmataFrame stigmata;
+ private WellknownClassManager manager;
+ private JList list;
+ private DefaultListModel listmodel;
+
+ private Map<String, String> matchTypeMap = new HashMap<String, String>();
+ private Map<String, String> partTypeMap = new HashMap<String, String>();
+
+ public WellknownClassesSettingsPane(StigmataFrame stigmata){
+ this.stigmata = stigmata;
+ this.manager = stigmata.getEnvironment().getWellknownClassManager();
+
+ initLayouts();
+ initializeData();
+ }
+
+ public synchronized void setWellknownClasses(WellknownClassManager manager){
+ manager.clear();
+ for(int i = 0; i < listmodel.getSize(); i++){
+ WellknownClassJudgeRule rule = (WellknownClassJudgeRule)listmodel.getElementAt(i);
+ manager.add(rule);
+ }
+ }
+
+ public synchronized WellknownClassManager createWellknownClassManager(){
+ WellknownClassManager manager = new WellknownClassManager();
+ setWellknownClasses(manager);
+ return manager;
+ }
+
+ public void reset(){
+ listmodel.clear();
+ initializeData();
+ }
+
+ private synchronized boolean isWellknownClass(String className){
+ WellknownClassManager manager = createWellknownClassManager();
+
+ return manager.isWellKnownClass(className);
+ }
+
+ private String findType(JComboBox combo, Map<String, String> map){
+ String item = (String)combo.getSelectedItem();
+ for(Map.Entry<String, String> entry: map.entrySet()){
+ if(item.equals(entry.getValue())){
+ return entry.getKey();
+ }
+ }
+ return null;
+ }
+
+ public void addRule(WellknownClassJudgeRule rule){
+ if(rule != null){
+ listmodel.addElement(rule);
+ stigmata.setNeedToSaveSettings(true);
+ }
+ }
+
+ public void editRule(int index){
+ WellknownClassJudgeRule rule = (WellknownClassJudgeRule)listmodel.getElementAt(index);
+ WellknownClassJudgeRule newrule = createOrUpdateRule(stigmata.getMessages(), rule);
+ if(newrule != null){
+ listmodel.setElementAt(newrule, index);
+ stigmata.setNeedToSaveSettings(true);
+ }
+ }
+
+
+ private void initializeData(){
+ for(WellknownClassJudgeRule rule : manager){
+ listmodel.addElement(rule);
+ }
+
+ for(WellknownClassJudgeRule.MatchType type: WellknownClassJudgeRule.MatchType.values()){
+ matchTypeMap.put(type.name(), stigmata.getMessages().get("matchtype." + type.name()));
+ }
+ for(WellknownClassJudgeRule.MatchPartType type: WellknownClassJudgeRule.MatchPartType.values()){
+ partTypeMap.put(type.name(), stigmata.getMessages().get("matchparttype." + type.name()));
+ }
+ }
+
+ private void initLayouts(){
+ setLayout(new BorderLayout());
+ JPanel center = new JPanel(new BorderLayout());
+ listmodel = new DefaultListModel();
+
+ list = new JList(listmodel);
+ JScrollPane scroll = new JScrollPane(list);
+
+ center.add(scroll, BorderLayout.CENTER);
+ center.add(createSouthPane(stigmata.getMessages()), BorderLayout.SOUTH);
+
+ add(center, BorderLayout.CENTER);
+ add(createCheckPane(stigmata.getMessages()), BorderLayout.SOUTH);
+ }
+
+ private JComponent createCheckPane(final Messages messages){
+ final JTextField text = new JTextField();
+ final JButton checkButton = GUIUtility.createButton(messages, "checkwellknown");
+ final JLabel label = new JLabel(GUIUtility.getIcon(messages, "wellknownclasschecker.default.icon"));
+ checkButton.setEnabled(false);
+
+ ActionListener listener = new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ String t = text.getText().trim();
+ if(t.length() > 0){
+ String message = messages.get("wellknownclasschecker.wellknown.tooltip");
+ if(isWellknownClass(t)){
+ label.setIcon(GUIUtility.getIcon(messages, "wellknownclasschecker.wellknown.icon"));
+ }
+ else{
+ label.setIcon(GUIUtility.getIcon(messages, "wellknownclasschecker.notwellknown.icon"));
+ message = messages.get("wellknownclasschecker.notwellknown.tooltip");
+ }
+ label.setToolTipText(message);
+ String dm = String.format(
+ "<html><body><dl><dt>%s</dt><dd>%s</dd></body></html>", t, message
+ );
+ JOptionPane.showMessageDialog(
+ stigmata, dm, stigmata.getMessages().get("wellknownclasschecker.dialog.title"),
+ JOptionPane.INFORMATION_MESSAGE
+ );
+ }
+ }
+ };
+ checkButton.addActionListener(listener);
+ text.addActionListener(listener);
+ text.getDocument().addDocumentListener(new DocumentListener(){
+ public void changedUpdate(DocumentEvent arg0){
+ checkButton.setEnabled(text.getText().trim().length() > 0);
+ }
+
+ public void insertUpdate(DocumentEvent arg0){
+ checkButton.setEnabled(text.getText().trim().length() > 0);
+ }
+
+ public void removeUpdate(DocumentEvent arg0){
+ checkButton.setEnabled(text.getText().trim().length() > 0);
+ }
+ });
+
+ JComponent south = Box.createHorizontalBox();
+ south.add(Box.createHorizontalGlue());
+ south.add(text);
+ south.add(Box.createHorizontalGlue());
+ south.add(checkButton);
+ south.add(Box.createHorizontalGlue());
+ south.add(label);
+ south.add(Box.createHorizontalGlue());
+
+ south.setBorder(new TitledBorder(stigmata.getMessages().get("wellknownclasschecker.border")));
+
+ return south;
+ }
+
+ private JComponent createSouthPane(final Messages messages){
+ JComponent southPanel = Box.createHorizontalBox();
+ Action addAction = new AbstractAction(){
+ private static final long serialVersionUID = -8749957850400877529L;
+
+ public void actionPerformed(ActionEvent e){
+ addRule(createOrUpdateRule(messages, null));
+ }
+ };
+ final Action removeAction = new AbstractAction(){
+ private static final long serialVersionUID = 8776209200186477040L;
+
+ public void actionPerformed(ActionEvent e){
+ int[] indeces = list.getSelectedIndices();
+ for(int i = indeces.length - 1; i >= 0; i--){
+ listmodel.removeElementAt(indeces[i]);
+ }
+ list.getSelectionModel().clearSelection();
+ stigmata.setNeedToSaveSettings(true);
+ }
+ };
+ final Action updateAction = new AbstractAction(){
+ private static final long serialVersionUID = 852965501722574084L;
+
+ public void actionPerformed(ActionEvent e){
+ editRule(list.getSelectedIndex());
+ }
+ };
+ JButton addButton = GUIUtility.createButton(messages, "addwellknown", addAction);
+ JButton removeButton = GUIUtility.createButton(messages, "removewellknown", removeAction);
+ JButton updateButton = GUIUtility.createButton(messages, "updatewellknown", updateAction);
+ removeAction.setEnabled(false);
+ updateAction.setEnabled(false);
+
+ southPanel.add(Box.createHorizontalGlue());
+ southPanel.add(addButton);
+ southPanel.add(Box.createHorizontalGlue());
+ southPanel.add(updateButton);
+ southPanel.add(Box.createHorizontalGlue());
+ southPanel.add(removeButton);
+ southPanel.add(Box.createHorizontalGlue());
+
+ list.addMouseListener(new MouseAdapter(){
+ @Override
+ public void mouseClicked(MouseEvent e){
+ if(e.getClickCount() == 2){
+ editRule(list.getSelectedIndex());
+ }
+ }
+ });
+ JPopupMenu popup = new JPopupMenu();
+ popup.add(GUIUtility.createJMenuItem(messages, "addwellknown", addAction));
+ popup.add(GUIUtility.createJMenuItem(messages, "updatewellknown", updateAction));
+ popup.add(GUIUtility.createJMenuItem(messages, "removewellknown", removeAction));
+
+ list.addMouseListener(new PopupShowAction(popup));
+ list.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
+ public void valueChanged(ListSelectionEvent arg0){
+ int[] indeces = list.getSelectedIndices();
+ removeAction.setEnabled(indeces != null && indeces.length > 0);
+ updateAction.setEnabled(indeces != null && indeces.length == 1);
+ }
+ });
+
+ return southPanel;
+ }
+
+ private WellknownClassJudgeRule createOrUpdateRule(Messages messages, WellknownClassJudgeRule rule){
+ JTextField text = new JTextField();
+ text.setOpaque(true);
+ GUIUtility.decorateJComponent(messages, text, "addwellknown.newrule.pattern");
+ JCheckBox excludeCheck = new JCheckBox(messages.get("addwellknown.newrule.exclude.label"), false);
+ GUIUtility.decorateJComponent(messages, excludeCheck, "addwellknown.newrule.exclude");
+ JComboBox matchTypeComboBox = new JComboBox();
+ for(Map.Entry<String, String> entry: matchTypeMap.entrySet()){
+ matchTypeComboBox.addItem(entry.getValue());
+ }
+ JComboBox partTypeComboBox = new JComboBox();
+ for(Map.Entry<String, String> entry: partTypeMap.entrySet()){
+ partTypeComboBox.addItem(entry.getValue());
+ }
+ if(rule != null){
+ text.setText(rule.getPattern());
+ excludeCheck.setSelected(rule.isExclude());
+ matchTypeComboBox.setSelectedItem(matchTypeMap.get(rule.getMatchType().name()));
+ partTypeComboBox.setSelectedItem(partTypeMap.get(rule.getMatchPartType().name()));
+ }
+
+ JPanel panel = new JPanel(new BorderLayout());
+ panel.setOpaque(true);
+ JPanel centerPanel = new JPanel(new FlowLayout());
+
+ centerPanel.add(partTypeComboBox);
+ centerPanel.add(matchTypeComboBox);
+
+ panel.add(excludeCheck, BorderLayout.NORTH);
+ panel.add(centerPanel, BorderLayout.CENTER);
+ panel.add(text, BorderLayout.SOUTH);
+
+ int value = JOptionPane.showConfirmDialog(
+ stigmata, panel, stigmata.getMessages().get("addwellknown.dialog.title"),
+ JOptionPane.OK_CANCEL_OPTION
+ );
+ if(value == JOptionPane.OK_OPTION){
+ String matchType = findType(matchTypeComboBox, matchTypeMap);
+ String partType = findType(partTypeComboBox, partTypeMap);
+ WellknownClassJudgeRule.MatchType match = null;
+ WellknownClassJudgeRule.MatchPartType part = null;
+ String pattern = text.getText();
+ boolean excludeFlag = excludeCheck.isSelected();
+
+ if(matchType != null && partType != null){
+ match = WellknownClassJudgeRule.MatchType.valueOf(matchType);
+ part = WellknownClassJudgeRule.MatchPartType.valueOf(partType);
+ }
+
+ if(match != null && partType != null && pattern != null && !pattern.equals("")){
+ return new WellknownClassJudgeRule(pattern, match, part, excludeFlag);
+ }
+ }
+ return null;
+ }
+}
-package jp.naist.se.stigmata.ui.swing.actions;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-\r
-import javax.swing.JLabel;\r
-import javax.swing.JPanel;\r
-\r
-import jp.naist.se.stigmata.ui.swing.GUIUtility;\r
-import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class AboutAction extends ShowTextAction{\r
- private static final long serialVersionUID = -7060581883871662749L;\r
-\r
- public AboutAction(StigmataFrame stigmata){\r
- super(stigmata);\r
- }\r
-\r
- @Override\r
- public boolean isHtmlDocument(){\r
- return true;\r
- }\r
-\r
- @Override\r
- public String getTitle(){\r
- return getMessages().get("about.dialog.title");\r
- }\r
-\r
- @Override\r
- public String getMessage(){\r
- String aboutMessage = loadStringFromFile(GUIUtility.getResource(getMessages(), "about.message.file"));\r
-\r
- Package p = getClass().getPackage();\r
- aboutMessage = aboutMessage.replace("${implementation.version}", p.getImplementationVersion());\r
- aboutMessage = aboutMessage.replace("${implementation.vendor}", p.getImplementationVendor());\r
- aboutMessage = aboutMessage.replace("${implementation.title}", p.getImplementationTitle());\r
-\r
- return aboutMessage;\r
- }\r
-\r
- @Override\r
- protected void updatePanel(JPanel panel){\r
- JLabel logo = new JLabel(GUIUtility.getIcon(getMessages(), "stigmata.logo"));\r
- panel.add(logo, BorderLayout.NORTH);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.actions;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import jp.sourceforge.stigmata.ui.swing.GUIUtility;
+import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class AboutAction extends ShowTextAction{
+ private static final long serialVersionUID = -7060581883871662749L;
+
+ public AboutAction(StigmataFrame stigmata){
+ super(stigmata);
+ }
+
+ @Override
+ public boolean isHtmlDocument(){
+ return true;
+ }
+
+ @Override
+ public String getTitle(){
+ return getMessages().get("about.dialog.title");
+ }
+
+ @Override
+ public String getMessage(){
+ String aboutMessage = loadStringFromFile(GUIUtility.getResource(getMessages(), "about.message.file"));
+
+ Package p = getClass().getPackage();
+ aboutMessage = aboutMessage.replace("${implementation.version}", p.getImplementationVersion());
+ aboutMessage = aboutMessage.replace("${implementation.vendor}", p.getImplementationVendor());
+ aboutMessage = aboutMessage.replace("${implementation.title}", p.getImplementationTitle());
+
+ return aboutMessage;
+ }
+
+ @Override
+ protected void updatePanel(JPanel panel){
+ JLabel logo = new JLabel(GUIUtility.getIcon(getMessages(), "stigmata.logo"));
+ panel.add(logo, BorderLayout.NORTH);
+ }
+}
-package jp.naist.se.stigmata.ui.swing.actions;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.Color;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-\r
-import javax.swing.AbstractAction;\r
-import javax.swing.JColorChooser;\r
-import javax.swing.JDialog;\r
-\r
-import jp.naist.se.stigmata.ui.swing.GUIUtility;\r
-import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ChangeColorAction extends AbstractAction{\r
- private static final long serialVersionUID = -7617597154707466764L;\r
-\r
- private StigmataFrame frame;\r
- private Color currentColor = Color.RED;\r
- private JColorChooser chooser;\r
- private boolean colorSelected = false;\r
- private ActionListener listener;\r
-\r
- public ChangeColorAction(String label, StigmataFrame frame, \r
- Color initialColor, ActionListener listener){\r
- super(frame.getMessages().get(label + ".label"), GUIUtility.getIcon(frame.getMessages(), label + ".icon"));\r
- this.frame = frame;\r
- this.listener = listener;\r
- this.currentColor = initialColor;\r
-\r
- chooser = new JColorChooser();\r
- chooser.setColor(initialColor);\r
- }\r
-\r
- public ChangeColorAction(StigmataFrame frame, Color color, ActionListener listener){\r
- this("changecolor", frame, color, listener);\r
- }\r
-\r
- public ChangeColorAction(StigmataFrame frame, ActionListener listener){\r
- this(frame, Color.RED, listener);\r
- }\r
-\r
- public boolean isColorSelected(){\r
- return colorSelected;\r
- }\r
-\r
- public Color getColor(){\r
- return currentColor;\r
- }\r
-\r
- public void actionPerformed(ActionEvent e){\r
- chooser.setColor(currentColor);\r
- JDialog dialog = JColorChooser.createDialog(\r
- frame, frame.getMessages().get("changecolor.title"), \r
- true, chooser,\r
- new ActionListener(){ // ok\r
- public void actionPerformed(ActionEvent e){\r
- currentColor = chooser.getColor();\r
- colorSelected = true;\r
- listener.actionPerformed(new ActionEvent(ChangeColorAction.this, e.getID(), e.getActionCommand(), e.getWhen(), e.getModifiers()));\r
- }\r
- },\r
- new ActionListener(){ // cancel\r
- public void actionPerformed(ActionEvent e){\r
- colorSelected = false;\r
- }\r
- }\r
- );\r
- dialog.setVisible(true);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.actions;
+
+/*
+ * $Id$
+ */
+
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.AbstractAction;
+import javax.swing.JColorChooser;
+import javax.swing.JDialog;
+
+import jp.sourceforge.stigmata.ui.swing.GUIUtility;
+import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ChangeColorAction extends AbstractAction{
+ private static final long serialVersionUID = -7617597154707466764L;
+
+ private StigmataFrame frame;
+ private Color currentColor = Color.RED;
+ private JColorChooser chooser;
+ private boolean colorSelected = false;
+ private ActionListener listener;
+
+ public ChangeColorAction(String label, StigmataFrame frame,
+ Color initialColor, ActionListener listener){
+ super(frame.getMessages().get(label + ".label"), GUIUtility.getIcon(frame.getMessages(), label + ".icon"));
+ this.frame = frame;
+ this.listener = listener;
+ this.currentColor = initialColor;
+
+ chooser = new JColorChooser();
+ chooser.setColor(initialColor);
+ }
+
+ public ChangeColorAction(StigmataFrame frame, Color color, ActionListener listener){
+ this("changecolor", frame, color, listener);
+ }
+
+ public ChangeColorAction(StigmataFrame frame, ActionListener listener){
+ this(frame, Color.RED, listener);
+ }
+
+ public boolean isColorSelected(){
+ return colorSelected;
+ }
+
+ public Color getColor(){
+ return currentColor;
+ }
+
+ public void actionPerformed(ActionEvent e){
+ chooser.setColor(currentColor);
+ JDialog dialog = JColorChooser.createDialog(
+ frame, frame.getMessages().get("changecolor.title"),
+ true, chooser,
+ new ActionListener(){ // ok
+ public void actionPerformed(ActionEvent e){
+ currentColor = chooser.getColor();
+ colorSelected = true;
+ listener.actionPerformed(new ActionEvent(ChangeColorAction.this, e.getID(), e.getActionCommand(), e.getWhen(), e.getModifiers()));
+ }
+ },
+ new ActionListener(){ // cancel
+ public void actionPerformed(ActionEvent e){
+ colorSelected = false;
+ }
+ }
+ );
+ dialog.setVisible(true);
+ }
+}
-package jp.naist.se.stigmata.ui.swing.actions;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.ui.swing.GUIUtility;\r
-import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
-\r
-/**\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class LicenseAction extends ShowTextAction{\r
- private static final long serialVersionUID = 7727665273988881423L;\r
-\r
- public LicenseAction(StigmataFrame parent){\r
- super(parent);\r
- }\r
-\r
- public String getTitle(){\r
- return getMessages().get("license.dialog.title");\r
- }\r
-\r
- public String getMessage(){\r
- return loadStringFromFile(GUIUtility.getResource(getMessages(), "license.file"));\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.actions;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.ui.swing.GUIUtility;
+import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
+
+/**
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class LicenseAction extends ShowTextAction{
+ private static final long serialVersionUID = 7727665273988881423L;
+
+ public LicenseAction(StigmataFrame parent){
+ super(parent);
+ }
+
+ public String getTitle(){
+ return getMessages().get("license.dialog.title");
+ }
+
+ public String getMessage(){
+ return loadStringFromFile(GUIUtility.getResource(getMessages(), "license.file"));
+ }
+}
-package jp.naist.se.stigmata.ui.swing.actions;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.lang.reflect.Method;\r
-import java.net.URL;\r
-\r
-import javax.swing.event.HyperlinkEvent;\r
-import javax.swing.event.HyperlinkListener;\r
-\r
-/**\r
- *\r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-class LinkFollower implements HyperlinkListener{\r
- public void hyperlinkUpdate(HyperlinkEvent e){\r
- if(e.getEventType() == HyperlinkEvent.EventType.ACTIVATED){\r
- URL url = null;\r
- try{\r
- url = e.getURL();\r
- browse(url);\r
- } catch(RuntimeException ee){\r
- throw ee;\r
- } catch(Exception ee){\r
- ee.printStackTrace();\r
- }\r
- }\r
- }\r
-\r
- private void browse(URL url) throws Exception{\r
- Class<?> c = Class.forName("edu.stanford.ejalbert.BrowserLauncher");\r
- Object o = c.newInstance();\r
- Method m = c.getMethod("openURLinBrowser", String.class);\r
- m.invoke(o, url.toString());\r
- }\r
+package jp.sourceforge.stigmata.ui.swing.actions;
+
+/*
+ * $Id$
+ */
+
+import java.lang.reflect.Method;
+import java.net.URL;
+
+import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.HyperlinkListener;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+class LinkFollower implements HyperlinkListener{
+ public void hyperlinkUpdate(HyperlinkEvent e){
+ if(e.getEventType() == HyperlinkEvent.EventType.ACTIVATED){
+ URL url = null;
+ try{
+ url = e.getURL();
+ browse(url);
+ } catch(RuntimeException ee){
+ throw ee;
+ } catch(Exception ee){
+ ee.printStackTrace();
+ }
+ }
+ }
+
+ private void browse(URL url) throws Exception{
+ Class<?> c = Class.forName("edu.stanford.ejalbert.BrowserLauncher");
+ Object o = c.newInstance();
+ Method m = c.getMethod("openURLinBrowser", String.class);
+ m.invoke(o, url.toString());
+ }
}
\ No newline at end of file
-package jp.naist.se.stigmata.ui.swing.actions;
+package jp.sourceforge.stigmata.ui.swing.actions;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
-package jp.naist.se.stigmata.ui.swing.actions;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.event.ActionEvent;\r
-import java.io.BufferedOutputStream;\r
-import java.io.File;\r
-import java.io.FileOutputStream;\r
-import java.io.FileWriter;\r
-import java.io.IOException;\r
-import java.io.OutputStream;\r
-import java.io.PrintWriter;\r
-\r
-import javax.swing.AbstractAction;\r
-import javax.swing.JOptionPane;\r
-\r
-import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
-import jp.naist.se.stigmata.ui.swing.UnsupportedFormatException;\r
-import jp.naist.se.stigmata.utils.AsciiDataWritable;\r
-import jp.naist.se.stigmata.utils.BinaryDataWritable;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class SaveAction extends AbstractAction{\r
- private static final long serialVersionUID = 1427912047636729211L;\r
-\r
- private AsciiDataWritable asciiWritable;\r
- private BinaryDataWritable binaryWritable;\r
- private StigmataFrame stigmata;\r
- private String[] extensions;\r
- private String description;\r
-\r
- public SaveAction(StigmataFrame stigmata, AsciiDataWritable writable){\r
- this.stigmata = stigmata;\r
- this.asciiWritable = writable;\r
- }\r
-\r
- public SaveAction(StigmataFrame stigmata, BinaryDataWritable writable){\r
- this.stigmata = stigmata;\r
- this.binaryWritable = writable;\r
- }\r
-\r
- public void setExtensions(String[] extensions){\r
- this.extensions = extensions;\r
- }\r
-\r
- public void setDescrpition(String description){\r
- this.description = description;\r
- }\r
-\r
- public void actionPerformed(ActionEvent e){\r
- if(extensions == null || description == null){\r
- extensions = stigmata.getMessages().getArray("store.extensions");\r
- description = stigmata.getMessages().get("store.description");\r
- }\r
- File file = stigmata.getSaveFile(extensions, description);\r
- if(file != null){\r
- String name = file.getName();\r
- String format = name.substring(name.lastIndexOf('.') + 1, name.length());\r
-\r
- OutputStream out = null;\r
- PrintWriter writer = null;\r
- try{\r
- if(asciiWritable != null){\r
- writer = new PrintWriter(new FileWriter(file));\r
- asciiWritable.writeAsciiData(writer, format);\r
- }\r
- else{\r
- out = new BufferedOutputStream(new FileOutputStream(file));\r
- binaryWritable.writeBinaryData(out, format);\r
- }\r
- }catch(IOException ee){\r
- JOptionPane.showMessageDialog(\r
- stigmata, ee.getMessage(), stigmata.getMessages().get("error.dialog.title"),\r
- JOptionPane.ERROR_MESSAGE\r
- );\r
- }catch(UnsupportedFormatException ee){\r
- JOptionPane.showMessageDialog(\r
- stigmata, ee.getMessage(), stigmata.getMessages().get("error.dialog.title"),\r
- JOptionPane.ERROR_MESSAGE\r
- );\r
- }finally{\r
- if(out != null){\r
- try{\r
- out.close();\r
- } catch(IOException ee){\r
- throw new InternalError(ee.getMessage());\r
- }\r
- }\r
- if(writer != null){\r
- writer.close();\r
- }\r
- }\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.actions;
+
+/*
+ * $Id$
+ */
+
+import java.awt.event.ActionEvent;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+
+import javax.swing.AbstractAction;
+import javax.swing.JOptionPane;
+
+import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
+import jp.sourceforge.stigmata.ui.swing.UnsupportedFormatException;
+import jp.sourceforge.stigmata.utils.AsciiDataWritable;
+import jp.sourceforge.stigmata.utils.BinaryDataWritable;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class SaveAction extends AbstractAction{
+ private static final long serialVersionUID = 1427912047636729211L;
+
+ private AsciiDataWritable asciiWritable;
+ private BinaryDataWritable binaryWritable;
+ private StigmataFrame stigmata;
+ private String[] extensions;
+ private String description;
+
+ public SaveAction(StigmataFrame stigmata, AsciiDataWritable writable){
+ this.stigmata = stigmata;
+ this.asciiWritable = writable;
+ }
+
+ public SaveAction(StigmataFrame stigmata, BinaryDataWritable writable){
+ this.stigmata = stigmata;
+ this.binaryWritable = writable;
+ }
+
+ public void setExtensions(String[] extensions){
+ this.extensions = extensions;
+ }
+
+ public void setDescrpition(String description){
+ this.description = description;
+ }
+
+ public void actionPerformed(ActionEvent e){
+ if(extensions == null || description == null){
+ extensions = stigmata.getMessages().getArray("store.extensions");
+ description = stigmata.getMessages().get("store.description");
+ }
+ File file = stigmata.getSaveFile(extensions, description);
+ if(file != null){
+ String name = file.getName();
+ String format = name.substring(name.lastIndexOf('.') + 1, name.length());
+
+ OutputStream out = null;
+ PrintWriter writer = null;
+ try{
+ if(asciiWritable != null){
+ writer = new PrintWriter(new FileWriter(file));
+ asciiWritable.writeAsciiData(writer, format);
+ }
+ else{
+ out = new BufferedOutputStream(new FileOutputStream(file));
+ binaryWritable.writeBinaryData(out, format);
+ }
+ }catch(IOException ee){
+ JOptionPane.showMessageDialog(
+ stigmata, ee.getMessage(), stigmata.getMessages().get("error.dialog.title"),
+ JOptionPane.ERROR_MESSAGE
+ );
+ }catch(UnsupportedFormatException ee){
+ JOptionPane.showMessageDialog(
+ stigmata, ee.getMessage(), stigmata.getMessages().get("error.dialog.title"),
+ JOptionPane.ERROR_MESSAGE
+ );
+ }finally{
+ if(out != null){
+ try{
+ out.close();
+ } catch(IOException ee){
+ throw new InternalError(ee.getMessage());
+ }
+ }
+ if(writer != null){
+ writer.close();
+ }
+ }
+ }
+ }
+}
-package jp.naist.se.stigmata.ui.swing.actions;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.Dimension;\r
-import java.awt.event.ActionEvent;\r
-import java.io.BufferedReader;\r
-import java.io.IOException;\r
-import java.io.InputStreamReader;\r
-import java.io.PrintWriter;\r
-import java.io.StringWriter;\r
-import java.net.URL;\r
-\r
-import javax.swing.AbstractAction;\r
-import javax.swing.JEditorPane;\r
-import javax.swing.JOptionPane;\r
-import javax.swing.JPanel;\r
-import javax.swing.JScrollPane;\r
-\r
-import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
-import jp.sourceforge.talisman.i18n.Messages;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-abstract class ShowTextAction extends AbstractAction{\r
- private StigmataFrame parent;\r
-\r
- public ShowTextAction(StigmataFrame parent){\r
- this.parent = parent;\r
- }\r
-\r
- public abstract String getMessage();\r
-\r
- protected void updatePanel(JPanel panel){\r
- }\r
-\r
- public abstract String getTitle();\r
-\r
- public boolean isHtmlDocument(){\r
- return false;\r
- }\r
-\r
- public Messages getMessages(){\r
- return parent.getMessages();\r
- }\r
-\r
- public void actionPerformed(ActionEvent e){\r
- String message = getMessage();\r
- JPanel panel = new JPanel(new BorderLayout());\r
- JScrollPane scroll = new JScrollPane();\r
- String mimeType = "text/plain";\r
- if(isHtmlDocument()){\r
- mimeType = "text/html";\r
- }\r
- JEditorPane text = new JEditorPane(mimeType, message);\r
- text.addHyperlinkListener(new LinkFollower());\r
-\r
- text.setEditable(false);\r
- text.setCaretPosition(0);\r
- text.setBackground(panel.getBackground());\r
- scroll.setViewportView(text);\r
-\r
- panel.add(scroll, BorderLayout.CENTER);\r
- panel.setPreferredSize(new Dimension(500, 300));\r
-\r
- updatePanel(panel);\r
-\r
- JOptionPane.showMessageDialog(\r
- parent, panel, getTitle(),\r
- JOptionPane.INFORMATION_MESSAGE\r
- );\r
- }\r
-\r
- protected String loadStringFromFile(URL url){\r
- try{\r
- String line;\r
- BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));\r
- StringWriter writer = new StringWriter();\r
- PrintWriter out = new PrintWriter(writer);\r
- while((line = in.readLine()) != null){\r
- out.print(line);\r
- out.println();\r
- }\r
- out.close();\r
- in.close();\r
-\r
- return writer.toString();\r
- }catch(IOException e){\r
- e.printStackTrace();\r
- }\r
- return null;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.actions;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.net.URL;
+
+import javax.swing.AbstractAction;
+import javax.swing.JEditorPane;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
+import jp.sourceforge.talisman.i18n.Messages;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+abstract class ShowTextAction extends AbstractAction{
+ private StigmataFrame parent;
+
+ public ShowTextAction(StigmataFrame parent){
+ this.parent = parent;
+ }
+
+ public abstract String getMessage();
+
+ protected void updatePanel(JPanel panel){
+ }
+
+ public abstract String getTitle();
+
+ public boolean isHtmlDocument(){
+ return false;
+ }
+
+ public Messages getMessages(){
+ return parent.getMessages();
+ }
+
+ public void actionPerformed(ActionEvent e){
+ String message = getMessage();
+ JPanel panel = new JPanel(new BorderLayout());
+ JScrollPane scroll = new JScrollPane();
+ String mimeType = "text/plain";
+ if(isHtmlDocument()){
+ mimeType = "text/html";
+ }
+ JEditorPane text = new JEditorPane(mimeType, message);
+ text.addHyperlinkListener(new LinkFollower());
+
+ text.setEditable(false);
+ text.setCaretPosition(0);
+ text.setBackground(panel.getBackground());
+ scroll.setViewportView(text);
+
+ panel.add(scroll, BorderLayout.CENTER);
+ panel.setPreferredSize(new Dimension(500, 300));
+
+ updatePanel(panel);
+
+ JOptionPane.showMessageDialog(
+ parent, panel, getTitle(),
+ JOptionPane.INFORMATION_MESSAGE
+ );
+ }
+
+ protected String loadStringFromFile(URL url){
+ try{
+ String line;
+ BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
+ StringWriter writer = new StringWriter();
+ PrintWriter out = new PrintWriter(writer);
+ while((line = in.readLine()) != null){
+ out.print(line);
+ out.println();
+ }
+ out.close();
+ in.close();
+
+ return writer.toString();
+ }catch(IOException e){
+ e.printStackTrace();
+ }
+ return null;
+ }
+}
-package jp.naist.se.stigmata.ui.swing.actions;\r
-\r
-import java.awt.Color;\r
-import java.awt.GridLayout;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-\r
-import javax.swing.AbstractAction;\r
-import javax.swing.Box;\r
-import javax.swing.JButton;\r
-import javax.swing.JColorChooser;\r
-import javax.swing.JComponent;\r
-import javax.swing.JLabel;\r
-import javax.swing.JOptionPane;\r
-import javax.swing.JPanel;\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.GUIUtility;\r
-import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
-\r
-public class UpdateBirthmarkCellColorAction extends AbstractAction{\r
- private static final long serialVersionUID = 2390797591047570440L;\r
-\r
- private StigmataFrame parent;\r
- private BirthmarkEnvironment environment;\r
- private JColorChooser chooser;\r
-\r
- public UpdateBirthmarkCellColorAction(StigmataFrame parent, BirthmarkEnvironment environment){\r
- this.parent = parent;\r
- this.environment = environment;\r
- }\r
-\r
- public UpdateBirthmarkCellColorAction(StigmataFrame parent){\r
- this(parent, BirthmarkEnvironment.getDefaultEnvironment());\r
- }\r
-\r
- public void actionPerformed(ActionEvent e){\r
- JComponent c = createPanel();\r
- JOptionPane.showMessageDialog(\r
- parent, c, parent.getMessages().get("updatecellcolor.dialog.title"),\r
- JOptionPane.INFORMATION_MESSAGE\r
- );\r
- }\r
-\r
- private JComponent createPanel(){\r
- Box panel = Box.createVerticalBox();\r
- for(int i = 0; i <= 5; i++){\r
- Color fore = CompareTableCellRenderer.getForegroundColor(i, environment);\r
- Color back = CompareTableCellRenderer.getBackgroundColor(i, environment);\r
-\r
- UpdateColorPane pane = new UpdateColorPane(i, fore, back);\r
- panel.add(pane);\r
- }\r
-\r
- return panel;\r
- }\r
-\r
- private Color updateColor(Color c, int rank, boolean foreground){\r
- if(chooser == null){\r
- chooser = new JColorChooser();\r
- }\r
- chooser.setColor(c);\r
- String l = parent.getMessages().get((foreground? "forecolor_": "backcolor_") + rank + ".label");\r
- int returnValue = JOptionPane.showConfirmDialog(\r
- parent, chooser, parent.getMessages().get("updatecell.title", l),\r
- JOptionPane.INFORMATION_MESSAGE\r
- );\r
- if(returnValue == JOptionPane.OK_OPTION){\r
- c = chooser.getColor();\r
- }\r
-\r
- return c;\r
- }\r
-\r
- private class UpdateColorPane extends JPanel{\r
- private static final long serialVersionUID = 8271684478406307685L;\r
-\r
- private int rank;\r
- private JLabel label;\r
-\r
- public UpdateColorPane(int rank, Color fore, Color back){\r
- this.rank = rank;\r
- initLayouts();\r
-\r
- label.setForeground(fore);\r
- label.setBackground(back);\r
- }\r
-\r
- public int getRank(){\r
- return rank;\r
- }\r
-\r
- private void initLayouts(){\r
- label = new JLabel(parent.getMessages().get("rank_" + rank + ".label"));\r
- label.setOpaque(true);\r
- JButton fore = GUIUtility.createButton(parent.getMessages(), "updatecellfore");\r
- JButton back = GUIUtility.createButton(parent.getMessages(), "updatecellback");\r
-\r
- ActionListener listener = new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- String command = e.getActionCommand();\r
- boolean foreground = command.equals("updatecellfore");\r
-\r
- Color c = label.getBackground();\r
- if(foreground){\r
- c = label.getForeground();\r
- }\r
- c = updateColor(c, getRank(), foreground);\r
- if(foreground){\r
- label.setForeground(c);\r
- environment.addProperty(\r
- "forecolor_" + getRank(), String.format("%06x", c.getRGB() & 0xffffff)\r
- );\r
- }\r
- else{\r
- label.setBackground(c);\r
- environment.addProperty(\r
- "backcolor_" + getRank(), String.format("%06x", c.getRGB() & 0xffffff)\r
- );\r
- }\r
- }\r
- };\r
- fore.addActionListener(listener);\r
- back.addActionListener(listener);\r
-\r
- setLayout(new GridLayout(1, 3));\r
- add(label);\r
- add(fore);\r
- add(back);\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.actions;
+
+import java.awt.Color;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.AbstractAction;
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JColorChooser;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.ui.swing.CompareTableCellRenderer;
+import jp.sourceforge.stigmata.ui.swing.GUIUtility;
+import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
+
+public class UpdateBirthmarkCellColorAction extends AbstractAction{
+ private static final long serialVersionUID = 2390797591047570440L;
+
+ private StigmataFrame parent;
+ private BirthmarkEnvironment environment;
+ private JColorChooser chooser;
+
+ public UpdateBirthmarkCellColorAction(StigmataFrame parent, BirthmarkEnvironment environment){
+ this.parent = parent;
+ this.environment = environment;
+ }
+
+ public UpdateBirthmarkCellColorAction(StigmataFrame parent){
+ this(parent, BirthmarkEnvironment.getDefaultEnvironment());
+ }
+
+ public void actionPerformed(ActionEvent e){
+ JComponent c = createPanel();
+ JOptionPane.showMessageDialog(
+ parent, c, parent.getMessages().get("updatecellcolor.dialog.title"),
+ JOptionPane.INFORMATION_MESSAGE
+ );
+ }
+
+ private JComponent createPanel(){
+ Box panel = Box.createVerticalBox();
+ for(int i = 0; i <= 5; i++){
+ Color fore = CompareTableCellRenderer.getForegroundColor(i, environment);
+ Color back = CompareTableCellRenderer.getBackgroundColor(i, environment);
+
+ UpdateColorPane pane = new UpdateColorPane(i, fore, back);
+ panel.add(pane);
+ }
+
+ return panel;
+ }
+
+ private Color updateColor(Color c, int rank, boolean foreground){
+ if(chooser == null){
+ chooser = new JColorChooser();
+ }
+ chooser.setColor(c);
+ String l = parent.getMessages().get((foreground? "forecolor_": "backcolor_") + rank + ".label");
+ int returnValue = JOptionPane.showConfirmDialog(
+ parent, chooser, parent.getMessages().get("updatecell.title", l),
+ JOptionPane.INFORMATION_MESSAGE
+ );
+ if(returnValue == JOptionPane.OK_OPTION){
+ c = chooser.getColor();
+ }
+
+ return c;
+ }
+
+ private class UpdateColorPane extends JPanel{
+ private static final long serialVersionUID = 8271684478406307685L;
+
+ private int rank;
+ private JLabel label;
+
+ public UpdateColorPane(int rank, Color fore, Color back){
+ this.rank = rank;
+ initLayouts();
+
+ label.setForeground(fore);
+ label.setBackground(back);
+ }
+
+ public int getRank(){
+ return rank;
+ }
+
+ private void initLayouts(){
+ label = new JLabel(parent.getMessages().get("rank_" + rank + ".label"));
+ label.setOpaque(true);
+ JButton fore = GUIUtility.createButton(parent.getMessages(), "updatecellfore");
+ JButton back = GUIUtility.createButton(parent.getMessages(), "updatecellback");
+
+ ActionListener listener = new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ String command = e.getActionCommand();
+ boolean foreground = command.equals("updatecellfore");
+
+ Color c = label.getBackground();
+ if(foreground){
+ c = label.getForeground();
+ }
+ c = updateColor(c, getRank(), foreground);
+ if(foreground){
+ label.setForeground(c);
+ environment.addProperty(
+ "forecolor_" + getRank(), String.format("%06x", c.getRGB() & 0xffffff)
+ );
+ }
+ else{
+ label.setBackground(c);
+ environment.addProperty(
+ "backcolor_" + getRank(), String.format("%06x", c.getRGB() & 0xffffff)
+ );
+ }
+ }
+ };
+ fore.addActionListener(listener);
+ back.addActionListener(listener);
+
+ setLayout(new GridLayout(1, 3));
+ add(label);
+ add(fore);
+ add(back);
+ }
+ }
+}
-package jp.naist.se.stigmata.ui.swing.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.Locale;\r
-\r
-import jp.naist.se.stigmata.utils.LocalizedDescriptionManager;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public abstract class AbstractComparisonPairFilterComponentService implements ComparisonPairFilterComponentService{\r
- public String getDisplayFilterName(){\r
- return getDisplayFilterName(Locale.getDefault());\r
- }\r
- \r
- public String getDisplayFilterName(Locale locale){\r
- return LocalizedDescriptionManager.getInstance().getDisplayType(\r
- locale, getFilterName(), LocalizedDescriptionManager.ServiceCategory.filter\r
- );\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.filter;
+
+/*
+ * $Id$
+ */
+
+import java.util.Locale;
+
+import jp.sourceforge.stigmata.utils.LocalizedDescriptionManager;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public abstract class AbstractComparisonPairFilterComponentService implements ComparisonPairFilterComponentService{
+ public String getDisplayFilterName(){
+ return getDisplayFilterName(Locale.getDefault());
+ }
+
+ public String getDisplayFilterName(Locale locale){
+ return LocalizedDescriptionManager.getInstance().getDisplayType(
+ locale, getFilterName(), LocalizedDescriptionManager.ServiceCategory.filter
+ );
+ }
+}
-package jp.naist.se.stigmata.ui.swing.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.Dimension;\r
-import java.awt.GridLayout;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import javax.swing.JComboBox;\r
-import javax.swing.JLabel;\r
-import javax.swing.JTextField;\r
-\r
-import jp.naist.se.stigmata.ComparisonPairFilter;\r
-import jp.naist.se.stigmata.filter.BirthmarkElementCountComparisonPairFilter;\r
-import jp.naist.se.stigmata.filter.BirthmarkElementCountComparisonPairFilterService;\r
-import jp.naist.se.stigmata.filter.FilterTarget;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-import jp.naist.se.stigmata.spi.ComparisonPairFilterSpi;\r
-import jp.naist.se.stigmata.ui.swing.BirthmarkServiceListCellRenderer;\r
-import jp.naist.se.stigmata.ui.swing.BirthmarkServiceListener;\r
-import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkElementCountComparisonPairFilterComponentService extends AbstractComparisonPairFilterComponentService implements BirthmarkServiceListener{\r
- private Pane pane;\r
-\r
- public ComparisonPairFilterPane createComponent(StigmataFrame frame, ComparisonPairFilterSpi service){\r
- pane = new Pane(frame, service);\r
- return pane;\r
- }\r
-\r
- public String getFilterName(){\r
- return "elementcount";\r
- }\r
-\r
- public void serviceAdded(BirthmarkSpi service){\r
- pane.serviceAdded(service);\r
- }\r
-\r
- public void serviceRemoved(BirthmarkSpi service){\r
- pane.serviceRemoved(service);\r
- }\r
-\r
- public ComparisonPairFilterSpi getComparisonPairFilterService(){\r
- return new BirthmarkElementCountComparisonPairFilterService();\r
- }\r
-\r
- private static class Pane extends ComparisonPairFilterPane implements BirthmarkServiceListener{\r
- private static final long serialVersionUID = -6398073942592186671L;\r
-\r
- private ComparisonPairFilterSpi service;\r
- private JComboBox criterionType;\r
- private JTextField threshold;\r
- private JComboBox targetType;\r
- private JComboBox birthmarks;\r
-\r
- public Pane(StigmataFrame frame, ComparisonPairFilterSpi service){\r
- super(frame);\r
- this.service = service;\r
- initLayouts();\r
- }\r
-\r
- public void serviceAdded(BirthmarkSpi service){\r
- birthmarks.addItem(service);\r
- }\r
-\r
- public void serviceRemoved(BirthmarkSpi service){\r
- birthmarks.removeItem(service);\r
- }\r
-\r
- @Override\r
- public String[] getErrors(){\r
- List<String> errors = new ArrayList<String>();\r
- if(threshold.getText().trim().equals("")){\r
- errors.add(getMessages().get("error.empty.threshold"));\r
- }\r
- try{\r
- int v = Integer.parseInt(threshold.getText());\r
- if(v < 0){\r
- errors.add(getMessages().format("error.negative.value", v));\r
- }\r
- } catch(NumberFormatException e){\r
- errors.add(getMessages().format("error.invalid.format.integer", threshold.getText()));\r
- }\r
-\r
- return errors.toArray(new String[errors.size()]);\r
- }\r
-\r
- @Override\r
- public ComparisonPairFilter getFilter(){\r
- try{\r
- BirthmarkElementCountComparisonPairFilter filter = new BirthmarkElementCountComparisonPairFilter(service);\r
- filter.setBirthmarkType(getBirthmarkType());\r
- filter.setCriterion(getCriterion((String)criterionType.getSelectedItem()));\r
- filter.setThreshold(Integer.parseInt(threshold.getText()));\r
- filter.setTarget(getTarget((String)targetType.getSelectedItem()));\r
-\r
- return filter;\r
- } catch(Exception e){\r
- }\r
- return null;\r
- }\r
-\r
- @Override\r
- public void resetComponents(){\r
- threshold.setText("");\r
- criterionType.setSelectedIndex(0);\r
- targetType.setSelectedItem(getDisplayTarget(FilterTarget.BOTH_TARGETS));\r
- }\r
-\r
- @Override\r
- public void setFilter(ComparisonPairFilter cpf){\r
- BirthmarkElementCountComparisonPairFilter filter = (BirthmarkElementCountComparisonPairFilter)cpf;\r
- criterionType.setSelectedItem(getDisplayCriterion(filter.getCriterion()));\r
- threshold.setText(String.valueOf(filter.getThreshold()));\r
- targetType.setSelectedItem(getDisplayTarget(filter.getTarget()));\r
- }\r
-\r
- private void initLayouts(){\r
- JLabel label = new JLabel(getMessages().get("filter.elementcount.label"));\r
- threshold = new JTextField();\r
- criterionType = createCriteriaBox(BirthmarkElementCountComparisonPairFilter.getValidCriteria());\r
- birthmarks = new JComboBox();\r
- birthmarks.setRenderer(new BirthmarkServiceListCellRenderer(new Dimension(200, 20), 60));\r
- JLabel label2 = new JLabel(getMessages().get("filter.elementcount.label.next"));\r
- targetType = createTargetBox();\r
-\r
- setLayout(new GridLayout(6, 1));\r
- add(label);\r
- add(birthmarks);\r
- add(label2);\r
- add(targetType);\r
- add(criterionType);\r
- add(threshold);\r
- }\r
-\r
- private String getBirthmarkType(){\r
- BirthmarkSpi service = (BirthmarkSpi)birthmarks.getSelectedItem();\r
- if(service != null){\r
- return service.getType();\r
- }\r
- throw new IllegalStateException("invalid birthmarks");\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.filter;
+
+/*
+ * $Id$
+ */
+
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+
+import jp.sourceforge.stigmata.ComparisonPairFilter;
+import jp.sourceforge.stigmata.filter.BirthmarkElementCountComparisonPairFilter;
+import jp.sourceforge.stigmata.filter.BirthmarkElementCountComparisonPairFilterService;
+import jp.sourceforge.stigmata.filter.FilterTarget;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
+import jp.sourceforge.stigmata.ui.swing.BirthmarkServiceListCellRenderer;
+import jp.sourceforge.stigmata.ui.swing.BirthmarkServiceListener;
+import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkElementCountComparisonPairFilterComponentService extends AbstractComparisonPairFilterComponentService implements BirthmarkServiceListener{
+ private Pane pane;
+
+ public ComparisonPairFilterPane createComponent(StigmataFrame frame, ComparisonPairFilterSpi service){
+ pane = new Pane(frame, service);
+ return pane;
+ }
+
+ public String getFilterName(){
+ return "elementcount";
+ }
+
+ public void serviceAdded(BirthmarkSpi service){
+ pane.serviceAdded(service);
+ }
+
+ public void serviceRemoved(BirthmarkSpi service){
+ pane.serviceRemoved(service);
+ }
+
+ public ComparisonPairFilterSpi getComparisonPairFilterService(){
+ return new BirthmarkElementCountComparisonPairFilterService();
+ }
+
+ private static class Pane extends ComparisonPairFilterPane implements BirthmarkServiceListener{
+ private static final long serialVersionUID = -6398073942592186671L;
+
+ private ComparisonPairFilterSpi service;
+ private JComboBox criterionType;
+ private JTextField threshold;
+ private JComboBox targetType;
+ private JComboBox birthmarks;
+
+ public Pane(StigmataFrame frame, ComparisonPairFilterSpi service){
+ super(frame);
+ this.service = service;
+ initLayouts();
+ }
+
+ public void serviceAdded(BirthmarkSpi service){
+ birthmarks.addItem(service);
+ }
+
+ public void serviceRemoved(BirthmarkSpi service){
+ birthmarks.removeItem(service);
+ }
+
+ @Override
+ public String[] getErrors(){
+ List<String> errors = new ArrayList<String>();
+ if(threshold.getText().trim().equals("")){
+ errors.add(getMessages().get("error.empty.threshold"));
+ }
+ try{
+ int v = Integer.parseInt(threshold.getText());
+ if(v < 0){
+ errors.add(getMessages().format("error.negative.value", v));
+ }
+ } catch(NumberFormatException e){
+ errors.add(getMessages().format("error.invalid.format.integer", threshold.getText()));
+ }
+
+ return errors.toArray(new String[errors.size()]);
+ }
+
+ @Override
+ public ComparisonPairFilter getFilter(){
+ try{
+ BirthmarkElementCountComparisonPairFilter filter = new BirthmarkElementCountComparisonPairFilter(service);
+ filter.setBirthmarkType(getBirthmarkType());
+ filter.setCriterion(getCriterion((String)criterionType.getSelectedItem()));
+ filter.setThreshold(Integer.parseInt(threshold.getText()));
+ filter.setTarget(getTarget((String)targetType.getSelectedItem()));
+
+ return filter;
+ } catch(Exception e){
+ }
+ return null;
+ }
+
+ @Override
+ public void resetComponents(){
+ threshold.setText("");
+ criterionType.setSelectedIndex(0);
+ targetType.setSelectedItem(getDisplayTarget(FilterTarget.BOTH_TARGETS));
+ }
+
+ @Override
+ public void setFilter(ComparisonPairFilter cpf){
+ BirthmarkElementCountComparisonPairFilter filter = (BirthmarkElementCountComparisonPairFilter)cpf;
+ criterionType.setSelectedItem(getDisplayCriterion(filter.getCriterion()));
+ threshold.setText(String.valueOf(filter.getThreshold()));
+ targetType.setSelectedItem(getDisplayTarget(filter.getTarget()));
+ }
+
+ private void initLayouts(){
+ JLabel label = new JLabel(getMessages().get("filter.elementcount.label"));
+ threshold = new JTextField();
+ criterionType = createCriteriaBox(BirthmarkElementCountComparisonPairFilter.getValidCriteria());
+ birthmarks = new JComboBox();
+ birthmarks.setRenderer(new BirthmarkServiceListCellRenderer(new Dimension(200, 20), 60));
+ JLabel label2 = new JLabel(getMessages().get("filter.elementcount.label.next"));
+ targetType = createTargetBox();
+
+ setLayout(new GridLayout(6, 1));
+ add(label);
+ add(birthmarks);
+ add(label2);
+ add(targetType);
+ add(criterionType);
+ add(threshold);
+ }
+
+ private String getBirthmarkType(){
+ BirthmarkSpi service = (BirthmarkSpi)birthmarks.getSelectedItem();
+ if(service != null){
+ return service.getType();
+ }
+ throw new IllegalStateException("invalid birthmarks");
+ }
+ }
+}
-package jp.naist.se.stigmata.ui.swing.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.Locale;\r
-\r
-import jp.naist.se.stigmata.spi.ComparisonPairFilterSpi;\r
-import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$\r
- */\r
-public interface ComparisonPairFilterComponentService{\r
- public String getDisplayFilterName(Locale locale);\r
-\r
- public String getDisplayFilterName();\r
-\r
- public String getFilterName();\r
-\r
- public ComparisonPairFilterPane createComponent(StigmataFrame frame, ComparisonPairFilterSpi service);\r
-\r
- public ComparisonPairFilterSpi getComparisonPairFilterService();\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.filter;
+
+/*
+ * $Id$
+ */
+
+import java.util.Locale;
+
+import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
+import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$
+ */
+public interface ComparisonPairFilterComponentService{
+ public String getDisplayFilterName(Locale locale);
+
+ public String getDisplayFilterName();
+
+ public String getFilterName();
+
+ public ComparisonPairFilterPane createComponent(StigmataFrame frame, ComparisonPairFilterSpi service);
+
+ public ComparisonPairFilterSpi getComparisonPairFilterService();
+}
-package jp.naist.se.stigmata.ui.swing.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.ComparisonPairFilter;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public interface ComparisonPairFilterListener{\r
- public void filterAdded(ComparisonPairFilter filter);\r
-\r
- public void filterRemoved(ComparisonPairFilter filter);\r
-\r
- public void filterUpdated(ComparisonPairFilter oldfilter, ComparisonPairFilter newfilter);\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.filter;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.ComparisonPairFilter;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public interface ComparisonPairFilterListener{
+ public void filterAdded(ComparisonPairFilter filter);
+
+ public void filterRemoved(ComparisonPairFilter filter);
+
+ public void filterUpdated(ComparisonPairFilter oldfilter, ComparisonPairFilter newfilter);
+}
-package jp.naist.se.stigmata.ui.swing.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-\r
-import javax.swing.JComboBox;\r
-import javax.swing.JPanel;\r
-\r
-import jp.naist.se.stigmata.ComparisonPairFilter;\r
-import jp.naist.se.stigmata.filter.Criterion;\r
-import jp.naist.se.stigmata.filter.FilterTarget;\r
-import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
-import jp.sourceforge.talisman.i18n.Messages;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public abstract class ComparisonPairFilterPane extends JPanel{\r
- private jp.naist.se.stigmata.ui.swing.StigmataFrame stigmata;\r
- private Map<String, Criterion> criterionMap = new HashMap<String, Criterion>();\r
- private Map<String, FilterTarget> targetMap = new HashMap<String, FilterTarget>();\r
-\r
- public ComparisonPairFilterPane(StigmataFrame frame){\r
- this.stigmata = frame;\r
- }\r
-\r
- public Messages getMessages(){\r
- return stigmata.getMessages();\r
- }\r
-\r
- public abstract String[] getErrors();\r
-\r
- public abstract void setFilter(ComparisonPairFilter filter);\r
-\r
- public abstract ComparisonPairFilter getFilter();\r
-\r
- public abstract void resetComponents();\r
-\r
- public JComboBox createTargetBox(){\r
- JComboBox combo = new JComboBox();\r
- combo.setEditable(false);\r
- for(FilterTarget target: FilterTarget.values()){\r
- String value = getMessages().get("target." + target.name());\r
- combo.addItem(value);\r
- targetMap.put(value, target);\r
- }\r
- return combo;\r
- }\r
-\r
- public FilterTarget getTarget(String value){\r
- return targetMap.get(value);\r
- }\r
-\r
- public String getDisplayTarget(FilterTarget target){\r
- return getMessages().get("target." + target.name());\r
- }\r
-\r
- public JComboBox createCriteriaBox(Criterion[] criteria){\r
- JComboBox combo = new JComboBox();\r
- combo.setEditable(false);\r
- for(int i = 0; i < criteria.length; i++){\r
- String value = getMessages().get("criterion." + criteria[i].name());\r
- combo.addItem(value);\r
- criterionMap.put(value, criteria[i]);\r
- }\r
-\r
- return combo;\r
- }\r
-\r
- public Criterion getCriterion(String value){\r
- return criterionMap.get(value);\r
- }\r
-\r
- public String getDisplayCriterion(Criterion criterion){\r
- return getMessages().get("criterion." + criterion.name());\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.filter;
+
+/*
+ * $Id$
+ */
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.JComboBox;
+import javax.swing.JPanel;
+
+import jp.sourceforge.stigmata.ComparisonPairFilter;
+import jp.sourceforge.stigmata.filter.Criterion;
+import jp.sourceforge.stigmata.filter.FilterTarget;
+import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
+import jp.sourceforge.talisman.i18n.Messages;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public abstract class ComparisonPairFilterPane extends JPanel{
+ private jp.sourceforge.stigmata.ui.swing.StigmataFrame stigmata;
+ private Map<String, Criterion> criterionMap = new HashMap<String, Criterion>();
+ private Map<String, FilterTarget> targetMap = new HashMap<String, FilterTarget>();
+
+ public ComparisonPairFilterPane(StigmataFrame frame){
+ this.stigmata = frame;
+ }
+
+ public Messages getMessages(){
+ return stigmata.getMessages();
+ }
+
+ public abstract String[] getErrors();
+
+ public abstract void setFilter(ComparisonPairFilter filter);
+
+ public abstract ComparisonPairFilter getFilter();
+
+ public abstract void resetComponents();
+
+ public JComboBox createTargetBox(){
+ JComboBox combo = new JComboBox();
+ combo.setEditable(false);
+ for(FilterTarget target: FilterTarget.values()){
+ String value = getMessages().get("target." + target.name());
+ combo.addItem(value);
+ targetMap.put(value, target);
+ }
+ return combo;
+ }
+
+ public FilterTarget getTarget(String value){
+ return targetMap.get(value);
+ }
+
+ public String getDisplayTarget(FilterTarget target){
+ return getMessages().get("target." + target.name());
+ }
+
+ public JComboBox createCriteriaBox(Criterion[] criteria){
+ JComboBox combo = new JComboBox();
+ combo.setEditable(false);
+ for(int i = 0; i < criteria.length; i++){
+ String value = getMessages().get("criterion." + criteria[i].name());
+ combo.addItem(value);
+ criterionMap.put(value, criteria[i]);
+ }
+
+ return combo;
+ }
+
+ public Criterion getCriterion(String value){
+ return criterionMap.get(value);
+ }
+
+ public String getDisplayCriterion(Criterion criterion){
+ return getMessages().get("criterion." + criterion.name());
+ }
+}
-package jp.naist.se.stigmata.ui.swing.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.ComparisonPairFilter;\r
-import jp.naist.se.stigmata.ComparisonPairFilterSet;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public interface ComparisonPairFilterRetainable{\r
- public void filterSelected(ComparisonPairFilter filter);\r
-\r
- public void addFilterSet(ComparisonPairFilterSet filter);\r
-\r
- public void removeFilterSet(String name);\r
-\r
- public void updateFilterSet(String name, ComparisonPairFilterSet filter);\r
-\r
- public ComparisonPairFilterSet getFilterSet(String name);\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.filter;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.ComparisonPairFilter;
+import jp.sourceforge.stigmata.ComparisonPairFilterSet;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public interface ComparisonPairFilterRetainable{
+ public void filterSelected(ComparisonPairFilter filter);
+
+ public void addFilterSet(ComparisonPairFilterSet filter);
+
+ public void removeFilterSet(String name);
+
+ public void updateFilterSet(String name, ComparisonPairFilterSet filter);
+
+ public ComparisonPairFilterSet getFilterSet(String name);
+}
-package jp.naist.se.stigmata.ui.swing.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.CardLayout;\r
-import java.awt.Dimension;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.awt.event.ItemEvent;\r
-import java.awt.event.ItemListener;\r
-import java.util.ArrayList;\r
-import java.util.HashMap;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-import javax.swing.Box;\r
-import javax.swing.JButton;\r
-import javax.swing.JComboBox;\r
-import javax.swing.JOptionPane;\r
-import javax.swing.JPanel;\r
-\r
-import jp.naist.se.stigmata.ComparisonPairFilter;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-import jp.naist.se.stigmata.spi.ComparisonPairFilterSpi;\r
-import jp.naist.se.stigmata.ui.swing.BirthmarkServiceListener;\r
-import jp.naist.se.stigmata.ui.swing.GUIUtility;\r
-import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
-import jp.sourceforge.talisman.i18n.Messages;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$\r
- */\r
-public class FilterEditingPane extends JPanel{\r
- private static final long serialVersionUID = -2607954525579006086L;\r
-\r
- private StigmataFrame stigmata;\r
- private ComparisonPairFilter filter;\r
- private JPanel cardComponent;\r
- private CardLayout card;\r
- private JComboBox combo;\r
- private JButton addButton;\r
- private JButton updateButton;\r
- private JButton removeButton;\r
- private ComparisonPairFilterPane currentPane = null;\r
- \r
- private Map<String, ComparisonPairFilterPane> paneMap = new HashMap<String, ComparisonPairFilterPane>();\r
- private List<ComparisonPairFilterListener> listeners = new ArrayList<ComparisonPairFilterListener>();\r
-\r
- public FilterEditingPane(StigmataFrame stigmata){\r
- this.stigmata = stigmata;\r
-\r
- initLayouts();\r
- initData();\r
- updateButtonEnabled();\r
- }\r
-\r
- public void reset(){\r
- initData();\r
- }\r
-\r
- public void addComparisonPairFilterListener(ComparisonPairFilterListener listener){\r
- listeners.add(listener);\r
- }\r
-\r
- public void removeComparisonPairFilterListener(ComparisonPairFilterListener listener){\r
- listeners.remove(listener);\r
- }\r
-\r
- public void setFilter(ComparisonPairFilter filter){\r
- resetOldComponent();\r
- this.filter = filter;\r
- if(filter != null && filter.getService() != null){\r
- ComparisonPairFilterSpi service = filter.getService();\r
- String name = service.getDisplayFilterName();\r
-\r
- combo.setSelectedItem(name);\r
- card.show(cardComponent, name);\r
- paneMap.get(name).setFilter(filter);\r
- }\r
- updateButtonEnabled();\r
- }\r
-\r
- private void resetOldComponent(){\r
- if(filter != null){\r
- paneMap.get(filter.getService().getDisplayFilterName()).resetComponents();\r
- }\r
- }\r
-\r
- private void updateButtonEnabled(){\r
- addButton.setEnabled(currentPane != null);\r
- removeButton.setEnabled(filter != null);\r
- updateButton.setEnabled(filter != null);\r
- }\r
-\r
- private void initData(){\r
- cardComponent.removeAll();\r
- combo.removeAllItems();\r
- paneMap.clear();\r
-\r
- JPanel dummyPanel = new JPanel();\r
- card.addLayoutComponent(dummyPanel, "");\r
- cardComponent.add(dummyPanel, "");\r
- combo.addItem("");\r
-\r
- \r
- for(Iterator<ComparisonPairFilterComponentService> i = stigmata.getEnvironment().lookupProviders(ComparisonPairFilterComponentService.class); i.hasNext();){\r
- ComparisonPairFilterComponentService service = i.next();\r
- String name = service.getDisplayFilterName();\r
-\r
- ComparisonPairFilterPane pane = service.createComponent(stigmata, service.getComparisonPairFilterService());\r
- if(pane instanceof BirthmarkServiceListener){\r
- for(BirthmarkSpi bs: stigmata.getEnvironment().getServices()){\r
- ((BirthmarkServiceListener)pane).serviceAdded(bs);\r
- }\r
- stigmata.addBirthmarkServiceListener((BirthmarkServiceListener)pane);\r
- }\r
-\r
- pane.setMaximumSize(new Dimension(Integer.MAX_VALUE, 500));\r
- Box b = Box.createVerticalBox();\r
- b.add(pane);\r
- b.add(Box.createVerticalGlue());\r
-\r
- combo.addItem(name);\r
- card.addLayoutComponent(b, name);\r
- cardComponent.add(b, name);\r
- paneMap.put(name, pane);\r
- }\r
- }\r
-\r
- private void initLayouts(){\r
- Messages messages = stigmata.getMessages();\r
- cardComponent = new JPanel();\r
- combo = new JComboBox();\r
- addButton = GUIUtility.createButton(messages, "newfilter");\r
- removeButton = GUIUtility.createButton(messages, "removefilter");\r
- updateButton = GUIUtility.createButton(messages, "updatefilter");\r
-\r
- combo.addItemListener(new ItemListener(){\r
- public void itemStateChanged(ItemEvent e){\r
- String item = (String)combo.getSelectedItem();\r
- card.show(cardComponent, item);\r
- if(paneMap.get(item) != null){\r
- if(filter != null){\r
- String oldType = filter.getService().getDisplayFilterName();\r
- if(item.equals(oldType)){\r
- paneMap.get(item).setFilter(filter);\r
- }\r
- else{\r
- currentPane.resetComponents();\r
- }\r
- }\r
- currentPane = paneMap.get(item);\r
- }\r
- else{\r
- currentPane = null;\r
- }\r
- updateButtonEnabled();\r
- }\r
- });\r
- ActionListener listener = new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- String command = e.getActionCommand();\r
- ComparisonPairFilter newfilter = currentPane.getFilter();\r
- if(newfilter != null){\r
- for(ComparisonPairFilterListener listener: listeners){\r
- if(command.equals("updatefilter")){\r
- listener.filterUpdated(filter, newfilter);\r
- }\r
- else{\r
- listener.filterAdded(newfilter);\r
- }\r
- }\r
- }\r
- else{\r
- showErrorMessage(currentPane.getErrors());\r
- }\r
- }\r
- };\r
- addButton.addActionListener(listener);\r
- updateButton.addActionListener(listener);\r
- removeButton.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- for(ComparisonPairFilterListener listener: listeners){\r
- listener.filterRemoved(filter);\r
- } \r
- }\r
- });\r
-\r
- Box south = Box.createHorizontalBox();\r
- south.add(Box.createHorizontalGlue());\r
- south.add(addButton);\r
- south.add(Box.createHorizontalGlue());\r
- south.add(updateButton);\r
- south.add(Box.createHorizontalGlue());\r
- south.add(removeButton);\r
- south.add(Box.createHorizontalGlue());\r
-\r
- cardComponent.setLayout(card = new CardLayout());\r
- cardComponent.setMaximumSize(new Dimension(Integer.MAX_VALUE, cardComponent.getMaximumSize().height));\r
- Box center = Box.createVerticalBox();\r
- center.add(cardComponent);\r
- center.add(Box.createVerticalGlue());\r
-\r
- setLayout(new BorderLayout());\r
- add(combo, BorderLayout.NORTH);\r
- add(center, BorderLayout.CENTER);\r
- add(south, BorderLayout.SOUTH);\r
- }\r
-\r
- private void showErrorMessage(String[] messages){\r
- StringBuilder sb = new StringBuilder("<html><body>");\r
- sb.append("<p>").append(stigmata.getMessages().get("error.filter.cannotcreate")).append("</p>");\r
- sb.append("<ul>");\r
- for(int i = 0; i < messages.length; i++){\r
- sb.append("<li>").append(messages[i]).append("</li>");\r
- }\r
- sb.append("</ul></body></html>");\r
-\r
- JOptionPane.showMessageDialog(\r
- stigmata, new String(sb), stigmata.getMessages().get("error.dialog.title"),\r
- JOptionPane.ERROR_MESSAGE\r
- );\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.filter;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.CardLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import jp.sourceforge.stigmata.ComparisonPairFilter;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
+import jp.sourceforge.stigmata.ui.swing.BirthmarkServiceListener;
+import jp.sourceforge.stigmata.ui.swing.GUIUtility;
+import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
+import jp.sourceforge.talisman.i18n.Messages;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$
+ */
+public class FilterEditingPane extends JPanel{
+ private static final long serialVersionUID = -2607954525579006086L;
+
+ private StigmataFrame stigmata;
+ private ComparisonPairFilter filter;
+ private JPanel cardComponent;
+ private CardLayout card;
+ private JComboBox combo;
+ private JButton addButton;
+ private JButton updateButton;
+ private JButton removeButton;
+ private ComparisonPairFilterPane currentPane = null;
+
+ private Map<String, ComparisonPairFilterPane> paneMap = new HashMap<String, ComparisonPairFilterPane>();
+ private List<ComparisonPairFilterListener> listeners = new ArrayList<ComparisonPairFilterListener>();
+
+ public FilterEditingPane(StigmataFrame stigmata){
+ this.stigmata = stigmata;
+
+ initLayouts();
+ initData();
+ updateButtonEnabled();
+ }
+
+ public void reset(){
+ initData();
+ }
+
+ public void addComparisonPairFilterListener(ComparisonPairFilterListener listener){
+ listeners.add(listener);
+ }
+
+ public void removeComparisonPairFilterListener(ComparisonPairFilterListener listener){
+ listeners.remove(listener);
+ }
+
+ public void setFilter(ComparisonPairFilter filter){
+ resetOldComponent();
+ this.filter = filter;
+ if(filter != null && filter.getService() != null){
+ ComparisonPairFilterSpi service = filter.getService();
+ String name = service.getDisplayFilterName();
+
+ combo.setSelectedItem(name);
+ card.show(cardComponent, name);
+ paneMap.get(name).setFilter(filter);
+ }
+ updateButtonEnabled();
+ }
+
+ private void resetOldComponent(){
+ if(filter != null){
+ paneMap.get(filter.getService().getDisplayFilterName()).resetComponents();
+ }
+ }
+
+ private void updateButtonEnabled(){
+ addButton.setEnabled(currentPane != null);
+ removeButton.setEnabled(filter != null);
+ updateButton.setEnabled(filter != null);
+ }
+
+ private void initData(){
+ cardComponent.removeAll();
+ combo.removeAllItems();
+ paneMap.clear();
+
+ JPanel dummyPanel = new JPanel();
+ card.addLayoutComponent(dummyPanel, "");
+ cardComponent.add(dummyPanel, "");
+ combo.addItem("");
+
+
+ for(Iterator<ComparisonPairFilterComponentService> i = stigmata.getEnvironment().lookupProviders(ComparisonPairFilterComponentService.class); i.hasNext();){
+ ComparisonPairFilterComponentService service = i.next();
+ String name = service.getDisplayFilterName();
+
+ ComparisonPairFilterPane pane = service.createComponent(stigmata, service.getComparisonPairFilterService());
+ if(pane instanceof BirthmarkServiceListener){
+ for(BirthmarkSpi bs: stigmata.getEnvironment().getServices()){
+ ((BirthmarkServiceListener)pane).serviceAdded(bs);
+ }
+ stigmata.addBirthmarkServiceListener((BirthmarkServiceListener)pane);
+ }
+
+ pane.setMaximumSize(new Dimension(Integer.MAX_VALUE, 500));
+ Box b = Box.createVerticalBox();
+ b.add(pane);
+ b.add(Box.createVerticalGlue());
+
+ combo.addItem(name);
+ card.addLayoutComponent(b, name);
+ cardComponent.add(b, name);
+ paneMap.put(name, pane);
+ }
+ }
+
+ private void initLayouts(){
+ Messages messages = stigmata.getMessages();
+ cardComponent = new JPanel();
+ combo = new JComboBox();
+ addButton = GUIUtility.createButton(messages, "newfilter");
+ removeButton = GUIUtility.createButton(messages, "removefilter");
+ updateButton = GUIUtility.createButton(messages, "updatefilter");
+
+ combo.addItemListener(new ItemListener(){
+ public void itemStateChanged(ItemEvent e){
+ String item = (String)combo.getSelectedItem();
+ card.show(cardComponent, item);
+ if(paneMap.get(item) != null){
+ if(filter != null){
+ String oldType = filter.getService().getDisplayFilterName();
+ if(item.equals(oldType)){
+ paneMap.get(item).setFilter(filter);
+ }
+ else{
+ currentPane.resetComponents();
+ }
+ }
+ currentPane = paneMap.get(item);
+ }
+ else{
+ currentPane = null;
+ }
+ updateButtonEnabled();
+ }
+ });
+ ActionListener listener = new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ String command = e.getActionCommand();
+ ComparisonPairFilter newfilter = currentPane.getFilter();
+ if(newfilter != null){
+ for(ComparisonPairFilterListener listener: listeners){
+ if(command.equals("updatefilter")){
+ listener.filterUpdated(filter, newfilter);
+ }
+ else{
+ listener.filterAdded(newfilter);
+ }
+ }
+ }
+ else{
+ showErrorMessage(currentPane.getErrors());
+ }
+ }
+ };
+ addButton.addActionListener(listener);
+ updateButton.addActionListener(listener);
+ removeButton.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ for(ComparisonPairFilterListener listener: listeners){
+ listener.filterRemoved(filter);
+ }
+ }
+ });
+
+ Box south = Box.createHorizontalBox();
+ south.add(Box.createHorizontalGlue());
+ south.add(addButton);
+ south.add(Box.createHorizontalGlue());
+ south.add(updateButton);
+ south.add(Box.createHorizontalGlue());
+ south.add(removeButton);
+ south.add(Box.createHorizontalGlue());
+
+ cardComponent.setLayout(card = new CardLayout());
+ cardComponent.setMaximumSize(new Dimension(Integer.MAX_VALUE, cardComponent.getMaximumSize().height));
+ Box center = Box.createVerticalBox();
+ center.add(cardComponent);
+ center.add(Box.createVerticalGlue());
+
+ setLayout(new BorderLayout());
+ add(combo, BorderLayout.NORTH);
+ add(center, BorderLayout.CENTER);
+ add(south, BorderLayout.SOUTH);
+ }
+
+ private void showErrorMessage(String[] messages){
+ StringBuilder sb = new StringBuilder("<html><body>");
+ sb.append("<p>").append(stigmata.getMessages().get("error.filter.cannotcreate")).append("</p>");
+ sb.append("<ul>");
+ for(int i = 0; i < messages.length; i++){
+ sb.append("<li>").append(messages[i]).append("</li>");
+ }
+ sb.append("</ul></body></html>");
+
+ JOptionPane.showMessageDialog(
+ stigmata, new String(sb), stigmata.getMessages().get("error.dialog.title"),
+ JOptionPane.ERROR_MESSAGE
+ );
+ }
+}
-package jp.naist.se.stigmata.ui.swing.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.GridLayout;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-\r
-import javax.swing.Box;\r
-import javax.swing.ButtonGroup;\r
-import javax.swing.DefaultListModel;\r
-import javax.swing.JButton;\r
-import javax.swing.JList;\r
-import javax.swing.JPanel;\r
-import javax.swing.JRadioButton;\r
-import javax.swing.JScrollPane;\r
-import javax.swing.JTextField;\r
-import javax.swing.ListSelectionModel;\r
-import javax.swing.event.DocumentEvent;\r
-import javax.swing.event.DocumentListener;\r
-import javax.swing.event.ListSelectionEvent;\r
-import javax.swing.event.ListSelectionListener;\r
-\r
-import jp.naist.se.stigmata.ComparisonPairFilter;\r
-import jp.naist.se.stigmata.ComparisonPairFilterSet;\r
-import jp.naist.se.stigmata.ui.swing.GUIUtility;\r
-import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
-import jp.sourceforge.talisman.i18n.Messages;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$\r
- */\r
-public class FilterSetDefinitionPane extends JPanel implements ComparisonPairFilterListener{\r
- private static final long serialVersionUID = 7519306603672717119L;\r
-\r
- private ComparisonPairFilterRetainable manager;\r
- private StigmataFrame stigmata;\r
-\r
- private JTextField name;\r
- private JRadioButton matchall, matchany;\r
- private JList list;\r
- private DefaultListModel model;\r
- private ComparisonPairFilterSet filterset;\r
- private boolean buttonShown = true;\r
-\r
- private JButton addfilter;\r
- private JButton updatefilter;\r
- private JButton removefilter;\r
- private JButton upButton;\r
- private JButton downButton;\r
- \r
- public FilterSetDefinitionPane(StigmataFrame frame, ComparisonPairFilterRetainable manager){\r
- this(frame, manager, true);\r
- }\r
-\r
- public FilterSetDefinitionPane(StigmataFrame frame, ComparisonPairFilterRetainable manager, boolean showButtons){\r
- this.stigmata = frame;\r
- this.manager = manager;\r
- \r
- initLayouts(showButtons);\r
- }\r
-\r
- public void reset(){\r
- // nothing to do...\r
- }\r
-\r
- public void setFilterSet(ComparisonPairFilterSet filterset){\r
- this.filterset = filterset;\r
- if(filterset != null){\r
- model.removeAllElements();\r
-\r
- name.setText(filterset.getName());\r
- matchall.setSelected(filterset.isMatchAll());\r
- matchany.setSelected(filterset.isMatchAny());\r
- for(ComparisonPairFilter filter: filterset){\r
- model.addElement(filter);\r
- }\r
- }\r
- }\r
-\r
- public void filterAdded(ComparisonPairFilter filter){\r
- model.addElement(filter);\r
- list.setSelectedIndex(model.getSize() - 1);\r
- updateButtonEnabled();\r
- }\r
-\r
- public void filterRemoved(ComparisonPairFilter filter){\r
- model.removeElement(filter);\r
- list.clearSelection();\r
- updateButtonEnabled();\r
- }\r
-\r
- public void filterUpdated(ComparisonPairFilter oldfilter, ComparisonPairFilter newfilter){\r
- int index = model.indexOf(oldfilter);\r
- if(index >= 0){\r
- model.setElementAt(newfilter, index);\r
- }\r
- updateButtonEnabled();\r
- }\r
-\r
- public void setEnabled(boolean flag){\r
- super.setEnabled(flag);\r
-\r
- matchall.setEnabled(flag);\r
- matchany.setEnabled(flag);\r
- name.setEnabled(flag);\r
- list.setEnabled(flag);\r
- }\r
-\r
- private void initLayouts(boolean showButtons){\r
- Messages messages = stigmata.getMessages();\r
- this.buttonShown = showButtons;\r
-\r
- ButtonGroup group = new ButtonGroup();\r
- matchall = new JRadioButton(messages.get("matchall.button.label"), true);\r
- matchall.setToolTipText(messages.get("matchall.button.tooltip"));\r
- group.add(matchall);\r
- matchany = new JRadioButton(messages.get("matchany.button.label"), false);\r
- matchany.setToolTipText(messages.get("matchany.button.tooltip"));\r
- group.add(matchany);\r
- \r
- JPanel north = new JPanel(new GridLayout(3, 1));\r
- north.add(name = new JTextField());\r
- north.add(matchall);\r
- north.add(matchany);\r
-\r
- addfilter = GUIUtility.createButton(messages, "newfilterset");\r
- updatefilter = GUIUtility.createButton(messages, "updatefilterset");\r
- removefilter = GUIUtility.createButton(messages, "removefilterset");\r
- upButton = GUIUtility.createButton(messages, "moveup");\r
- downButton = GUIUtility.createButton(messages, "movedown");\r
- \r
- Box south = Box.createHorizontalBox();\r
- south.add(Box.createHorizontalGlue());\r
- south.add(addfilter);\r
- south.add(Box.createHorizontalGlue());\r
- south.add(updatefilter);\r
- south.add(Box.createHorizontalGlue());\r
- south.add(removefilter);\r
- south.add(Box.createHorizontalGlue());\r
- south.add(upButton);\r
- south.add(Box.createHorizontalGlue());\r
- south.add(downButton);\r
- south.add(Box.createHorizontalGlue());\r
-\r
- model = new DefaultListModel();\r
- list = new JList(model);\r
- list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
-\r
- list.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
- public void valueChanged(ListSelectionEvent e){\r
- manager.filterSelected((ComparisonPairFilter)list.getSelectedValue());\r
- updateButtonEnabled();\r
- }\r
- });\r
-\r
- addfilter.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- ComparisonPairFilterSet current = createCurrentFilterSet();\r
- filterset = current;\r
- manager.addFilterSet(filterset);\r
- list.clearSelection();\r
- manager.filterSelected(null);\r
-\r
- updateButtonEnabled();\r
- }\r
- });\r
-\r
- removefilter.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- manager.removeFilterSet(filterset.getName());\r
- filterset = null;\r
- name.setText("");\r
- matchall.setSelected(true);\r
- matchany.setSelected(false);\r
- model.removeAllElements();\r
- manager.filterSelected(null);\r
-\r
- updateButtonEnabled();\r
- }\r
- });\r
-\r
- updatefilter.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- ComparisonPairFilterSet current = createCurrentFilterSet();\r
- manager.updateFilterSet(filterset.getName(), current);\r
- filterset = current;\r
- list.clearSelection();\r
- manager.filterSelected(null);\r
- updateButtonEnabled();\r
- }\r
- });\r
-\r
- ActionListener listener = new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- int index = list.getSelectedIndex();\r
- int step = 1;\r
- if(e.getActionCommand().equals("moveup")) step = -1;\r
- Object element1 = model.get(index);\r
- Object element2 = model.get(index + step);\r
- model.setElementAt(element1, index + step);\r
- model.setElementAt(element2, index);\r
- list.setSelectedIndex(index + step);\r
- }\r
- };\r
- name.getDocument().addDocumentListener(new DocumentListener(){\r
- public void changedUpdate(DocumentEvent e){\r
- updateButtonEnabled();\r
- }\r
-\r
- public void insertUpdate(DocumentEvent e){\r
- updateButtonEnabled();\r
- }\r
-\r
- public void removeUpdate(DocumentEvent e){\r
- updateButtonEnabled();\r
- }\r
- });\r
- upButton.addActionListener(listener);\r
- downButton.addActionListener(listener);\r
-\r
- JScrollPane listpane = new JScrollPane(list);\r
- setLayout(new BorderLayout());\r
- add(north, BorderLayout.NORTH);\r
- add(listpane, BorderLayout.CENTER);\r
- if(showButtons){\r
- add(south, BorderLayout.SOUTH);\r
- }\r
-\r
- GUIUtility.decorateJComponent(messages, name, "filtername");\r
- GUIUtility.decorateJComponent(messages, listpane, "filterorder");\r
-\r
- setEnabled(buttonShown);\r
-\r
- updateButtonEnabled();\r
- }\r
-\r
- private void updateButtonEnabled(){\r
- if(buttonShown){\r
- int index = list.getSelectedIndex();\r
- int size = model.getSize();\r
-\r
- upButton.setEnabled(size > 1 && index > 0);\r
- downButton.setEnabled(size > 1 && index < (size - 1));\r
- updatefilter.setEnabled(filterset != null);\r
- addfilter.setEnabled(size > 0 && name.getText().length() > 0 && manager.getFilterSet(name.getText()) == null);\r
- removefilter.setEnabled(filterset != null);\r
- }\r
- }\r
-\r
- private ComparisonPairFilterSet createCurrentFilterSet(){\r
- ComparisonPairFilterSet current = new ComparisonPairFilterSet();\r
- current.setName(name.getText());\r
- if(matchall.isSelected()) current.setMatchAll();\r
- else if(matchany.isSelected()) current.setMatchAny();\r
- current.removeAllFilters();\r
-\r
- for(int i = 0; i < model.getSize(); i++){\r
- current.addFilter((ComparisonPairFilter)model.get(i));\r
- }\r
- return current;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.filter;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.Box;
+import javax.swing.ButtonGroup;
+import javax.swing.DefaultListModel;
+import javax.swing.JButton;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import jp.sourceforge.stigmata.ComparisonPairFilter;
+import jp.sourceforge.stigmata.ComparisonPairFilterSet;
+import jp.sourceforge.stigmata.ui.swing.GUIUtility;
+import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
+import jp.sourceforge.talisman.i18n.Messages;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$
+ */
+public class FilterSetDefinitionPane extends JPanel implements ComparisonPairFilterListener{
+ private static final long serialVersionUID = 7519306603672717119L;
+
+ private ComparisonPairFilterRetainable manager;
+ private StigmataFrame stigmata;
+
+ private JTextField name;
+ private JRadioButton matchall, matchany;
+ private JList list;
+ private DefaultListModel model;
+ private ComparisonPairFilterSet filterset;
+ private boolean buttonShown = true;
+
+ private JButton addfilter;
+ private JButton updatefilter;
+ private JButton removefilter;
+ private JButton upButton;
+ private JButton downButton;
+
+ public FilterSetDefinitionPane(StigmataFrame frame, ComparisonPairFilterRetainable manager){
+ this(frame, manager, true);
+ }
+
+ public FilterSetDefinitionPane(StigmataFrame frame, ComparisonPairFilterRetainable manager, boolean showButtons){
+ this.stigmata = frame;
+ this.manager = manager;
+
+ initLayouts(showButtons);
+ }
+
+ public void reset(){
+ // nothing to do...
+ }
+
+ public void setFilterSet(ComparisonPairFilterSet filterset){
+ this.filterset = filterset;
+ if(filterset != null){
+ model.removeAllElements();
+
+ name.setText(filterset.getName());
+ matchall.setSelected(filterset.isMatchAll());
+ matchany.setSelected(filterset.isMatchAny());
+ for(ComparisonPairFilter filter: filterset){
+ model.addElement(filter);
+ }
+ }
+ }
+
+ public void filterAdded(ComparisonPairFilter filter){
+ model.addElement(filter);
+ list.setSelectedIndex(model.getSize() - 1);
+ updateButtonEnabled();
+ }
+
+ public void filterRemoved(ComparisonPairFilter filter){
+ model.removeElement(filter);
+ list.clearSelection();
+ updateButtonEnabled();
+ }
+
+ public void filterUpdated(ComparisonPairFilter oldfilter, ComparisonPairFilter newfilter){
+ int index = model.indexOf(oldfilter);
+ if(index >= 0){
+ model.setElementAt(newfilter, index);
+ }
+ updateButtonEnabled();
+ }
+
+ public void setEnabled(boolean flag){
+ super.setEnabled(flag);
+
+ matchall.setEnabled(flag);
+ matchany.setEnabled(flag);
+ name.setEnabled(flag);
+ list.setEnabled(flag);
+ }
+
+ private void initLayouts(boolean showButtons){
+ Messages messages = stigmata.getMessages();
+ this.buttonShown = showButtons;
+
+ ButtonGroup group = new ButtonGroup();
+ matchall = new JRadioButton(messages.get("matchall.button.label"), true);
+ matchall.setToolTipText(messages.get("matchall.button.tooltip"));
+ group.add(matchall);
+ matchany = new JRadioButton(messages.get("matchany.button.label"), false);
+ matchany.setToolTipText(messages.get("matchany.button.tooltip"));
+ group.add(matchany);
+
+ JPanel north = new JPanel(new GridLayout(3, 1));
+ north.add(name = new JTextField());
+ north.add(matchall);
+ north.add(matchany);
+
+ addfilter = GUIUtility.createButton(messages, "newfilterset");
+ updatefilter = GUIUtility.createButton(messages, "updatefilterset");
+ removefilter = GUIUtility.createButton(messages, "removefilterset");
+ upButton = GUIUtility.createButton(messages, "moveup");
+ downButton = GUIUtility.createButton(messages, "movedown");
+
+ Box south = Box.createHorizontalBox();
+ south.add(Box.createHorizontalGlue());
+ south.add(addfilter);
+ south.add(Box.createHorizontalGlue());
+ south.add(updatefilter);
+ south.add(Box.createHorizontalGlue());
+ south.add(removefilter);
+ south.add(Box.createHorizontalGlue());
+ south.add(upButton);
+ south.add(Box.createHorizontalGlue());
+ south.add(downButton);
+ south.add(Box.createHorizontalGlue());
+
+ model = new DefaultListModel();
+ list = new JList(model);
+ list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+
+ list.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
+ public void valueChanged(ListSelectionEvent e){
+ manager.filterSelected((ComparisonPairFilter)list.getSelectedValue());
+ updateButtonEnabled();
+ }
+ });
+
+ addfilter.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ ComparisonPairFilterSet current = createCurrentFilterSet();
+ filterset = current;
+ manager.addFilterSet(filterset);
+ list.clearSelection();
+ manager.filterSelected(null);
+
+ updateButtonEnabled();
+ }
+ });
+
+ removefilter.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ manager.removeFilterSet(filterset.getName());
+ filterset = null;
+ name.setText("");
+ matchall.setSelected(true);
+ matchany.setSelected(false);
+ model.removeAllElements();
+ manager.filterSelected(null);
+
+ updateButtonEnabled();
+ }
+ });
+
+ updatefilter.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ ComparisonPairFilterSet current = createCurrentFilterSet();
+ manager.updateFilterSet(filterset.getName(), current);
+ filterset = current;
+ list.clearSelection();
+ manager.filterSelected(null);
+ updateButtonEnabled();
+ }
+ });
+
+ ActionListener listener = new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ int index = list.getSelectedIndex();
+ int step = 1;
+ if(e.getActionCommand().equals("moveup")) step = -1;
+ Object element1 = model.get(index);
+ Object element2 = model.get(index + step);
+ model.setElementAt(element1, index + step);
+ model.setElementAt(element2, index);
+ list.setSelectedIndex(index + step);
+ }
+ };
+ name.getDocument().addDocumentListener(new DocumentListener(){
+ public void changedUpdate(DocumentEvent e){
+ updateButtonEnabled();
+ }
+
+ public void insertUpdate(DocumentEvent e){
+ updateButtonEnabled();
+ }
+
+ public void removeUpdate(DocumentEvent e){
+ updateButtonEnabled();
+ }
+ });
+ upButton.addActionListener(listener);
+ downButton.addActionListener(listener);
+
+ JScrollPane listpane = new JScrollPane(list);
+ setLayout(new BorderLayout());
+ add(north, BorderLayout.NORTH);
+ add(listpane, BorderLayout.CENTER);
+ if(showButtons){
+ add(south, BorderLayout.SOUTH);
+ }
+
+ GUIUtility.decorateJComponent(messages, name, "filtername");
+ GUIUtility.decorateJComponent(messages, listpane, "filterorder");
+
+ setEnabled(buttonShown);
+
+ updateButtonEnabled();
+ }
+
+ private void updateButtonEnabled(){
+ if(buttonShown){
+ int index = list.getSelectedIndex();
+ int size = model.getSize();
+
+ upButton.setEnabled(size > 1 && index > 0);
+ downButton.setEnabled(size > 1 && index < (size - 1));
+ updatefilter.setEnabled(filterset != null);
+ addfilter.setEnabled(size > 0 && name.getText().length() > 0 && manager.getFilterSet(name.getText()) == null);
+ removefilter.setEnabled(filterset != null);
+ }
+ }
+
+ private ComparisonPairFilterSet createCurrentFilterSet(){
+ ComparisonPairFilterSet current = new ComparisonPairFilterSet();
+ current.setName(name.getText());
+ if(matchall.isSelected()) current.setMatchAll();
+ else if(matchany.isSelected()) current.setMatchAny();
+ current.removeAllFilters();
+
+ for(int i = 0; i < model.getSize(); i++){
+ current.addFilter((ComparisonPairFilter)model.get(i));
+ }
+ return current;
+ }
+}
-package jp.naist.se.stigmata.ui.swing.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.GridLayout;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import javax.swing.JComboBox;\r
-import javax.swing.JLabel;\r
-import javax.swing.JTextField;\r
-import javax.swing.event.DocumentEvent;\r
-import javax.swing.event.DocumentListener;\r
-\r
-import jp.naist.se.stigmata.ComparisonPairFilter;\r
-import jp.naist.se.stigmata.filter.SimilarityComparisonPairFilter;\r
-import jp.naist.se.stigmata.filter.SimilarityComparisonPairFilterService;\r
-import jp.naist.se.stigmata.spi.ComparisonPairFilterSpi;\r
-import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$\r
- */\r
-public class SimilarityComparisonPairFilterComponentService extends AbstractComparisonPairFilterComponentService{\r
-\r
- public ComparisonPairFilterPane createComponent(StigmataFrame frame, ComparisonPairFilterSpi service){\r
- return new Pane(frame, service);\r
- }\r
-\r
- public String getFilterName(){\r
- return "similarity";\r
- }\r
-\r
- public ComparisonPairFilterSpi getComparisonPairFilterService(){\r
- return new SimilarityComparisonPairFilterService();\r
- }\r
-\r
- private static class Pane extends ComparisonPairFilterPane{\r
- private static final long serialVersionUID = 8912037614500713027L;\r
- private ComparisonPairFilterSpi service;\r
- private JComboBox criterionType;\r
- private JTextField threshold;\r
-\r
- public Pane(StigmataFrame frame, ComparisonPairFilterSpi service){\r
- super(frame);\r
- this.service = service;\r
- initLayouts();\r
- }\r
-\r
- @Override\r
- public String[] getErrors(){\r
- List<String> errors = new ArrayList<String>();\r
- if(threshold.getText().trim().equals("")){\r
- errors.add(getMessages().get("error.empty.threshold"));\r
- }\r
- try{\r
- double v = Double.parseDouble(threshold.getText());\r
- if(v < 0d){\r
- errors.add(getMessages().format("error.negative.value", v));\r
- }\r
- else if(v > 1.0d){\r
- errors.add(getMessages().format("error.over.range", "0-1"));\r
- }\r
- } catch(NumberFormatException e){\r
- errors.add(getMessages().format("error.invalid.format.double", threshold.getText()));\r
- }\r
-\r
- return errors.toArray(new String[errors.size()]);\r
- }\r
-\r
- @Override\r
- public ComparisonPairFilter getFilter(){\r
- try{\r
- SimilarityComparisonPairFilter filter = new SimilarityComparisonPairFilter(service);\r
- filter.setThreshold(Double.parseDouble(threshold.getText()));\r
- filter.setCriterion(getCriterion((String)criterionType.getSelectedItem()));\r
-\r
- return filter;\r
- } catch(Exception e){\r
- }\r
- return null;\r
- }\r
-\r
- @Override\r
- public void resetComponents(){\r
- threshold.setText("");\r
- criterionType.setSelectedIndex(0);\r
- }\r
-\r
- @Override\r
- public void setFilter(ComparisonPairFilter filter){\r
- if(filter != null){\r
- SimilarityComparisonPairFilter sf = (SimilarityComparisonPairFilter)filter;\r
- criterionType.setSelectedItem(getDisplayCriterion(sf.getCriterion()));\r
- threshold.setText(Double.toString(sf.getThreshold()));\r
- }\r
- else{\r
- resetComponents();\r
- }\r
- }\r
-\r
- private void initLayouts(){\r
- JLabel label = new JLabel(getMessages().get("filter.similarity.label"));\r
- threshold = new JTextField();\r
- criterionType = createCriteriaBox(SimilarityComparisonPairFilter.getValidCriteria());\r
-\r
- setLayout(new GridLayout(3, 1));\r
- add(label);\r
- add(criterionType);\r
- add(threshold);\r
-\r
- threshold.getDocument().addDocumentListener(new DocumentListener(){\r
- public void changedUpdate(DocumentEvent e){\r
- }\r
-\r
- public void insertUpdate(DocumentEvent e){\r
- }\r
-\r
- public void removeUpdate(DocumentEvent e){\r
- }\r
- });\r
- }\r
- };\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.filter;
+
+/*
+ * $Id$
+ */
+
+import java.awt.GridLayout;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+
+import jp.sourceforge.stigmata.ComparisonPairFilter;
+import jp.sourceforge.stigmata.filter.SimilarityComparisonPairFilter;
+import jp.sourceforge.stigmata.filter.SimilarityComparisonPairFilterService;
+import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
+import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$
+ */
+public class SimilarityComparisonPairFilterComponentService extends AbstractComparisonPairFilterComponentService{
+
+ public ComparisonPairFilterPane createComponent(StigmataFrame frame, ComparisonPairFilterSpi service){
+ return new Pane(frame, service);
+ }
+
+ public String getFilterName(){
+ return "similarity";
+ }
+
+ public ComparisonPairFilterSpi getComparisonPairFilterService(){
+ return new SimilarityComparisonPairFilterService();
+ }
+
+ private static class Pane extends ComparisonPairFilterPane{
+ private static final long serialVersionUID = 8912037614500713027L;
+ private ComparisonPairFilterSpi service;
+ private JComboBox criterionType;
+ private JTextField threshold;
+
+ public Pane(StigmataFrame frame, ComparisonPairFilterSpi service){
+ super(frame);
+ this.service = service;
+ initLayouts();
+ }
+
+ @Override
+ public String[] getErrors(){
+ List<String> errors = new ArrayList<String>();
+ if(threshold.getText().trim().equals("")){
+ errors.add(getMessages().get("error.empty.threshold"));
+ }
+ try{
+ double v = Double.parseDouble(threshold.getText());
+ if(v < 0d){
+ errors.add(getMessages().format("error.negative.value", v));
+ }
+ else if(v > 1.0d){
+ errors.add(getMessages().format("error.over.range", "0-1"));
+ }
+ } catch(NumberFormatException e){
+ errors.add(getMessages().format("error.invalid.format.double", threshold.getText()));
+ }
+
+ return errors.toArray(new String[errors.size()]);
+ }
+
+ @Override
+ public ComparisonPairFilter getFilter(){
+ try{
+ SimilarityComparisonPairFilter filter = new SimilarityComparisonPairFilter(service);
+ filter.setThreshold(Double.parseDouble(threshold.getText()));
+ filter.setCriterion(getCriterion((String)criterionType.getSelectedItem()));
+
+ return filter;
+ } catch(Exception e){
+ }
+ return null;
+ }
+
+ @Override
+ public void resetComponents(){
+ threshold.setText("");
+ criterionType.setSelectedIndex(0);
+ }
+
+ @Override
+ public void setFilter(ComparisonPairFilter filter){
+ if(filter != null){
+ SimilarityComparisonPairFilter sf = (SimilarityComparisonPairFilter)filter;
+ criterionType.setSelectedItem(getDisplayCriterion(sf.getCriterion()));
+ threshold.setText(Double.toString(sf.getThreshold()));
+ }
+ else{
+ resetComponents();
+ }
+ }
+
+ private void initLayouts(){
+ JLabel label = new JLabel(getMessages().get("filter.similarity.label"));
+ threshold = new JTextField();
+ criterionType = createCriteriaBox(SimilarityComparisonPairFilter.getValidCriteria());
+
+ setLayout(new GridLayout(3, 1));
+ add(label);
+ add(criterionType);
+ add(threshold);
+
+ threshold.getDocument().addDocumentListener(new DocumentListener(){
+ public void changedUpdate(DocumentEvent e){
+ }
+
+ public void insertUpdate(DocumentEvent e){
+ }
+
+ public void removeUpdate(DocumentEvent e){
+ }
+ });
+ }
+ };
+}
-package jp.naist.se.stigmata.ui.swing.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.GridLayout;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import javax.swing.JComboBox;\r
-import javax.swing.JLabel;\r
-import javax.swing.JTextField;\r
-\r
-import jp.naist.se.stigmata.ComparisonPairFilter;\r
-import jp.naist.se.stigmata.filter.FilterTarget;\r
-import jp.naist.se.stigmata.filter.TargetNameComparisonPairFilter;\r
-import jp.naist.se.stigmata.filter.TargetNameComparisonPairFilterService;\r
-import jp.naist.se.stigmata.spi.ComparisonPairFilterSpi;\r
-import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
-\r
-/**\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class TargetNameComparisonPairFilterComponentService extends AbstractComparisonPairFilterComponentService{\r
-\r
- public ComparisonPairFilterPane createComponent(StigmataFrame frame, ComparisonPairFilterSpi service){\r
- return new Pane(frame, service);\r
- }\r
-\r
- public String getFilterName(){\r
- return "name";\r
- }\r
-\r
- public ComparisonPairFilterSpi getComparisonPairFilterService(){\r
- return new TargetNameComparisonPairFilterService();\r
- }\r
-\r
- private static class Pane extends ComparisonPairFilterPane{\r
- private static final long serialVersionUID = 8912037614500713027L;\r
- private ComparisonPairFilterSpi service;\r
- private JComboBox criterionType;\r
- private JTextField value;\r
- private JComboBox targetType;\r
-\r
- public Pane(StigmataFrame frame, ComparisonPairFilterSpi service){\r
- super(frame);\r
- this.service = service;\r
- initLayouts();\r
- }\r
-\r
- @Override\r
- public String[] getErrors(){\r
- List<String> errors = new ArrayList<String>();\r
- if(value.getText().trim().equals("")){\r
- errors.add(getMessages().get("error.empty.value"));\r
- }\r
-\r
- return errors.toArray(new String[errors.size()]);\r
- }\r
-\r
- @Override\r
- public ComparisonPairFilter getFilter(){\r
- try{\r
- TargetNameComparisonPairFilter filter = new TargetNameComparisonPairFilter(service);\r
- filter.setCriterion(getCriterion((String)criterionType.getSelectedItem()));\r
- filter.setValue(value.getText());\r
- filter.setTarget(getTarget((String)targetType.getSelectedItem()));\r
-\r
- return filter;\r
- } catch(Exception e){\r
- }\r
- return null;\r
- }\r
-\r
- @Override\r
- public void resetComponents(){\r
- value.setText("");\r
- criterionType.setSelectedIndex(0);\r
- targetType.setSelectedItem(getDisplayTarget(FilterTarget.BOTH_TARGETS));\r
- }\r
-\r
- @Override\r
- public void setFilter(ComparisonPairFilter cpf){\r
- TargetNameComparisonPairFilter filter = (TargetNameComparisonPairFilter)cpf;\r
- criterionType.setSelectedItem(getDisplayCriterion(filter.getCriterion()));\r
- value.setText(filter.getValue());\r
- targetType.setSelectedItem(getDisplayTarget(filter.getTarget()));\r
- }\r
-\r
- private void initLayouts(){\r
- JLabel label = new JLabel(getMessages().get("filter.name.label"));\r
- value = new JTextField();\r
- criterionType = createCriteriaBox(TargetNameComparisonPairFilter.getValidCriteria());\r
- targetType = createTargetBox();\r
-\r
- setLayout(new GridLayout(4, 1));\r
- add(label);\r
- add(targetType);\r
- add(criterionType);\r
- add(value);\r
- }\r
- };\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.filter;
+
+/*
+ * $Id$
+ */
+
+import java.awt.GridLayout;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+
+import jp.sourceforge.stigmata.ComparisonPairFilter;
+import jp.sourceforge.stigmata.filter.FilterTarget;
+import jp.sourceforge.stigmata.filter.TargetNameComparisonPairFilter;
+import jp.sourceforge.stigmata.filter.TargetNameComparisonPairFilterService;
+import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
+import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
+
+/**
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class TargetNameComparisonPairFilterComponentService extends AbstractComparisonPairFilterComponentService{
+
+ public ComparisonPairFilterPane createComponent(StigmataFrame frame, ComparisonPairFilterSpi service){
+ return new Pane(frame, service);
+ }
+
+ public String getFilterName(){
+ return "name";
+ }
+
+ public ComparisonPairFilterSpi getComparisonPairFilterService(){
+ return new TargetNameComparisonPairFilterService();
+ }
+
+ private static class Pane extends ComparisonPairFilterPane{
+ private static final long serialVersionUID = 8912037614500713027L;
+ private ComparisonPairFilterSpi service;
+ private JComboBox criterionType;
+ private JTextField value;
+ private JComboBox targetType;
+
+ public Pane(StigmataFrame frame, ComparisonPairFilterSpi service){
+ super(frame);
+ this.service = service;
+ initLayouts();
+ }
+
+ @Override
+ public String[] getErrors(){
+ List<String> errors = new ArrayList<String>();
+ if(value.getText().trim().equals("")){
+ errors.add(getMessages().get("error.empty.value"));
+ }
+
+ return errors.toArray(new String[errors.size()]);
+ }
+
+ @Override
+ public ComparisonPairFilter getFilter(){
+ try{
+ TargetNameComparisonPairFilter filter = new TargetNameComparisonPairFilter(service);
+ filter.setCriterion(getCriterion((String)criterionType.getSelectedItem()));
+ filter.setValue(value.getText());
+ filter.setTarget(getTarget((String)targetType.getSelectedItem()));
+
+ return filter;
+ } catch(Exception e){
+ }
+ return null;
+ }
+
+ @Override
+ public void resetComponents(){
+ value.setText("");
+ criterionType.setSelectedIndex(0);
+ targetType.setSelectedItem(getDisplayTarget(FilterTarget.BOTH_TARGETS));
+ }
+
+ @Override
+ public void setFilter(ComparisonPairFilter cpf){
+ TargetNameComparisonPairFilter filter = (TargetNameComparisonPairFilter)cpf;
+ criterionType.setSelectedItem(getDisplayCriterion(filter.getCriterion()));
+ value.setText(filter.getValue());
+ targetType.setSelectedItem(getDisplayTarget(filter.getTarget()));
+ }
+
+ private void initLayouts(){
+ JLabel label = new JLabel(getMessages().get("filter.name.label"));
+ value = new JTextField();
+ criterionType = createCriteriaBox(TargetNameComparisonPairFilter.getValidCriteria());
+ targetType = createTargetBox();
+
+ setLayout(new GridLayout(4, 1));
+ add(label);
+ add(targetType);
+ add(criterionType);
+ add(value);
+ }
+ };
+}
-package jp.naist.se.stigmata.ui.swing.filter;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.GridLayout;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import javax.swing.JComboBox;\r
-import javax.swing.JLabel;\r
-import javax.swing.JTextField;\r
-\r
-import jp.naist.se.stigmata.ComparisonPairFilter;\r
-import jp.naist.se.stigmata.filter.FilterTarget;\r
-import jp.naist.se.stigmata.filter.TotalElementCountComparisonPairFilter;\r
-import jp.naist.se.stigmata.filter.TotalElementCountComparisonPairFilterService;\r
-import jp.naist.se.stigmata.spi.ComparisonPairFilterSpi;\r
-import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
-\r
-/**\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class TotalElementCountComparisonPairFilterComponentService extends AbstractComparisonPairFilterComponentService{\r
-\r
- public ComparisonPairFilterPane createComponent(StigmataFrame frame, ComparisonPairFilterSpi service){\r
- return new Pane(frame, service);\r
- }\r
-\r
- public String getFilterName(){\r
- return "totalelementcount";\r
- }\r
-\r
- public ComparisonPairFilterSpi getComparisonPairFilterService(){\r
- return new TotalElementCountComparisonPairFilterService();\r
- }\r
-\r
- private static class Pane extends ComparisonPairFilterPane{\r
- private static final long serialVersionUID = 8912037614500713027L;\r
- private ComparisonPairFilterSpi service;\r
- private JComboBox criterionType;\r
- private JTextField threshold;\r
- private JComboBox targetType;\r
-\r
- public Pane(StigmataFrame frame, ComparisonPairFilterSpi service){\r
- super(frame);\r
- this.service = service;\r
- initLayouts();\r
- }\r
-\r
- @Override\r
- public String[] getErrors(){\r
- List<String> errors = new ArrayList<String>();\r
- if(threshold.getText().trim().equals("")){\r
- errors.add(getMessages().get("error.empty.threshold"));\r
- }\r
- try{\r
- int v = Integer.parseInt(threshold.getText());\r
- if(v < 0){\r
- errors.add(getMessages().format("error.negative.value", v));\r
- }\r
- } catch(NumberFormatException e){\r
- errors.add(getMessages().format("error.invalid.format.integer", threshold.getText()));\r
- }\r
- return errors.toArray(new String[errors.size()]);\r
- }\r
-\r
- @Override\r
- public ComparisonPairFilter getFilter(){\r
- try{\r
- TotalElementCountComparisonPairFilter filter = new TotalElementCountComparisonPairFilter(service);\r
- filter.setCriterion(getCriterion((String)criterionType.getSelectedItem()));\r
- filter.setThreshold(Integer.parseInt(threshold.getText()));\r
- filter.setTarget(getTarget((String)targetType.getSelectedItem()));\r
-\r
- return filter;\r
- } catch(NumberFormatException e){\r
- }\r
- return null;\r
- }\r
-\r
- @Override\r
- public void resetComponents(){\r
- threshold.setText("");\r
- criterionType.setSelectedIndex(0);\r
- targetType.setSelectedItem(getDisplayTarget(FilterTarget.BOTH_TARGETS));\r
- }\r
-\r
- @Override\r
- public void setFilter(ComparisonPairFilter cpf){\r
- TotalElementCountComparisonPairFilter filter = (TotalElementCountComparisonPairFilter)cpf;\r
- criterionType.setSelectedItem(getDisplayCriterion(filter.getCriterion()));\r
- threshold.setText(String.valueOf(filter.getThreshold()));\r
- targetType.setSelectedItem(getDisplayTarget(filter.getTarget()));\r
- }\r
-\r
- private void initLayouts(){\r
- JLabel label = new JLabel(getMessages().get("filter.totalelementcount.label"));\r
- threshold = new JTextField();\r
- criterionType = createCriteriaBox(TotalElementCountComparisonPairFilter.getValidCriteria());\r
- targetType = createTargetBox();\r
-\r
- setLayout(new GridLayout(4, 1));\r
- add(label);\r
- add(targetType);\r
- add(criterionType);\r
- add(threshold);\r
- }\r
- };\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.filter;
+
+/*
+ * $Id$
+ */
+
+import java.awt.GridLayout;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+
+import jp.sourceforge.stigmata.ComparisonPairFilter;
+import jp.sourceforge.stigmata.filter.FilterTarget;
+import jp.sourceforge.stigmata.filter.TotalElementCountComparisonPairFilter;
+import jp.sourceforge.stigmata.filter.TotalElementCountComparisonPairFilterService;
+import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
+import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
+
+/**
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class TotalElementCountComparisonPairFilterComponentService extends AbstractComparisonPairFilterComponentService{
+
+ public ComparisonPairFilterPane createComponent(StigmataFrame frame, ComparisonPairFilterSpi service){
+ return new Pane(frame, service);
+ }
+
+ public String getFilterName(){
+ return "totalelementcount";
+ }
+
+ public ComparisonPairFilterSpi getComparisonPairFilterService(){
+ return new TotalElementCountComparisonPairFilterService();
+ }
+
+ private static class Pane extends ComparisonPairFilterPane{
+ private static final long serialVersionUID = 8912037614500713027L;
+ private ComparisonPairFilterSpi service;
+ private JComboBox criterionType;
+ private JTextField threshold;
+ private JComboBox targetType;
+
+ public Pane(StigmataFrame frame, ComparisonPairFilterSpi service){
+ super(frame);
+ this.service = service;
+ initLayouts();
+ }
+
+ @Override
+ public String[] getErrors(){
+ List<String> errors = new ArrayList<String>();
+ if(threshold.getText().trim().equals("")){
+ errors.add(getMessages().get("error.empty.threshold"));
+ }
+ try{
+ int v = Integer.parseInt(threshold.getText());
+ if(v < 0){
+ errors.add(getMessages().format("error.negative.value", v));
+ }
+ } catch(NumberFormatException e){
+ errors.add(getMessages().format("error.invalid.format.integer", threshold.getText()));
+ }
+ return errors.toArray(new String[errors.size()]);
+ }
+
+ @Override
+ public ComparisonPairFilter getFilter(){
+ try{
+ TotalElementCountComparisonPairFilter filter = new TotalElementCountComparisonPairFilter(service);
+ filter.setCriterion(getCriterion((String)criterionType.getSelectedItem()));
+ filter.setThreshold(Integer.parseInt(threshold.getText()));
+ filter.setTarget(getTarget((String)targetType.getSelectedItem()));
+
+ return filter;
+ } catch(NumberFormatException e){
+ }
+ return null;
+ }
+
+ @Override
+ public void resetComponents(){
+ threshold.setText("");
+ criterionType.setSelectedIndex(0);
+ targetType.setSelectedItem(getDisplayTarget(FilterTarget.BOTH_TARGETS));
+ }
+
+ @Override
+ public void setFilter(ComparisonPairFilter cpf){
+ TotalElementCountComparisonPairFilter filter = (TotalElementCountComparisonPairFilter)cpf;
+ criterionType.setSelectedItem(getDisplayCriterion(filter.getCriterion()));
+ threshold.setText(String.valueOf(filter.getThreshold()));
+ targetType.setSelectedItem(getDisplayTarget(filter.getTarget()));
+ }
+
+ private void initLayouts(){
+ JLabel label = new JLabel(getMessages().get("filter.totalelementcount.label"));
+ threshold = new JTextField();
+ criterionType = createCriteriaBox(TotalElementCountComparisonPairFilter.getValidCriteria());
+ targetType = createTargetBox();
+
+ setLayout(new GridLayout(4, 1));
+ add(label);
+ add(targetType);
+ add(criterionType);
+ add(threshold);
+ }
+ };
+}
-package jp.naist.se.stigmata.ui.swing.graph;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.Color;\r
-import java.awt.Dimension;\r
-import java.awt.FlowLayout;\r
-import java.awt.Graphics2D;\r
-import java.awt.RenderingHints;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.awt.geom.Line2D;\r
-import java.awt.image.BufferedImage;\r
-import java.io.File;\r
-import java.io.IOException;\r
-import java.util.HashSet;\r
-import java.util.Map;\r
-import java.util.Set;\r
-\r
-import javax.imageio.ImageIO;\r
-import javax.swing.Box;\r
-import javax.swing.ImageIcon;\r
-import javax.swing.JButton;\r
-import javax.swing.JLabel;\r
-import javax.swing.JOptionPane;\r
-import javax.swing.JPanel;\r
-\r
-import jp.naist.se.stigmata.ui.swing.GUIUtility;\r
-import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
-import jp.naist.se.stigmata.ui.swing.actions.ChangeColorAction;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class SimilarityDistributionGraphPane extends JPanel{\r
- private static final long serialVersionUID = 2314463453465L;\r
-\r
- private StigmataFrame stigmata;\r
- private Map<Integer, Integer> distributions;\r
- private int totalCount = 0;\r
- private int maxFrequency = 0;\r
- private JLabel iconLabel;\r
- private BufferedImage image;\r
-\r
- public SimilarityDistributionGraphPane(StigmataFrame stigmata, Map<Integer, Integer> distributions){\r
- this.stigmata = stigmata;\r
-\r
- this.distributions = distributions;\r
- initializeLayouts();\r
- initializeData();\r
-\r
- drawGraph(Color.RED);\r
- }\r
-\r
- public String[] getSupportedFormats(){\r
- String[] formats = ImageIO.getWriterFormatNames();\r
- Set<String> set = new HashSet<String>();\r
- for(String f: formats){\r
- if(f != null){\r
- set.add(f.toLowerCase());\r
- }\r
- }\r
- return set.toArray(new String[set.size()]);\r
- }\r
-\r
- private void drawGraph(Color color){\r
- Graphics2D g = image.createGraphics();\r
- g.setColor(getBackground());\r
- g.fillRect(0, 0, image.getWidth(), image.getHeight());\r
-\r
- int width = image.getWidth();\r
- int height = image.getHeight();\r
- g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);\r
-\r
- drawBorder(g, width, height);\r
-\r
- g.setColor(color);\r
- Dimension d = new Dimension(width - 20, height - 20);\r
- double w = (d.width / 100d);\r
-\r
- Integer v1 = distributions.get(0);\r
- if(v1 == null) v1 = new Integer(0);\r
- double x = 20;\r
- for(int i = 0; i <= 100; i++){\r
- Integer v2 = distributions.get(i);\r
- if(v2 == null) new Integer(0);\r
-\r
- double hh1 = v1 * ((double)height / totalCount);\r
- double hh2 = v2 * ((double)height / totalCount);\r
-\r
- g.draw(new Line2D.Double(x, d.height - hh1, x + w, d.height - hh2));\r
- x += w;\r
- v1 = v2;\r
- }\r
- iconLabel.setIcon(new ImageIcon(image));\r
- }\r
-\r
- private void drawBorder(Graphics2D g, int width, int height){\r
- g.setColor(Color.BLACK);\r
- g.draw(new Line2D.Double(0, height - 20, width, height - 20));\r
- g.draw(new Line2D.Double(20, 0, 20, height));\r
-\r
- g.setColor(Color.GRAY);\r
- // x axis\r
- double h = (height - 20) / 2d;\r
- g.draw(new Line2D.Double(20, h, width, h));\r
- h = h / 2;\r
- g.draw(new Line2D.Double(20, h, width, h));\r
- g.draw(new Line2D.Double(20, h * 3, width, h * 3));\r
-\r
- // y axis\r
- double w = (width - 20d) / 2d;\r
- g.draw(new Line2D.Double(w + 20, 0, w + 20, height - 20));\r
- w = w / 2;\r
- g.draw(new Line2D.Double(w + 20, 0, w + 20, height - 20));\r
- g.draw(new Line2D.Double(w * 3 + 20, 0, w * 3 + 20, height - 20));\r
-\r
- g.drawString("0", 10, height - 5);\r
- g.drawString("50%", (width - 20) / 2 + 10, height - 5);\r
- g.drawString(stigmata.getMessages().get("similarity.label"), width - 60, height - 5);\r
- g.drawString("50%", 0, (height - 20) / 2);\r
- }\r
-\r
- private void initializeData(){\r
- maxFrequency = 0;\r
- for(int i = 0; i <= 100; i++){\r
- Integer frequency = distributions.get(new Integer(i));\r
- if(frequency == null){\r
- frequency = new Integer(0);\r
- distributions.put(new Integer(i), frequency);\r
- }\r
- if(maxFrequency < frequency.intValue()){\r
- maxFrequency = frequency.intValue();\r
- }\r
- totalCount += frequency.intValue();\r
- }\r
- }\r
-\r
- private void initializeLayouts(){\r
- image = new BufferedImage(300, 300, BufferedImage.TYPE_INT_ARGB);\r
-\r
- JPanel center = new JPanel(new FlowLayout(FlowLayout.CENTER));\r
- iconLabel = new JLabel();\r
- Box south = Box.createHorizontalBox();\r
- JButton storeImageButton = GUIUtility.createButton(stigmata.getMessages(), "savegraph");\r
- JButton switchColorButton = new JButton(new ChangeColorAction(stigmata, new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- ChangeColorAction action = (ChangeColorAction)e.getSource();\r
- if(action.isColorSelected()){\r
- drawGraph(action.getColor());\r
- }\r
- }\r
- }));\r
- storeImageButton.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- storeGraphImage();\r
- }\r
- });\r
-\r
- setLayout(new BorderLayout());\r
- center.add(iconLabel = new JLabel());\r
- south.add(Box.createHorizontalGlue());\r
- south.add(switchColorButton);\r
- south.add(Box.createHorizontalGlue());\r
- south.add(storeImageButton);\r
- south.add(Box.createHorizontalGlue());\r
-\r
- add(center, BorderLayout.CENTER);\r
- add(south, BorderLayout.SOUTH);\r
- }\r
-\r
- private void storeGraphImage(){\r
- String[] exts = getSupportedFormats();\r
- File file = stigmata.getSaveFile(\r
- exts, stigmata.getMessages().get("savegraph.description")\r
- );\r
- try{\r
- if(file != null){\r
- String format = file.getName();\r
- format = format.substring(format.lastIndexOf('.') + 1);\r
-\r
- ImageIO.write(image, format, file);\r
- }\r
- } catch(IOException e){\r
- JOptionPane.showMessageDialog(\r
- this,\r
- stigmata.getMessages().get("error.io", e.getMessage()),\r
- stigmata.getMessages().get("error.dialog.title"),\r
- JOptionPane.ERROR_MESSAGE\r
- );\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.graph;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.geom.Line2D;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.imageio.ImageIO;
+import javax.swing.Box;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import jp.sourceforge.stigmata.ui.swing.GUIUtility;
+import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
+import jp.sourceforge.stigmata.ui.swing.actions.ChangeColorAction;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class SimilarityDistributionGraphPane extends JPanel{
+ private static final long serialVersionUID = 2314463453465L;
+
+ private StigmataFrame stigmata;
+ private Map<Integer, Integer> distributions;
+ private int totalCount = 0;
+ private int maxFrequency = 0;
+ private JLabel iconLabel;
+ private BufferedImage image;
+
+ public SimilarityDistributionGraphPane(StigmataFrame stigmata, Map<Integer, Integer> distributions){
+ this.stigmata = stigmata;
+
+ this.distributions = distributions;
+ initializeLayouts();
+ initializeData();
+
+ drawGraph(Color.RED);
+ }
+
+ public String[] getSupportedFormats(){
+ String[] formats = ImageIO.getWriterFormatNames();
+ Set<String> set = new HashSet<String>();
+ for(String f: formats){
+ if(f != null){
+ set.add(f.toLowerCase());
+ }
+ }
+ return set.toArray(new String[set.size()]);
+ }
+
+ private void drawGraph(Color color){
+ Graphics2D g = image.createGraphics();
+ g.setColor(getBackground());
+ g.fillRect(0, 0, image.getWidth(), image.getHeight());
+
+ int width = image.getWidth();
+ int height = image.getHeight();
+ g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+
+ drawBorder(g, width, height);
+
+ g.setColor(color);
+ Dimension d = new Dimension(width - 20, height - 20);
+ double w = (d.width / 100d);
+
+ Integer v1 = distributions.get(0);
+ if(v1 == null) v1 = new Integer(0);
+ double x = 20;
+ for(int i = 0; i <= 100; i++){
+ Integer v2 = distributions.get(i);
+ if(v2 == null) new Integer(0);
+
+ double hh1 = v1 * ((double)height / totalCount);
+ double hh2 = v2 * ((double)height / totalCount);
+
+ g.draw(new Line2D.Double(x, d.height - hh1, x + w, d.height - hh2));
+ x += w;
+ v1 = v2;
+ }
+ iconLabel.setIcon(new ImageIcon(image));
+ }
+
+ private void drawBorder(Graphics2D g, int width, int height){
+ g.setColor(Color.BLACK);
+ g.draw(new Line2D.Double(0, height - 20, width, height - 20));
+ g.draw(new Line2D.Double(20, 0, 20, height));
+
+ g.setColor(Color.GRAY);
+ // x axis
+ double h = (height - 20) / 2d;
+ g.draw(new Line2D.Double(20, h, width, h));
+ h = h / 2;
+ g.draw(new Line2D.Double(20, h, width, h));
+ g.draw(new Line2D.Double(20, h * 3, width, h * 3));
+
+ // y axis
+ double w = (width - 20d) / 2d;
+ g.draw(new Line2D.Double(w + 20, 0, w + 20, height - 20));
+ w = w / 2;
+ g.draw(new Line2D.Double(w + 20, 0, w + 20, height - 20));
+ g.draw(new Line2D.Double(w * 3 + 20, 0, w * 3 + 20, height - 20));
+
+ g.drawString("0", 10, height - 5);
+ g.drawString("50%", (width - 20) / 2 + 10, height - 5);
+ g.drawString(stigmata.getMessages().get("similarity.label"), width - 60, height - 5);
+ g.drawString("50%", 0, (height - 20) / 2);
+ }
+
+ private void initializeData(){
+ maxFrequency = 0;
+ for(int i = 0; i <= 100; i++){
+ Integer frequency = distributions.get(new Integer(i));
+ if(frequency == null){
+ frequency = new Integer(0);
+ distributions.put(new Integer(i), frequency);
+ }
+ if(maxFrequency < frequency.intValue()){
+ maxFrequency = frequency.intValue();
+ }
+ totalCount += frequency.intValue();
+ }
+ }
+
+ private void initializeLayouts(){
+ image = new BufferedImage(300, 300, BufferedImage.TYPE_INT_ARGB);
+
+ JPanel center = new JPanel(new FlowLayout(FlowLayout.CENTER));
+ iconLabel = new JLabel();
+ Box south = Box.createHorizontalBox();
+ JButton storeImageButton = GUIUtility.createButton(stigmata.getMessages(), "savegraph");
+ JButton switchColorButton = new JButton(new ChangeColorAction(stigmata, new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ ChangeColorAction action = (ChangeColorAction)e.getSource();
+ if(action.isColorSelected()){
+ drawGraph(action.getColor());
+ }
+ }
+ }));
+ storeImageButton.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ storeGraphImage();
+ }
+ });
+
+ setLayout(new BorderLayout());
+ center.add(iconLabel = new JLabel());
+ south.add(Box.createHorizontalGlue());
+ south.add(switchColorButton);
+ south.add(Box.createHorizontalGlue());
+ south.add(storeImageButton);
+ south.add(Box.createHorizontalGlue());
+
+ add(center, BorderLayout.CENTER);
+ add(south, BorderLayout.SOUTH);
+ }
+
+ private void storeGraphImage(){
+ String[] exts = getSupportedFormats();
+ File file = stigmata.getSaveFile(
+ exts, stigmata.getMessages().get("savegraph.description")
+ );
+ try{
+ if(file != null){
+ String format = file.getName();
+ format = format.substring(format.lastIndexOf('.') + 1);
+
+ ImageIO.write(image, format, file);
+ }
+ } catch(IOException e){
+ JOptionPane.showMessageDialog(
+ this,
+ stigmata.getMessages().get("error.io", e.getMessage()),
+ stigmata.getMessages().get("error.dialog.title"),
+ JOptionPane.ERROR_MESSAGE
+ );
+ }
+ }
+}
-package jp.naist.se.stigmata.ui.swing.mds;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-/**\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class Coordinate{\r
- private double x, y, z;\r
- private String label;\r
- private String showName;\r
- private int groupId = 0;\r
-\r
- public Coordinate(String label, double x, double y){\r
- this(label, shortenLabel(label), x, y, Double.NaN);\r
- }\r
-\r
- public Coordinate(String label, double x, double y, double z){\r
- this(label, shortenLabel(label), x, y, z);\r
- }\r
-\r
- public Coordinate(String label, String showName, double x, double y){\r
- this(label, showName, x, y, Double.NaN);\r
- }\r
-\r
- public Coordinate(String label, String showName, double x, double y, double z){\r
- this.label = label;\r
- this.showName = showName;\r
- this.x = x;\r
- this.y = y;\r
- this.z = z;\r
- }\r
-\r
- public String toString(){\r
- return String.format("%s[%d] (%g, %g)", getLabel(), getGroupId(), getX(), getY());\r
- }\r
-\r
- public int getGroupId(){\r
- return groupId;\r
- }\r
-\r
- public void setGroupId(int groupId){\r
- this.groupId = groupId;\r
- }\r
-\r
- public String getLabel(){\r
- return label;\r
- }\r
-\r
- public void setLabel(String label){\r
- this.label = label;\r
- }\r
-\r
- public String getShowName(){\r
- return showName;\r
- }\r
-\r
- public void setShowName(String showName){\r
- this.showName = showName;\r
- }\r
-\r
- public double getX(){\r
- return x;\r
- }\r
-\r
- public void setX(double x){\r
- this.x = x;\r
- }\r
-\r
- public double getY(){\r
- return y;\r
- }\r
-\r
- public void setY(double y){\r
- this.y = y;\r
- }\r
-\r
- public double getZ(){\r
- return z;\r
- }\r
-\r
- public void setZ(double z){\r
- this.z = z;\r
- }\r
-\r
- private static String shortenLabel(String label){\r
- int index = label.lastIndexOf('/');\r
- if(index < 0){\r
- index = label.lastIndexOf('\\');\r
- }\r
- int firstIndex = label.indexOf('.');\r
- int lastIndex = label.lastIndexOf('.');\r
- int length = label.length();\r
- String returnValue = label;\r
-\r
- if(index < 0 && (firstIndex != lastIndex && lastIndex != (length - 1))){\r
- index = lastIndex;\r
- returnValue = label.substring(index + 1);\r
- if("jar".equals(returnValue)){\r
- returnValue = label;\r
- }\r
- }\r
- return returnValue;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds;
+
+/*
+ * $Id$
+ */
+
+/**
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class Coordinate{
+ private double x, y, z;
+ private String label;
+ private String showName;
+ private int groupId = 0;
+
+ public Coordinate(String label, double x, double y){
+ this(label, shortenLabel(label), x, y, Double.NaN);
+ }
+
+ public Coordinate(String label, double x, double y, double z){
+ this(label, shortenLabel(label), x, y, z);
+ }
+
+ public Coordinate(String label, String showName, double x, double y){
+ this(label, showName, x, y, Double.NaN);
+ }
+
+ public Coordinate(String label, String showName, double x, double y, double z){
+ this.label = label;
+ this.showName = showName;
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ }
+
+ public String toString(){
+ return String.format("%s[%d] (%g, %g)", getLabel(), getGroupId(), getX(), getY());
+ }
+
+ public int getGroupId(){
+ return groupId;
+ }
+
+ public void setGroupId(int groupId){
+ this.groupId = groupId;
+ }
+
+ public String getLabel(){
+ return label;
+ }
+
+ public void setLabel(String label){
+ this.label = label;
+ }
+
+ public String getShowName(){
+ return showName;
+ }
+
+ public void setShowName(String showName){
+ this.showName = showName;
+ }
+
+ public double getX(){
+ return x;
+ }
+
+ public void setX(double x){
+ this.x = x;
+ }
+
+ public double getY(){
+ return y;
+ }
+
+ public void setY(double y){
+ this.y = y;
+ }
+
+ public double getZ(){
+ return z;
+ }
+
+ public void setZ(double z){
+ this.z = z;
+ }
+
+ private static String shortenLabel(String label){
+ int index = label.lastIndexOf('/');
+ if(index < 0){
+ index = label.lastIndexOf('\\');
+ }
+ int firstIndex = label.indexOf('.');
+ int lastIndex = label.lastIndexOf('.');
+ int length = label.length();
+ String returnValue = label;
+
+ if(index < 0 && (firstIndex != lastIndex && lastIndex != (length - 1))){
+ index = lastIndex;
+ returnValue = label.substring(index + 1);
+ if("jar".equals(returnValue)){
+ returnValue = label;
+ }
+ }
+ return returnValue;
+ }
+}
-package jp.naist.se.stigmata.ui.swing.mds;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-/**\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public enum GeometoryType{\r
- RECTANGLE,\r
- UPPER_TRIANGLE,\r
- CIRCLE,\r
- XMARK,\r
- RHOMBUS,\r
- DOWNER_TRIANGLE,\r
- FILLED_RECTANGLE,\r
- CROSS,\r
- FILLED_UPPER_TRIANGLE,\r
- FILLED_CIRCLE,\r
- FILLED_RHOMBUS,\r
- STAR,\r
- FILLED_DOWNER_TRIANGLE;\r
-\r
- public static int getMaxGroupCount(){\r
- return FILLED_DOWNER_TRIANGLE.ordinal();\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds;
+
+/*
+ * $Id$
+ */
+
+/**
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public enum GeometoryType{
+ RECTANGLE,
+ UPPER_TRIANGLE,
+ CIRCLE,
+ XMARK,
+ RHOMBUS,
+ DOWNER_TRIANGLE,
+ FILLED_RECTANGLE,
+ CROSS,
+ FILLED_UPPER_TRIANGLE,
+ FILLED_CIRCLE,
+ FILLED_RHOMBUS,
+ STAR,
+ FILLED_DOWNER_TRIANGLE;
+
+ public static int getMaxGroupCount(){
+ return FILLED_DOWNER_TRIANGLE.ordinal();
+ }
+}
-package jp.naist.se.stigmata.ui.swing.mds;\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.ArrayList;\r
-import java.util.HashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-/**\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-class LabelMap{\r
- private List<String> labels = new ArrayList<String>();\r
- private Map<String, String> groups = new HashMap<String, String>();\r
- private Map<String, Integer> gids = new HashMap<String, Integer>();\r
- private boolean groupEnabled = true;\r
-\r
- public LabelMap(){\r
- gids.put("", 0);\r
- }\r
-\r
- public LabelMap(String[] labels){\r
- this();\r
- for(String label: labels){\r
- addLabel(label);\r
- }\r
- }\r
-\r
- public boolean isAvailableLabel(int index){\r
- return index >= 0 && index < labels.size();\r
- }\r
-\r
- public void setGroupEnabled(boolean flag){\r
- this.groupEnabled = flag;\r
- }\r
-\r
- public boolean isGroupEnabled(){\r
- return groupEnabled && getGroupCount() < GeometoryType.getMaxGroupCount();\r
- }\r
-\r
- public void addLabel(String label){\r
- labels.add(label);\r
- }\r
-\r
- public String getLabel(int index){\r
- return labels.get(index);\r
- }\r
-\r
- public void setGroup(String label, String groupLabel){\r
- groups.put(label, groupLabel);\r
- if(gids.get(groupLabel) == null){\r
- gids.put(groupLabel, gids.size());\r
- }\r
- }\r
-\r
- public String getGroup(String label){\r
- String group = groups.get(label);\r
- if(group == null){\r
- group = "";\r
- }\r
- return group;\r
- }\r
-\r
- public int getGroupIdFromElementName(String label){\r
- return getGroupId(groups.get(label));\r
- }\r
-\r
- public int getGroupId(String groupLabel){\r
- Integer i = new Integer(0);\r
- if(isGroupEnabled()){\r
- i = gids.get(groupLabel);\r
- if(i == null){\r
- i = new Integer(0);\r
- }\r
- }\r
- return i;\r
- }\r
-\r
- public int getGroupCount(){\r
- return gids.size();\r
- }\r
-\r
- public String[] getGroupNames(){\r
- String[] names = new String[gids.size()];\r
- int index = 0;\r
- for(String name: gids.keySet()){\r
- names[index] = name;\r
- index++;\r
- }\r
-\r
- return names;\r
- }\r
-\r
- public synchronized int getGroupElementCount(String group){\r
- int count = 0;\r
- for(Map.Entry<String, String> entry: groups.entrySet()){\r
- if(group.equals(entry.getValue())){\r
- count++;\r
- }\r
- }\r
- return count;\r
- }\r
-\r
- public synchronized String[] getGroupElements(String group){\r
- List<String> elements = new ArrayList<String>();\r
- for(Map.Entry<String, String> entry: groups.entrySet()){\r
- if(group.equals(entry.getValue())){\r
- elements.add(entry.getKey());\r
- }\r
- }\r
- return elements.toArray(new String[elements.size()]);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds;
+/*
+ * $Id$
+ */
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+class LabelMap{
+ private List<String> labels = new ArrayList<String>();
+ private Map<String, String> groups = new HashMap<String, String>();
+ private Map<String, Integer> gids = new HashMap<String, Integer>();
+ private boolean groupEnabled = true;
+
+ public LabelMap(){
+ gids.put("", 0);
+ }
+
+ public LabelMap(String[] labels){
+ this();
+ for(String label: labels){
+ addLabel(label);
+ }
+ }
+
+ public boolean isAvailableLabel(int index){
+ return index >= 0 && index < labels.size();
+ }
+
+ public void setGroupEnabled(boolean flag){
+ this.groupEnabled = flag;
+ }
+
+ public boolean isGroupEnabled(){
+ return groupEnabled && getGroupCount() < GeometoryType.getMaxGroupCount();
+ }
+
+ public void addLabel(String label){
+ labels.add(label);
+ }
+
+ public String getLabel(int index){
+ return labels.get(index);
+ }
+
+ public void setGroup(String label, String groupLabel){
+ groups.put(label, groupLabel);
+ if(gids.get(groupLabel) == null){
+ gids.put(groupLabel, gids.size());
+ }
+ }
+
+ public String getGroup(String label){
+ String group = groups.get(label);
+ if(group == null){
+ group = "";
+ }
+ return group;
+ }
+
+ public int getGroupIdFromElementName(String label){
+ return getGroupId(groups.get(label));
+ }
+
+ public int getGroupId(String groupLabel){
+ Integer i = new Integer(0);
+ if(isGroupEnabled()){
+ i = gids.get(groupLabel);
+ if(i == null){
+ i = new Integer(0);
+ }
+ }
+ return i;
+ }
+
+ public int getGroupCount(){
+ return gids.size();
+ }
+
+ public String[] getGroupNames(){
+ String[] names = new String[gids.size()];
+ int index = 0;
+ for(String name: gids.keySet()){
+ names[index] = name;
+ index++;
+ }
+
+ return names;
+ }
+
+ public synchronized int getGroupElementCount(String group){
+ int count = 0;
+ for(Map.Entry<String, String> entry: groups.entrySet()){
+ if(group.equals(entry.getValue())){
+ count++;
+ }
+ }
+ return count;
+ }
+
+ public synchronized String[] getGroupElements(String group){
+ List<String> elements = new ArrayList<String>();
+ for(Map.Entry<String, String> entry: groups.entrySet()){
+ if(group.equals(entry.getValue())){
+ elements.add(entry.getKey());
+ }
+ }
+ return elements.toArray(new String[elements.size()]);
+ }
+}
-package jp.naist.se.stigmata.ui.swing.mds;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.Color;\r
-import java.awt.Dimension;\r
-import java.awt.FlowLayout;\r
-import java.awt.GridLayout;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.awt.event.ComponentAdapter;\r
-import java.awt.event.ComponentEvent;\r
-import java.net.URL;\r
-\r
-import javax.swing.Action;\r
-import javax.swing.Box;\r
-import javax.swing.JCheckBox;\r
-import javax.swing.JComboBox;\r
-import javax.swing.JLabel;\r
-import javax.swing.JPanel;\r
-\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.ComparisonPair;\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-import jp.naist.se.stigmata.result.SingleExtractionResultSet;\r
-import jp.naist.se.stigmata.ui.swing.ClippedLRListCellRenderer;\r
-import jp.naist.se.stigmata.ui.swing.GUIUtility;\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.actions.ChangeColorAction;\r
-import jp.naist.se.stigmata.ui.swing.actions.SaveAction;\r
-import jp.naist.se.stigmata.ui.swing.mds.mark.DrawerFactory;\r
-import jp.sourceforge.talisman.i18n.Messages;\r
-import Jama.Matrix;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class MDSGraphPanel extends JPanel{\r
- private static final long serialVersionUID = -7256554014379112897L;\r
-\r
- private StigmataFrame stigmata;\r
- private BirthmarkSet[] set;\r
- private BirthmarkContext context;\r
- private LabelMap labels;\r
- private MDSGraphViewer viewer;\r
-\r
- public MDSGraphPanel(StigmataFrame stigmata, BirthmarkSet[] set, BirthmarkContext context){\r
- this.stigmata = stigmata;\r
- this.context = context;\r
- this.set = set;\r
-\r
- double[][] matrix = initData(set, context);\r
- initLayouts(matrix);\r
- }\r
-\r
- private double[][] initData(BirthmarkSet[] set, BirthmarkContext context){\r
- labels = new LabelMap();\r
- double[][] matrix = new double[set.length][set.length];\r
-\r
- for(int i = 0; i < set.length; i++){\r
- for(int j = 0; j <= i; j++){\r
- ComparisonPair pair = new ComparisonPair(set[i], set[j], context);\r
- matrix[i][j] = 1d - pair.calculateSimilarity();\r
- if(i != j){\r
- matrix[j][i] = matrix[i][j];\r
- }\r
- }\r
- String className = set[i].getName();\r
- labels.addLabel(className);\r
- String groupName = getGroupName(set[i].getLocation());\r
- labels.setGroup(className, groupName);\r
- }\r
- return matrix;\r
- }\r
-\r
- private String getGroupName(URL location){\r
- String url = location.toString();\r
- if(url.startsWith("jar:")){\r
- url = url.substring("jar:".length(), url.lastIndexOf('!'));\r
- }\r
- return url;\r
- }\r
-\r
- /**\r
- * This method must called after\r
- * {@link #initData(BirthmarkSet[], BirthmarkEnvironment) <code>initData</code>}.\r
- * Because this method uses calculated value in initData method.\r
- */\r
- private void initLayouts(double[][] matrix){\r
- final Messages messages = stigmata.getMessages();\r
- viewer = new MDSGraphViewer(stigmata.getMessages(), new MDSMethod(new Matrix(matrix)), labels);\r
- viewer.setShowLabel(true);\r
-\r
- viewer.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- String c = e.getActionCommand();\r
- for(int i = 0; i < set.length; i++){\r
- if(c.equals(set[i].getName())){\r
- ExtractionResultSet ers = new SingleExtractionResultSet(context, set[i]);\r
- stigmata.showExtractionResult(ers);\r
- }\r
- }\r
- }\r
- });\r
- JCheckBox check = new JCheckBox(stigmata.getMessages().get("showlabel.button.label"), true);\r
- check.addActionListener(new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- JCheckBox c = (JCheckBox)e.getSource();\r
- viewer.setShowLabel(c.isSelected());\r
- }\r
- });\r
-\r
- Action pointColorAction = new ChangeColorAction(\r
- "updatecolor", stigmata, Color.BLACK, new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- ChangeColorAction action = (ChangeColorAction)e.getSource();\r
- viewer.setPointColor(action.getColor());\r
- }\r
- });\r
- Action overColorAction = new ChangeColorAction(\r
- "updateovercolor", stigmata, Color.BLUE, new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- ChangeColorAction action = (ChangeColorAction)e.getSource();\r
- viewer.setOverColor(action.getColor());\r
- }\r
- });\r
- SaveAction saveMDSAction = new SaveAction(stigmata, new MDSImageExporter(viewer));\r
- saveMDSAction.setExtensions(stigmata.getMessages().getArray("savemds.extensions"));\r
- saveMDSAction.setDescrpition(stigmata.getMessages().get("savemds.description"));\r
-\r
- SaveAction saveCoordinate = new SaveAction(stigmata, new MDSPointsLocationExporter(viewer));\r
- saveCoordinate.setExtensions(stigmata.getMessages().getArray("savelocation.extensions"));\r
- saveCoordinate.setDescrpition(stigmata.getMessages().get("savelocation.description"));\r
-\r
- PopupButton colorButton = new PopupButton(\r
- GUIUtility.createButton(messages, "updatecolor", pointColorAction)\r
- );\r
- colorButton.addMenuItem(GUIUtility.createJMenuItem(messages, "updateovercolor", overColorAction));\r
- PopupButton saveButton = new PopupButton(\r
- GUIUtility.createButton(messages, "savemds", saveMDSAction)\r
- );\r
- saveButton.addMenuItem(GUIUtility.createJMenuItem(messages, "savelocation", saveCoordinate));\r
-\r
- JLabel numberOfDotsLabel = new JLabel(String.valueOf(set.length));\r
- GUIUtility.decorateJComponent(messages, numberOfDotsLabel, "mdsgraph.count");\r
- // set the number of dots of each groups\r
- JComboBox numberOfGroupsLabelCombo = new JComboBox();\r
- GeometoryType[] types = GeometoryType.values();\r
- DrawerFactory factory = DrawerFactory.getInstance();\r
- for(String name: labels.getGroupNames()){\r
- int count = labels.getGroupElementCount(name);\r
- if(count != 0){\r
- ClippedLRListCellRenderer.LRItem item = new ClippedLRListCellRenderer.LRItem(name, count);\r
- item.setIcon(factory.createIcon(types[labels.getGroupId(name)]));\r
- numberOfGroupsLabelCombo.addItem(item);\r
- }\r
- }\r
- numberOfGroupsLabelCombo.setEditable(false);\r
- Dimension dim = new Dimension(100, numberOfGroupsLabelCombo.getPreferredSize().height);\r
- numberOfGroupsLabelCombo.setRenderer(new ClippedLRListCellRenderer(dim, 50));\r
- GUIUtility.decorateJComponent(messages, numberOfGroupsLabelCombo, "mdsgraph.group");\r
-\r
- JPanel north = new JPanel(new GridLayout(1, 2));\r
- north.add(numberOfDotsLabel);\r
- north.add(numberOfGroupsLabelCombo);\r
-\r
- Box south = Box.createHorizontalBox();\r
- south.add(Box.createHorizontalGlue());\r
- south.add(saveButton);\r
- south.add(Box.createHorizontalGlue());\r
- south.add(colorButton);\r
- south.add(Box.createHorizontalGlue());\r
- south.add(check);\r
- south.add(Box.createHorizontalGlue());\r
-\r
- JPanel center = new JPanel(new FlowLayout(FlowLayout.CENTER));\r
- center.addComponentListener(new ComponentAdapter(){\r
- @Override\r
- public void componentResized(ComponentEvent e){\r
- Dimension d = e.getComponent().getSize();\r
- viewer.setSize(d.width - 10, d.height - 10);\r
- }\r
- });\r
- setLayout(new BorderLayout());\r
-\r
- center.add(viewer);\r
-\r
- add(north, BorderLayout.NORTH);\r
- add(center, BorderLayout.CENTER);\r
- add(south, BorderLayout.SOUTH);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.net.URL;
+
+import javax.swing.Action;
+import javax.swing.Box;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.ComparisonPair;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.result.SingleExtractionResultSet;
+import jp.sourceforge.stigmata.ui.swing.ClippedLRListCellRenderer;
+import jp.sourceforge.stigmata.ui.swing.GUIUtility;
+import jp.sourceforge.stigmata.ui.swing.PopupButton;
+import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
+import jp.sourceforge.stigmata.ui.swing.actions.ChangeColorAction;
+import jp.sourceforge.stigmata.ui.swing.actions.SaveAction;
+import jp.sourceforge.stigmata.ui.swing.mds.mark.DrawerFactory;
+import jp.sourceforge.talisman.i18n.Messages;
+import Jama.Matrix;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class MDSGraphPanel extends JPanel{
+ private static final long serialVersionUID = -7256554014379112897L;
+
+ private StigmataFrame stigmata;
+ private BirthmarkSet[] set;
+ private BirthmarkContext context;
+ private LabelMap labels;
+ private MDSGraphViewer viewer;
+
+ public MDSGraphPanel(StigmataFrame stigmata, BirthmarkSet[] set, BirthmarkContext context){
+ this.stigmata = stigmata;
+ this.context = context;
+ this.set = set;
+
+ double[][] matrix = initData(set, context);
+ initLayouts(matrix);
+ }
+
+ private double[][] initData(BirthmarkSet[] set, BirthmarkContext context){
+ labels = new LabelMap();
+ double[][] matrix = new double[set.length][set.length];
+
+ for(int i = 0; i < set.length; i++){
+ for(int j = 0; j <= i; j++){
+ ComparisonPair pair = new ComparisonPair(set[i], set[j], context);
+ matrix[i][j] = 1d - pair.calculateSimilarity();
+ if(i != j){
+ matrix[j][i] = matrix[i][j];
+ }
+ }
+ String className = set[i].getName();
+ labels.addLabel(className);
+ String groupName = getGroupName(set[i].getLocation());
+ labels.setGroup(className, groupName);
+ }
+ return matrix;
+ }
+
+ private String getGroupName(URL location){
+ String url = location.toString();
+ if(url.startsWith("jar:")){
+ url = url.substring("jar:".length(), url.lastIndexOf('!'));
+ }
+ return url;
+ }
+
+ /**
+ * This method must called after
+ * {@link #initData(BirthmarkSet[], BirthmarkEnvironment) <code>initData</code>}.
+ * Because this method uses calculated value in initData method.
+ */
+ private void initLayouts(double[][] matrix){
+ final Messages messages = stigmata.getMessages();
+ viewer = new MDSGraphViewer(stigmata.getMessages(), new MDSMethod(new Matrix(matrix)), labels);
+ viewer.setShowLabel(true);
+
+ viewer.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ String c = e.getActionCommand();
+ for(int i = 0; i < set.length; i++){
+ if(c.equals(set[i].getName())){
+ ExtractionResultSet ers = new SingleExtractionResultSet(context, set[i]);
+ stigmata.showExtractionResult(ers);
+ }
+ }
+ }
+ });
+ JCheckBox check = new JCheckBox(stigmata.getMessages().get("showlabel.button.label"), true);
+ check.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ JCheckBox c = (JCheckBox)e.getSource();
+ viewer.setShowLabel(c.isSelected());
+ }
+ });
+
+ Action pointColorAction = new ChangeColorAction(
+ "updatecolor", stigmata, Color.BLACK, new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ ChangeColorAction action = (ChangeColorAction)e.getSource();
+ viewer.setPointColor(action.getColor());
+ }
+ });
+ Action overColorAction = new ChangeColorAction(
+ "updateovercolor", stigmata, Color.BLUE, new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ ChangeColorAction action = (ChangeColorAction)e.getSource();
+ viewer.setOverColor(action.getColor());
+ }
+ });
+ SaveAction saveMDSAction = new SaveAction(stigmata, new MDSImageExporter(viewer));
+ saveMDSAction.setExtensions(stigmata.getMessages().getArray("savemds.extensions"));
+ saveMDSAction.setDescrpition(stigmata.getMessages().get("savemds.description"));
+
+ SaveAction saveCoordinate = new SaveAction(stigmata, new MDSPointsLocationExporter(viewer));
+ saveCoordinate.setExtensions(stigmata.getMessages().getArray("savelocation.extensions"));
+ saveCoordinate.setDescrpition(stigmata.getMessages().get("savelocation.description"));
+
+ PopupButton colorButton = new PopupButton(
+ GUIUtility.createButton(messages, "updatecolor", pointColorAction)
+ );
+ colorButton.addMenuItem(GUIUtility.createJMenuItem(messages, "updateovercolor", overColorAction));
+ PopupButton saveButton = new PopupButton(
+ GUIUtility.createButton(messages, "savemds", saveMDSAction)
+ );
+ saveButton.addMenuItem(GUIUtility.createJMenuItem(messages, "savelocation", saveCoordinate));
+
+ JLabel numberOfDotsLabel = new JLabel(String.valueOf(set.length));
+ GUIUtility.decorateJComponent(messages, numberOfDotsLabel, "mdsgraph.count");
+ // set the number of dots of each groups
+ JComboBox numberOfGroupsLabelCombo = new JComboBox();
+ GeometoryType[] types = GeometoryType.values();
+ DrawerFactory factory = DrawerFactory.getInstance();
+ for(String name: labels.getGroupNames()){
+ int count = labels.getGroupElementCount(name);
+ if(count != 0){
+ ClippedLRListCellRenderer.LRItem item = new ClippedLRListCellRenderer.LRItem(name, count);
+ item.setIcon(factory.createIcon(types[labels.getGroupId(name)]));
+ numberOfGroupsLabelCombo.addItem(item);
+ }
+ }
+ numberOfGroupsLabelCombo.setEditable(false);
+ Dimension dim = new Dimension(100, numberOfGroupsLabelCombo.getPreferredSize().height);
+ numberOfGroupsLabelCombo.setRenderer(new ClippedLRListCellRenderer(dim, 50));
+ GUIUtility.decorateJComponent(messages, numberOfGroupsLabelCombo, "mdsgraph.group");
+
+ JPanel north = new JPanel(new GridLayout(1, 2));
+ north.add(numberOfDotsLabel);
+ north.add(numberOfGroupsLabelCombo);
+
+ Box south = Box.createHorizontalBox();
+ south.add(Box.createHorizontalGlue());
+ south.add(saveButton);
+ south.add(Box.createHorizontalGlue());
+ south.add(colorButton);
+ south.add(Box.createHorizontalGlue());
+ south.add(check);
+ south.add(Box.createHorizontalGlue());
+
+ JPanel center = new JPanel(new FlowLayout(FlowLayout.CENTER));
+ center.addComponentListener(new ComponentAdapter(){
+ @Override
+ public void componentResized(ComponentEvent e){
+ Dimension d = e.getComponent().getSize();
+ viewer.setSize(d.width - 10, d.height - 10);
+ }
+ });
+ setLayout(new BorderLayout());
+
+ center.add(viewer);
+
+ add(north, BorderLayout.NORTH);
+ add(center, BorderLayout.CENTER);
+ add(south, BorderLayout.SOUTH);
+ }
+}
-package jp.naist.se.stigmata.ui.swing.mds;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.Color;\r
-import java.awt.Component;\r
-import java.awt.Dimension;\r
-import java.awt.Graphics;\r
-import java.awt.Point;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.util.ArrayList;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-\r
-import javax.swing.JFrame;\r
-import javax.swing.JLabel;\r
-import javax.swing.JLayeredPane;\r
-\r
-import jp.naist.se.stigmata.ui.swing.mds.mark.DrawerFactory;\r
-import jp.sourceforge.talisman.i18n.Messages;\r
-import Jama.Matrix;\r
-\r
-/**\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class MDSGraphViewer extends JLayeredPane{\r
- private static final long serialVersionUID = -9196070059428975126L;\r
- private static final int POINT_LAYER = DEFAULT_LAYER;\r
- private static final int LABEL_LAYER = DEFAULT_LAYER;\r
-\r
- private Messages messages;\r
- private MDSMethod mds;\r
- private List<Coordinate> plots = new ArrayList<Coordinate>();\r
- private Color overColor = PointComponent.DEFAULT_OVER_COLOR;\r
- private Color pointColor = getForeground();\r
- private boolean sameAspect = false;\r
- private boolean showLabel = false;\r
- private List<PointComponent> points = new ArrayList<PointComponent>();\r
- private List<ActionListener> listeners = new ArrayList<ActionListener>();\r
-\r
- public MDSGraphViewer(Messages messages, MDSMethod mds){\r
- this(messages, mds, null);\r
- }\r
-\r
- public MDSGraphViewer(Messages messages, MDSMethod mds, LabelMap labels){\r
- this.messages = messages;\r
- this.mds = mds;\r
-\r
- setSize(500, 500);\r
- setMinimumSize(getSize());\r
- initLayouts(labels);\r
- }\r
-\r
- public void addActionListener(ActionListener listener){\r
- listeners.add(listener);\r
- }\r
-\r
- public void removeActionListener(ActionListener listener){\r
- listeners.remove(listener);\r
- }\r
-\r
- public Messages getMessages(){\r
- return messages;\r
- }\r
-\r
- public void setMessages(Messages messages){\r
- if(messages == null){\r
- throw new NullPointerException();\r
- }\r
- this.messages = messages;\r
- }\r
-\r
- @Override\r
- public void setSize(int width, int height){\r
- if(width < height) height = width;\r
- else width = height;\r
- super.setSize(width, height);\r
- setPreferredSize(getSize());\r
- }\r
-\r
- public Iterator<Coordinate> coordinates(){\r
- return plots.iterator();\r
- }\r
-\r
- public int getPointCount(){\r
- return plots.size();\r
- }\r
-\r
- public Coordinate getCoordinate(int index){\r
- return plots.get(index);\r
- }\r
-\r
- public boolean isShowLabel(){\r
- return showLabel;\r
- }\r
-\r
- public void setShowLabel(boolean showLabel){\r
- this.showLabel = showLabel;\r
- repaint();\r
- }\r
-\r
- public boolean isSameAspect(){\r
- return sameAspect;\r
- }\r
-\r
- public void setSameAspect(boolean sameAspect){\r
- this.sameAspect = sameAspect;\r
- repaint();\r
- }\r
-\r
- public Color getOverColor(){\r
- return overColor;\r
- }\r
-\r
- public void setOverColor(Color color){\r
- this.overColor = color;\r
- for(int i = 0; i < getComponentCount(); i++){\r
- Component c = getComponent(i);\r
- if(c instanceof PointComponent){\r
- ((PointComponent)c).setOverColor(color);\r
- }\r
- }\r
- }\r
-\r
- public Color getPointColor(){\r
- return pointColor;\r
- }\r
-\r
- public void setPointColor(Color color){\r
- this.pointColor = color;\r
- for(int i = 0; i < getComponentCount(); i++){\r
- Component c = getComponent(i);\r
- if(c instanceof PointComponent){\r
- ((PointComponent)c).setForeground(color);\r
- }\r
- }\r
- }\r
-\r
- @Override\r
- public void paintComponent(Graphics g){\r
- super.paintComponent(g);\r
-\r
- Dimension d = getSize();\r
-\r
- g.setColor(Color.GRAY);\r
-\r
- g.drawLine(0, 0, d.width - 1, 0);\r
- g.drawLine(d.width - 1, 0, d.width - 1, d.height - 1);\r
- g.drawLine(d.width / 2, d.height, d.width / 2, 0);\r
-\r
- g.drawLine(0, 0, 0, d.height - 1);\r
- g.drawLine(0, d.height - 1, d.width - 1, d.height - 1);\r
- g.drawLine(0, d.height / 2, d.width, d.height / 2);\r
-\r
- updatePointComponents(d);\r
- }\r
-\r
- protected void fireEvent(PointComponent p){\r
- ActionEvent e = new ActionEvent(this, 0, p.getLabel());\r
- for(ActionListener l: listeners){\r
- l.actionPerformed(e);\r
- }\r
- }\r
-\r
- private void initLayouts(LabelMap labels){\r
- double[] x = mds.getCoordinate(0);\r
- double[] y = mds.getCoordinate(1);\r
- double[] z = mds.getCoordinate(2);\r
-\r
- double max = 0d;\r
- for(int i = 0; i < x.length; i++){\r
- if(max < Math.abs(x[i])) max = Math.abs(x[i]);\r
- }\r
- for(int i = 0; i < y.length; i++){\r
- if(max < Math.abs(y[i])) max = Math.abs(y[i]);\r
- }\r
- for(int i = 0; i < z.length; i++){\r
- if(max < Math.abs(z[i])) max = Math.abs(z[i]);\r
- }\r
-\r
- int w = getWidth();\r
- int h = getHeight();\r
-\r
- int ww = w - 20;\r
- int hh = h - 20;\r
- DrawerFactory factory = DrawerFactory.getInstance();\r
- GeometoryType[] types = GeometoryType.values();\r
- ActionListener clickedListener = new ActionListener(){\r
- public void actionPerformed(ActionEvent e){\r
- fireEvent((PointComponent)e.getSource());\r
- }\r
- };\r
-\r
- for(int i = 0; i < x.length; i++){\r
- double[] xy = new double[] { - x[i] / max, - y[i] / max, z[i] / max, };\r
- double xx = xy[0] * ww / 2 + (w / 2);\r
- double yy = xy[1] * hh / 2 + (h / 2);\r
- String label = String.valueOf(i);\r
- if(labels != null && labels.isAvailableLabel(i)){\r
- label = labels.getLabel(i);\r
- }\r
- Coordinate coordinate = new Coordinate(label, xy[0], xy[1], xy[2]);\r
- if(labels != null && labels.isGroupEnabled()){\r
- coordinate.setGroupId(labels.getGroupIdFromElementName(coordinate.getLabel()));\r
- }\r
- plots.add(coordinate);\r
-\r
- PointComponent p = new PointComponent(\r
- label, x[i], y[i], factory.create(types[coordinate.getGroupId()])\r
- );\r
- p.addActionListener(clickedListener);\r
- add(p, POINT_LAYER);\r
- JLabel l = new JLabel(coordinate.getShowName());\r
- add(l, LABEL_LAYER);\r
- p.setShowLabel(l);\r
-\r
- Dimension size = p.getSize();\r
- p.setLocation(\r
- new Point((int)(xx - (size.getWidth() / 2d)), (int)(yy - (size.getHeight() / 2d)))\r
- );\r
- points.add(p);\r
-\r
- l.setSize(l.getPreferredSize());\r
- Point pcp = p.getLocation();\r
- Dimension dsize = l.getSize();\r
- l.setLocation(new Point(pcp.x - (dsize.width / 2), pcp.y - 15));\r
- l.setVisible(isShowLabel());\r
- }\r
- }\r
-\r
- private void updatePointComponents(Dimension d){\r
- int index = 0;\r
- double width = d.getWidth();\r
- double height = d.getHeight();\r
- if(isSameAspect()){\r
- if(width < height) height = width;\r
- else width = height;\r
- }\r
-\r
- for(PointComponent pc: points){\r
- updateLocation(pc, plots.get(index), width, height, d);\r
- JLabel label = pc.getShowLabel();\r
- Point pcp = pc.getLocation();\r
- Dimension dsize = label.getSize();\r
- label.setLocation(new Point(pcp.x - (dsize.width / 2), pcp.y - 15));\r
- label.setVisible(isShowLabel());\r
- index++;\r
- }\r
- }\r
-\r
- private void updateLocation(PointComponent c, Coordinate coordinate, double width, double height, Dimension d){\r
- double xx = coordinate.getX() * (width - 20d) / 2d + (d.getWidth() / 2d);\r
- double yy = coordinate.getY() * (height - 20d) / 2d + (d.getHeight() / 2d);\r
- Dimension size = c.getSize();\r
- c.setLocation(\r
- new Point((int)(xx - (size.getWidth() / 2d)), (int)(yy - (size.getHeight() / 2)))\r
- );\r
- }\r
-\r
- public static void main(String[] args) throws Exception{\r
- MDSMethod mds;\r
- LabelMap labels = new LabelMap(new String[] {\r
- "Atlanta", "Chicago", "Denver", "Houston", "Los Angeles", "Miami",\r
- "New York", "San Francisco", "Seattle", "Washington D.C.",\r
- });\r
- Matrix matrix = new Matrix(new double[][]{\r
- { 0, 587, 1212, 701, 1936, 604, 748, 2139, 2182, 543, },\r
- { 587, 0, 920, 940, 1745, 1188, 713, 1858, 1737, 597, },\r
- { 1212, 920, 0, 879, 831, 1726, 1631, 949, 1021, 1494, },\r
- { 701, 940, 879, 0, 1374, 968, 1420, 1645, 1891, 1220, },\r
- { 1936, 1745, 831, 1374, 0, 2339, 2451, 347, 959, 2300, },\r
- { 604, 1188, 1726, 968, 2339, 0, 1092, 2592, 2734, 923, },\r
- { 748, 713, 1631, 1420, 2451, 1092, 0, 2571, 2408, 205, },\r
- { 2139, 1858, 949, 1645, 347, 2594, 2571, 0, 678, 2442, },\r
- { 2182, 1737, 1021, 1891, 959, 2734, 2408, 678, 0, 2329, },\r
- { 543, 597, 1494, 1220, 2300, 923, 205, 2442, 2329, 0, },\r
- });\r
- mds = new MDSMethod(matrix);\r
-\r
- mds.getCoordinateMatrix().print(8, 4);\r
- MDSGraphViewer viewer = new MDSGraphViewer(new Messages("resources.messages"), mds, labels);\r
- viewer.setShowLabel(true);\r
- JFrame f = new JFrame();\r
- f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\r
- f.getContentPane().add(viewer, BorderLayout.CENTER);\r
- f.pack();\r
- f.setVisible(true);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Point;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JLayeredPane;
+
+import jp.sourceforge.stigmata.ui.swing.mds.mark.DrawerFactory;
+import jp.sourceforge.talisman.i18n.Messages;
+import Jama.Matrix;
+
+/**
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class MDSGraphViewer extends JLayeredPane{
+ private static final long serialVersionUID = -9196070059428975126L;
+ private static final int POINT_LAYER = DEFAULT_LAYER;
+ private static final int LABEL_LAYER = DEFAULT_LAYER;
+
+ private Messages messages;
+ private MDSMethod mds;
+ private List<Coordinate> plots = new ArrayList<Coordinate>();
+ private Color overColor = PointComponent.DEFAULT_OVER_COLOR;
+ private Color pointColor = getForeground();
+ private boolean sameAspect = false;
+ private boolean showLabel = false;
+ private List<PointComponent> points = new ArrayList<PointComponent>();
+ private List<ActionListener> listeners = new ArrayList<ActionListener>();
+
+ public MDSGraphViewer(Messages messages, MDSMethod mds){
+ this(messages, mds, null);
+ }
+
+ public MDSGraphViewer(Messages messages, MDSMethod mds, LabelMap labels){
+ this.messages = messages;
+ this.mds = mds;
+
+ setSize(500, 500);
+ setMinimumSize(getSize());
+ initLayouts(labels);
+ }
+
+ public void addActionListener(ActionListener listener){
+ listeners.add(listener);
+ }
+
+ public void removeActionListener(ActionListener listener){
+ listeners.remove(listener);
+ }
+
+ public Messages getMessages(){
+ return messages;
+ }
+
+ public void setMessages(Messages messages){
+ if(messages == null){
+ throw new NullPointerException();
+ }
+ this.messages = messages;
+ }
+
+ @Override
+ public void setSize(int width, int height){
+ if(width < height) height = width;
+ else width = height;
+ super.setSize(width, height);
+ setPreferredSize(getSize());
+ }
+
+ public Iterator<Coordinate> coordinates(){
+ return plots.iterator();
+ }
+
+ public int getPointCount(){
+ return plots.size();
+ }
+
+ public Coordinate getCoordinate(int index){
+ return plots.get(index);
+ }
+
+ public boolean isShowLabel(){
+ return showLabel;
+ }
+
+ public void setShowLabel(boolean showLabel){
+ this.showLabel = showLabel;
+ repaint();
+ }
+
+ public boolean isSameAspect(){
+ return sameAspect;
+ }
+
+ public void setSameAspect(boolean sameAspect){
+ this.sameAspect = sameAspect;
+ repaint();
+ }
+
+ public Color getOverColor(){
+ return overColor;
+ }
+
+ public void setOverColor(Color color){
+ this.overColor = color;
+ for(int i = 0; i < getComponentCount(); i++){
+ Component c = getComponent(i);
+ if(c instanceof PointComponent){
+ ((PointComponent)c).setOverColor(color);
+ }
+ }
+ }
+
+ public Color getPointColor(){
+ return pointColor;
+ }
+
+ public void setPointColor(Color color){
+ this.pointColor = color;
+ for(int i = 0; i < getComponentCount(); i++){
+ Component c = getComponent(i);
+ if(c instanceof PointComponent){
+ ((PointComponent)c).setForeground(color);
+ }
+ }
+ }
+
+ @Override
+ public void paintComponent(Graphics g){
+ super.paintComponent(g);
+
+ Dimension d = getSize();
+
+ g.setColor(Color.GRAY);
+
+ g.drawLine(0, 0, d.width - 1, 0);
+ g.drawLine(d.width - 1, 0, d.width - 1, d.height - 1);
+ g.drawLine(d.width / 2, d.height, d.width / 2, 0);
+
+ g.drawLine(0, 0, 0, d.height - 1);
+ g.drawLine(0, d.height - 1, d.width - 1, d.height - 1);
+ g.drawLine(0, d.height / 2, d.width, d.height / 2);
+
+ updatePointComponents(d);
+ }
+
+ protected void fireEvent(PointComponent p){
+ ActionEvent e = new ActionEvent(this, 0, p.getLabel());
+ for(ActionListener l: listeners){
+ l.actionPerformed(e);
+ }
+ }
+
+ private void initLayouts(LabelMap labels){
+ double[] x = mds.getCoordinate(0);
+ double[] y = mds.getCoordinate(1);
+ double[] z = mds.getCoordinate(2);
+
+ double max = 0d;
+ for(int i = 0; i < x.length; i++){
+ if(max < Math.abs(x[i])) max = Math.abs(x[i]);
+ }
+ for(int i = 0; i < y.length; i++){
+ if(max < Math.abs(y[i])) max = Math.abs(y[i]);
+ }
+ for(int i = 0; i < z.length; i++){
+ if(max < Math.abs(z[i])) max = Math.abs(z[i]);
+ }
+
+ int w = getWidth();
+ int h = getHeight();
+
+ int ww = w - 20;
+ int hh = h - 20;
+ DrawerFactory factory = DrawerFactory.getInstance();
+ GeometoryType[] types = GeometoryType.values();
+ ActionListener clickedListener = new ActionListener(){
+ public void actionPerformed(ActionEvent e){
+ fireEvent((PointComponent)e.getSource());
+ }
+ };
+
+ for(int i = 0; i < x.length; i++){
+ double[] xy = new double[] { - x[i] / max, - y[i] / max, z[i] / max, };
+ double xx = xy[0] * ww / 2 + (w / 2);
+ double yy = xy[1] * hh / 2 + (h / 2);
+ String label = String.valueOf(i);
+ if(labels != null && labels.isAvailableLabel(i)){
+ label = labels.getLabel(i);
+ }
+ Coordinate coordinate = new Coordinate(label, xy[0], xy[1], xy[2]);
+ if(labels != null && labels.isGroupEnabled()){
+ coordinate.setGroupId(labels.getGroupIdFromElementName(coordinate.getLabel()));
+ }
+ plots.add(coordinate);
+
+ PointComponent p = new PointComponent(
+ label, x[i], y[i], factory.create(types[coordinate.getGroupId()])
+ );
+ p.addActionListener(clickedListener);
+ add(p, POINT_LAYER);
+ JLabel l = new JLabel(coordinate.getShowName());
+ add(l, LABEL_LAYER);
+ p.setShowLabel(l);
+
+ Dimension size = p.getSize();
+ p.setLocation(
+ new Point((int)(xx - (size.getWidth() / 2d)), (int)(yy - (size.getHeight() / 2d)))
+ );
+ points.add(p);
+
+ l.setSize(l.getPreferredSize());
+ Point pcp = p.getLocation();
+ Dimension dsize = l.getSize();
+ l.setLocation(new Point(pcp.x - (dsize.width / 2), pcp.y - 15));
+ l.setVisible(isShowLabel());
+ }
+ }
+
+ private void updatePointComponents(Dimension d){
+ int index = 0;
+ double width = d.getWidth();
+ double height = d.getHeight();
+ if(isSameAspect()){
+ if(width < height) height = width;
+ else width = height;
+ }
+
+ for(PointComponent pc: points){
+ updateLocation(pc, plots.get(index), width, height, d);
+ JLabel label = pc.getShowLabel();
+ Point pcp = pc.getLocation();
+ Dimension dsize = label.getSize();
+ label.setLocation(new Point(pcp.x - (dsize.width / 2), pcp.y - 15));
+ label.setVisible(isShowLabel());
+ index++;
+ }
+ }
+
+ private void updateLocation(PointComponent c, Coordinate coordinate, double width, double height, Dimension d){
+ double xx = coordinate.getX() * (width - 20d) / 2d + (d.getWidth() / 2d);
+ double yy = coordinate.getY() * (height - 20d) / 2d + (d.getHeight() / 2d);
+ Dimension size = c.getSize();
+ c.setLocation(
+ new Point((int)(xx - (size.getWidth() / 2d)), (int)(yy - (size.getHeight() / 2)))
+ );
+ }
+
+ public static void main(String[] args) throws Exception{
+ MDSMethod mds;
+ LabelMap labels = new LabelMap(new String[] {
+ "Atlanta", "Chicago", "Denver", "Houston", "Los Angeles", "Miami",
+ "New York", "San Francisco", "Seattle", "Washington D.C.",
+ });
+ Matrix matrix = new Matrix(new double[][]{
+ { 0, 587, 1212, 701, 1936, 604, 748, 2139, 2182, 543, },
+ { 587, 0, 920, 940, 1745, 1188, 713, 1858, 1737, 597, },
+ { 1212, 920, 0, 879, 831, 1726, 1631, 949, 1021, 1494, },
+ { 701, 940, 879, 0, 1374, 968, 1420, 1645, 1891, 1220, },
+ { 1936, 1745, 831, 1374, 0, 2339, 2451, 347, 959, 2300, },
+ { 604, 1188, 1726, 968, 2339, 0, 1092, 2592, 2734, 923, },
+ { 748, 713, 1631, 1420, 2451, 1092, 0, 2571, 2408, 205, },
+ { 2139, 1858, 949, 1645, 347, 2594, 2571, 0, 678, 2442, },
+ { 2182, 1737, 1021, 1891, 959, 2734, 2408, 678, 0, 2329, },
+ { 543, 597, 1494, 1220, 2300, 923, 205, 2442, 2329, 0, },
+ });
+ mds = new MDSMethod(matrix);
+
+ mds.getCoordinateMatrix().print(8, 4);
+ MDSGraphViewer viewer = new MDSGraphViewer(new Messages("resources.messages"), mds, labels);
+ viewer.setShowLabel(true);
+ JFrame f = new JFrame();
+ f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ f.getContentPane().add(viewer, BorderLayout.CENTER);
+ f.pack();
+ f.setVisible(true);
+ }
+}
-package jp.naist.se.stigmata.ui.swing.mds;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.Color;\r
-import java.awt.Dimension;\r
-import java.awt.Graphics2D;\r
-import java.awt.image.BufferedImage;\r
-import java.io.IOException;\r
-import java.io.OutputStream;\r
-\r
-import javax.imageio.ImageIO;\r
-import javax.swing.JOptionPane;\r
-import javax.swing.SwingUtilities;\r
-\r
-import jp.naist.se.stigmata.ui.swing.UnsupportedFormatException;\r
-import jp.naist.se.stigmata.utils.BinaryDataWritable;\r
-\r
-/**\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class MDSImageExporter implements BinaryDataWritable{\r
- private MDSGraphViewer viewer;\r
-\r
- public MDSImageExporter(MDSGraphViewer viewer){\r
- this.viewer = viewer;\r
- }\r
-\r
- public void writeBinaryData(OutputStream out, String format)\r
- throws IOException, UnsupportedFormatException{\r
- Dimension size = viewer.getSize();\r
- BufferedImage image = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_ARGB);\r
- Graphics2D g = image.createGraphics();\r
- g.setColor(Color.WHITE);\r
- g.fillRect(0, 0, size.width, size.height);\r
- viewer.update(g);\r
-\r
- try{\r
- ImageIO.write(image, format, out);\r
- out.flush();\r
- } catch(IOException e){\r
- JOptionPane.showMessageDialog(\r
- SwingUtilities.getRoot(viewer), e.getMessage(),\r
- viewer.getMessages().get("error.dialog.title"),\r
- JOptionPane.WARNING_MESSAGE\r
- );\r
- }\r
- }\r
-\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds;
+
+/*
+ * $Id$
+ */
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import javax.imageio.ImageIO;
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+
+import jp.sourceforge.stigmata.ui.swing.UnsupportedFormatException;
+import jp.sourceforge.stigmata.utils.BinaryDataWritable;
+
+/**
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class MDSImageExporter implements BinaryDataWritable{
+ private MDSGraphViewer viewer;
+
+ public MDSImageExporter(MDSGraphViewer viewer){
+ this.viewer = viewer;
+ }
+
+ public void writeBinaryData(OutputStream out, String format)
+ throws IOException, UnsupportedFormatException{
+ Dimension size = viewer.getSize();
+ BufferedImage image = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_ARGB);
+ Graphics2D g = image.createGraphics();
+ g.setColor(Color.WHITE);
+ g.fillRect(0, 0, size.width, size.height);
+ viewer.update(g);
+
+ try{
+ ImageIO.write(image, format, out);
+ out.flush();
+ } catch(IOException e){
+ JOptionPane.showMessageDialog(
+ SwingUtilities.getRoot(viewer), e.getMessage(),
+ viewer.getMessages().get("error.dialog.title"),
+ JOptionPane.WARNING_MESSAGE
+ );
+ }
+ }
+
+}
-package jp.naist.se.stigmata.ui.swing.mds;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import Jama.EigenvalueDecomposition;\r
-import Jama.Matrix;\r
-\r
-/**\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class MDSMethod{\r
- private Matrix target;\r
- private Matrix coordinate;\r
- private Matrix eigenValues;\r
- private Matrix eigenVectors;\r
- private int[] indexes;\r
-\r
- public MDSMethod(Matrix matrix){\r
- this.target = matrix;\r
- }\r
-\r
- protected Matrix getCenteredInnerProductMatrix(){\r
- Matrix centering = getCenteringMatrix(target.getColumnDimension());\r
- Matrix trans = centering.transpose();\r
-\r
- return centering.times(target).times(trans).times(-1);\r
- }\r
-\r
- public Matrix getEigenValues(){\r
- if(eigenValues == null){\r
- getCoordinateMatrix();\r
- }\r
- return (Matrix)eigenValues.clone();\r
- }\r
-\r
- public Matrix getEigenVectors(){\r
- if(eigenVectors == null){\r
- getCoordinateMatrix();\r
- }\r
- return (Matrix)eigenVectors.clone();\r
- }\r
-\r
- public double[] getCoordinate(int axis){\r
- if(coordinate == null){\r
- getCoordinateMatrix();\r
- }\r
- double[] v = new double[coordinate.getRowDimension()];\r
- for(int i = 0; i < v.length; i++){\r
- v[i] = coordinate.get(i, indexes[axis]);\r
- }\r
- return v;\r
- }\r
-\r
- public Matrix getCoordinateMatrix(){\r
- if(coordinate == null){\r
- Matrix mat = getCenteredInnerProductMatrix();\r
- EigenvalueDecomposition eigen = mat.eig();\r
- Matrix eigenVectors = eigen.getV();\r
- Matrix eigenValues = eigen.getD();\r
- Matrix coordinate = (Matrix)eigenVectors.clone();\r
-\r
- int col = mat.getColumnDimension();\r
- int row = mat.getRowDimension();\r
- for(int i = 0; i < row; i++){\r
- for(int j = 0; j < col; j++){\r
- double v = coordinate.get(i, j);\r
- v = v * Math.sqrt(eigenValues.get(j, j));\r
- coordinate.set(i, j, v);\r
- }\r
- }\r
- sortValues(eigenValues);\r
- this.coordinate = coordinate;\r
- this.eigenVectors = eigenVectors;\r
- this.eigenValues = eigenValues;\r
- }\r
-\r
- return coordinate;\r
- }\r
-\r
- protected static Matrix getCenteringMatrix(int n){\r
- Matrix matrix = Matrix.identity(n, n);\r
-\r
- for(int i = 0; i < n; i++){\r
- for(int j = 0; j < n; j++){\r
- matrix.set(i, j, matrix.get(i, j) - (1d / n));\r
- }\r
- }\r
- return matrix;\r
- }\r
-\r
- private void sortValues(Matrix m){\r
- double[] v = new double[m.getColumnDimension()];\r
- int[] index = new int[v.length];\r
- for(int i = 0; i < v.length; i++){\r
- v[i] = m.get(i, i);\r
- index[i] = i;\r
- }\r
-\r
- for(int i = 0; i < v.length; i++){\r
- for(int j = i + 1; j < v.length; j++){\r
- if(Math.abs(v[i]) < Math.abs(v[j])){\r
- double tmpValue = v[j];\r
- v[j] = v[i];\r
- v[i] = tmpValue;\r
- int tmpIndex = index[j];\r
- index[j] = index[i];\r
- index[i] = tmpIndex;\r
- }\r
- }\r
- }\r
-\r
- indexes = index;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds;
+
+/*
+ * $Id$
+ */
+
+import Jama.EigenvalueDecomposition;
+import Jama.Matrix;
+
+/**
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class MDSMethod{
+ private Matrix target;
+ private Matrix coordinate;
+ private Matrix eigenValues;
+ private Matrix eigenVectors;
+ private int[] indexes;
+
+ public MDSMethod(Matrix matrix){
+ this.target = matrix;
+ }
+
+ protected Matrix getCenteredInnerProductMatrix(){
+ Matrix centering = getCenteringMatrix(target.getColumnDimension());
+ Matrix trans = centering.transpose();
+
+ return centering.times(target).times(trans).times(-1);
+ }
+
+ public Matrix getEigenValues(){
+ if(eigenValues == null){
+ getCoordinateMatrix();
+ }
+ return (Matrix)eigenValues.clone();
+ }
+
+ public Matrix getEigenVectors(){
+ if(eigenVectors == null){
+ getCoordinateMatrix();
+ }
+ return (Matrix)eigenVectors.clone();
+ }
+
+ public double[] getCoordinate(int axis){
+ if(coordinate == null){
+ getCoordinateMatrix();
+ }
+ double[] v = new double[coordinate.getRowDimension()];
+ for(int i = 0; i < v.length; i++){
+ v[i] = coordinate.get(i, indexes[axis]);
+ }
+ return v;
+ }
+
+ public Matrix getCoordinateMatrix(){
+ if(coordinate == null){
+ Matrix mat = getCenteredInnerProductMatrix();
+ EigenvalueDecomposition eigen = mat.eig();
+ Matrix eigenVectors = eigen.getV();
+ Matrix eigenValues = eigen.getD();
+ Matrix coordinate = (Matrix)eigenVectors.clone();
+
+ int col = mat.getColumnDimension();
+ int row = mat.getRowDimension();
+ for(int i = 0; i < row; i++){
+ for(int j = 0; j < col; j++){
+ double v = coordinate.get(i, j);
+ v = v * Math.sqrt(eigenValues.get(j, j));
+ coordinate.set(i, j, v);
+ }
+ }
+ sortValues(eigenValues);
+ this.coordinate = coordinate;
+ this.eigenVectors = eigenVectors;
+ this.eigenValues = eigenValues;
+ }
+
+ return coordinate;
+ }
+
+ protected static Matrix getCenteringMatrix(int n){
+ Matrix matrix = Matrix.identity(n, n);
+
+ for(int i = 0; i < n; i++){
+ for(int j = 0; j < n; j++){
+ matrix.set(i, j, matrix.get(i, j) - (1d / n));
+ }
+ }
+ return matrix;
+ }
+
+ private void sortValues(Matrix m){
+ double[] v = new double[m.getColumnDimension()];
+ int[] index = new int[v.length];
+ for(int i = 0; i < v.length; i++){
+ v[i] = m.get(i, i);
+ index[i] = i;
+ }
+
+ for(int i = 0; i < v.length; i++){
+ for(int j = i + 1; j < v.length; j++){
+ if(Math.abs(v[i]) < Math.abs(v[j])){
+ double tmpValue = v[j];
+ v[j] = v[i];
+ v[i] = tmpValue;
+ int tmpIndex = index[j];
+ index[j] = index[i];
+ index[i] = tmpIndex;
+ }
+ }
+ }
+
+ indexes = index;
+ }
+}
-package jp.naist.se.stigmata.ui.swing.mds;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.IOException;\r
-import java.io.PrintWriter;\r
-import java.util.Iterator;\r
-\r
-import jp.naist.se.stigmata.ui.swing.UnsupportedFormatException;\r
-import jp.naist.se.stigmata.utils.AsciiDataWritable;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$\r
- */\r
-public class MDSPointsLocationExporter implements AsciiDataWritable{\r
- private MDSGraphViewer viewer;\r
-\r
- public MDSPointsLocationExporter(MDSGraphViewer viewer){\r
- this.viewer = viewer;\r
- }\r
-\r
- public void writeAsciiData(PrintWriter out, String format)\r
- throws IOException, UnsupportedFormatException{\r
- if(!format.equals("csv")){\r
- throw new UnsupportedFormatException(viewer.getMessages().format("error.unsupportedformat", format));\r
- }\r
- for(Iterator<Coordinate> i = viewer.coordinates(); i.hasNext(); ){\r
- Coordinate c = i.next();\r
- out.printf("%s,%s,%g,%g%n", c.getLabel(), c.getGroupId(), c.getX(), c.getY());\r
- }\r
- }\r
-\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds;
+
+/*
+ * $Id$
+ */
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Iterator;
+
+import jp.sourceforge.stigmata.ui.swing.UnsupportedFormatException;
+import jp.sourceforge.stigmata.utils.AsciiDataWritable;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$
+ */
+public class MDSPointsLocationExporter implements AsciiDataWritable{
+ private MDSGraphViewer viewer;
+
+ public MDSPointsLocationExporter(MDSGraphViewer viewer){
+ this.viewer = viewer;
+ }
+
+ public void writeAsciiData(PrintWriter out, String format)
+ throws IOException, UnsupportedFormatException{
+ if(!format.equals("csv")){
+ throw new UnsupportedFormatException(viewer.getMessages().format("error.unsupportedformat", format));
+ }
+ for(Iterator<Coordinate> i = viewer.coordinates(); i.hasNext(); ){
+ Coordinate c = i.next();
+ out.printf("%s,%s,%g,%g%n", c.getLabel(), c.getGroupId(), c.getX(), c.getY());
+ }
+ }
+
+}
-package jp.naist.se.stigmata.ui.swing.mds;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.Graphics2D;\r
-\r
-/**\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public interface MarkDrawer{\r
- public void draw(Graphics2D g, int w, int h);\r
-\r
- public void drawOver(Graphics2D g, int w, int h);\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds;
+
+/*
+ * $Id$
+ */
+
+import java.awt.Graphics2D;
+
+/**
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public interface MarkDrawer{
+ public void draw(Graphics2D g, int w, int h);
+
+ public void drawOver(Graphics2D g, int w, int h);
+}
-package jp.naist.se.stigmata.ui.swing.mds;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.Color;\r
-import java.awt.Component;\r
-import java.awt.Graphics;\r
-import java.awt.Graphics2D;\r
-\r
-import javax.swing.Icon;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class MarkIcon implements Icon{\r
- private static final int DEFAULT_ICON_WIDTH = 16;\r
- private static final int DEFAULT_ICON_HEIGHT = 16;\r
-\r
- private MarkDrawer drawer;\r
- private int width = -1;\r
- private int height = -1;\r
-\r
- public MarkIcon(MarkDrawer drawer){\r
- this.drawer = drawer;\r
- }\r
-\r
- public void setIconHeight(int height){\r
- this.height = height;\r
- }\r
-\r
- public int getIconHeight(){\r
- if(height < 0){\r
- return DEFAULT_ICON_HEIGHT;\r
- }\r
- return height;\r
- }\r
-\r
- public void setIconWidth(int width){\r
- this.width = width;\r
- }\r
-\r
- public int getIconWidth(){\r
- if(width < 0){\r
- return DEFAULT_ICON_WIDTH;\r
- }\r
- return width;\r
- }\r
-\r
- public void paintIcon(Component c, Graphics g, int x, int y){\r
- Color initialColor = g.getColor();\r
- g.setColor(Color.BLACK);\r
- g.translate(x, y);\r
- drawer.drawOver((Graphics2D)g, getIconWidth(), getIconHeight());\r
- g.translate(-x, -y);\r
- g.setColor(initialColor);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds;
+
+/*
+ * $Id$
+ */
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+
+import javax.swing.Icon;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class MarkIcon implements Icon{
+ private static final int DEFAULT_ICON_WIDTH = 16;
+ private static final int DEFAULT_ICON_HEIGHT = 16;
+
+ private MarkDrawer drawer;
+ private int width = -1;
+ private int height = -1;
+
+ public MarkIcon(MarkDrawer drawer){
+ this.drawer = drawer;
+ }
+
+ public void setIconHeight(int height){
+ this.height = height;
+ }
+
+ public int getIconHeight(){
+ if(height < 0){
+ return DEFAULT_ICON_HEIGHT;
+ }
+ return height;
+ }
+
+ public void setIconWidth(int width){
+ this.width = width;
+ }
+
+ public int getIconWidth(){
+ if(width < 0){
+ return DEFAULT_ICON_WIDTH;
+ }
+ return width;
+ }
+
+ public void paintIcon(Component c, Graphics g, int x, int y){
+ Color initialColor = g.getColor();
+ g.setColor(Color.BLACK);
+ g.translate(x, y);
+ drawer.drawOver((Graphics2D)g, getIconWidth(), getIconHeight());
+ g.translate(-x, -y);
+ g.setColor(initialColor);
+ }
+}
-package jp.naist.se.stigmata.ui.swing.mds;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.Color;\r
-import java.awt.Dimension;\r
-import java.awt.Graphics;\r
-import java.awt.Graphics2D;\r
-import java.awt.Stroke;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.awt.event.MouseAdapter;\r
-import java.awt.event.MouseEvent;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import javax.swing.JLabel;\r
-\r
-import jp.naist.se.stigmata.ui.swing.mds.mark.DrawerFactory;\r
-\r
-/**\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-class PointComponent extends JLabel{\r
- private static final long serialVersionUID = 6945871049990818511L;\r
- public static final Color DEFAULT_OVER_COLOR = Color.BLUE;\r
-\r
- private boolean entered = false;\r
- private Color overColor = DEFAULT_OVER_COLOR;\r
- private String label;\r
- private MarkDrawer drawer;\r
- private JLabel showLabel = null;\r
- private List<ActionListener> listeners = new ArrayList<ActionListener>();\r
-\r
- public PointComponent(String label, double x, double y){\r
- this(label);\r
-\r
- setToolTipText(String.format("%s [%g, %g]", label, x, y));\r
- drawer = DrawerFactory.getInstance().create(GeometoryType.UPPER_TRIANGLE);\r
- }\r
-\r
- public PointComponent(String label, double x, double y, MarkDrawer drawer){\r
- this(label);\r
- this.drawer = drawer;\r
- setToolTipText(String.format("%s [%g, %g]", label, x, y));\r
- }\r
-\r
- public PointComponent(String label){\r
- this.label = label;\r
- setSize(10, 10);\r
- setMinimumSize(getSize());\r
- setMaximumSize(getSize());\r
- setPreferredSize(getSize());\r
-\r
- addMouseListener(new MouseAdapter(){\r
- @Override\r
- public void mouseEntered(MouseEvent e){\r
- entered = true;\r
- if(showLabel != null){\r
- showLabel.setVisible(true);\r
- showLabel.repaint();\r
- }\r
- repaint();\r
- }\r
-\r
- @Override\r
- public void mouseExited(MouseEvent e){\r
- entered = false;\r
- if(showLabel != null){\r
- showLabel.setVisible(false);\r
- showLabel.repaint();\r
- }\r
- repaint();\r
- }\r
-\r
- @Override\r
- public void mouseClicked(MouseEvent e){\r
- if(e.getClickCount() >= 2){\r
- ActionEvent ae = new ActionEvent(PointComponent.this, 0, null);\r
- for(ActionListener listener: listeners){\r
- listener.actionPerformed(ae);\r
- }\r
- }\r
- }\r
- });\r
- setToolTipText(this.label);\r
- }\r
-\r
- public void addActionListener(ActionListener listener){\r
- listeners.add(listener);\r
- }\r
-\r
- public void removeActionListener(ActionListener listener){\r
- listeners.remove(listener);\r
- }\r
-\r
- public void setShowLabel(JLabel label){\r
- this.showLabel = label;\r
- }\r
-\r
- public JLabel getShowLabel(){\r
- return showLabel;\r
- }\r
-\r
- public String getLabel(){\r
- return label;\r
- }\r
-\r
- @Override\r
- public void paintComponent(Graphics g){\r
- super.paintComponent(g);\r
- Graphics2D gg = (Graphics2D)g;\r
- Stroke stroke = gg.getStroke();\r
- Dimension d = getSize();\r
-\r
- if(entered){\r
- g.setColor(getOverColor());\r
- drawer.drawOver(gg, d.width, d.height);\r
- }\r
- else{\r
- g.setColor(getForeground());\r
- drawer.draw(gg, d.width, d.height);\r
- }\r
- gg.setStroke(stroke);\r
- }\r
-\r
- public Color getOverColor(){\r
- return overColor;\r
- }\r
-\r
- public void setOverColor(Color overColor){\r
- this.overColor = overColor;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds;
+
+/*
+ * $Id$
+ */
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Stroke;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JLabel;
+
+import jp.sourceforge.stigmata.ui.swing.mds.mark.DrawerFactory;
+
+/**
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+class PointComponent extends JLabel{
+ private static final long serialVersionUID = 6945871049990818511L;
+ public static final Color DEFAULT_OVER_COLOR = Color.BLUE;
+
+ private boolean entered = false;
+ private Color overColor = DEFAULT_OVER_COLOR;
+ private String label;
+ private MarkDrawer drawer;
+ private JLabel showLabel = null;
+ private List<ActionListener> listeners = new ArrayList<ActionListener>();
+
+ public PointComponent(String label, double x, double y){
+ this(label);
+
+ setToolTipText(String.format("%s [%g, %g]", label, x, y));
+ drawer = DrawerFactory.getInstance().create(GeometoryType.UPPER_TRIANGLE);
+ }
+
+ public PointComponent(String label, double x, double y, MarkDrawer drawer){
+ this(label);
+ this.drawer = drawer;
+ setToolTipText(String.format("%s [%g, %g]", label, x, y));
+ }
+
+ public PointComponent(String label){
+ this.label = label;
+ setSize(10, 10);
+ setMinimumSize(getSize());
+ setMaximumSize(getSize());
+ setPreferredSize(getSize());
+
+ addMouseListener(new MouseAdapter(){
+ @Override
+ public void mouseEntered(MouseEvent e){
+ entered = true;
+ if(showLabel != null){
+ showLabel.setVisible(true);
+ showLabel.repaint();
+ }
+ repaint();
+ }
+
+ @Override
+ public void mouseExited(MouseEvent e){
+ entered = false;
+ if(showLabel != null){
+ showLabel.setVisible(false);
+ showLabel.repaint();
+ }
+ repaint();
+ }
+
+ @Override
+ public void mouseClicked(MouseEvent e){
+ if(e.getClickCount() >= 2){
+ ActionEvent ae = new ActionEvent(PointComponent.this, 0, null);
+ for(ActionListener listener: listeners){
+ listener.actionPerformed(ae);
+ }
+ }
+ }
+ });
+ setToolTipText(this.label);
+ }
+
+ public void addActionListener(ActionListener listener){
+ listeners.add(listener);
+ }
+
+ public void removeActionListener(ActionListener listener){
+ listeners.remove(listener);
+ }
+
+ public void setShowLabel(JLabel label){
+ this.showLabel = label;
+ }
+
+ public JLabel getShowLabel(){
+ return showLabel;
+ }
+
+ public String getLabel(){
+ return label;
+ }
+
+ @Override
+ public void paintComponent(Graphics g){
+ super.paintComponent(g);
+ Graphics2D gg = (Graphics2D)g;
+ Stroke stroke = gg.getStroke();
+ Dimension d = getSize();
+
+ if(entered){
+ g.setColor(getOverColor());
+ drawer.drawOver(gg, d.width, d.height);
+ }
+ else{
+ g.setColor(getForeground());
+ drawer.draw(gg, d.width, d.height);
+ }
+ gg.setStroke(stroke);
+ }
+
+ public Color getOverColor(){
+ return overColor;
+ }
+
+ public void setOverColor(Color overColor){
+ this.overColor = overColor;
+ }
+}
-package jp.naist.se.stigmata.ui.swing.mds.mark;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.Graphics2D;\r
-import java.awt.Shape;\r
-import java.awt.Stroke;\r
-\r
-import jp.naist.se.stigmata.ui.swing.mds.MarkDrawer;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-abstract class AbstractMarkDrawer implements MarkDrawer{\r
- private boolean fill;\r
-\r
- public AbstractMarkDrawer(){\r
- this(false);\r
- }\r
-\r
- public AbstractMarkDrawer(boolean fill){\r
- setFilled(fill);\r
- }\r
-\r
- public boolean isFilled(){\r
- return fill;\r
- }\r
-\r
- public void setFilled(boolean fill){\r
- this.fill = fill;\r
- }\r
-\r
- public abstract Shape getPlainShape(int w, int h);\r
-\r
- public abstract Shape getOveredShape(int w, int h);\r
-\r
- public Stroke getPlainStroke(){\r
- return null;\r
- }\r
-\r
- public Stroke getOverStroke(){\r
- return null;\r
- }\r
-\r
- public void draw(Graphics2D g, int w, int h){\r
- Stroke s = getPlainStroke();\r
- if(s != null){\r
- g.setStroke(s);\r
- }\r
- drawImpl(g, getPlainShape(w, h));\r
- }\r
-\r
- public void drawOver(Graphics2D g, int w, int h){\r
- Stroke s = getOverStroke();\r
- if(s != null){\r
- g.setStroke(s);\r
- }\r
- drawImpl(g, getOveredShape(w, h));\r
- }\r
-\r
- private void drawImpl(Graphics2D g, Shape s){\r
- if(isFilled()){\r
- g.fill(s);\r
- }\r
- else{\r
- g.draw(s);\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds.mark;
+
+/*
+ * $Id$
+ */
+
+import java.awt.Graphics2D;
+import java.awt.Shape;
+import java.awt.Stroke;
+
+import jp.sourceforge.stigmata.ui.swing.mds.MarkDrawer;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+abstract class AbstractMarkDrawer implements MarkDrawer{
+ private boolean fill;
+
+ public AbstractMarkDrawer(){
+ this(false);
+ }
+
+ public AbstractMarkDrawer(boolean fill){
+ setFilled(fill);
+ }
+
+ public boolean isFilled(){
+ return fill;
+ }
+
+ public void setFilled(boolean fill){
+ this.fill = fill;
+ }
+
+ public abstract Shape getPlainShape(int w, int h);
+
+ public abstract Shape getOveredShape(int w, int h);
+
+ public Stroke getPlainStroke(){
+ return null;
+ }
+
+ public Stroke getOverStroke(){
+ return null;
+ }
+
+ public void draw(Graphics2D g, int w, int h){
+ Stroke s = getPlainStroke();
+ if(s != null){
+ g.setStroke(s);
+ }
+ drawImpl(g, getPlainShape(w, h));
+ }
+
+ public void drawOver(Graphics2D g, int w, int h){
+ Stroke s = getOverStroke();
+ if(s != null){
+ g.setStroke(s);
+ }
+ drawImpl(g, getOveredShape(w, h));
+ }
+
+ private void drawImpl(Graphics2D g, Shape s){
+ if(isFilled()){
+ g.fill(s);
+ }
+ else{
+ g.draw(s);
+ }
+ }
+}
-package jp.naist.se.stigmata.ui.swing.mds.mark;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.Shape;\r
-import java.awt.geom.Ellipse2D;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-class CircleDrawer extends AbstractMarkDrawer{\r
-\r
- public CircleDrawer(){\r
- super();\r
- }\r
-\r
- public CircleDrawer(boolean fill){\r
- super(fill);\r
- }\r
-\r
- @Override\r
- public Shape getPlainShape(int w, int h){\r
- double ww = (double)w / 2d;\r
- double hh = (double)h / 2d;\r
-\r
- return new Ellipse2D.Double(ww - 2d, hh - 2d, 4d, 4d);\r
- }\r
-\r
- @Override\r
- public Shape getOveredShape(int w, int h){\r
- return new Ellipse2D.Double(0, 0, w - 1d, h - 1d);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds.mark;
+
+/*
+ * $Id$
+ */
+
+import java.awt.Shape;
+import java.awt.geom.Ellipse2D;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+class CircleDrawer extends AbstractMarkDrawer{
+
+ public CircleDrawer(){
+ super();
+ }
+
+ public CircleDrawer(boolean fill){
+ super(fill);
+ }
+
+ @Override
+ public Shape getPlainShape(int w, int h){
+ double ww = (double)w / 2d;
+ double hh = (double)h / 2d;
+
+ return new Ellipse2D.Double(ww - 2d, hh - 2d, 4d, 4d);
+ }
+
+ @Override
+ public Shape getOveredShape(int w, int h){
+ return new Ellipse2D.Double(0, 0, w - 1d, h - 1d);
+ }
+}
-package jp.naist.se.stigmata.ui.swing.mds.mark;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.Shape;\r
-import java.awt.geom.GeneralPath;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-class CrossDrawer extends LineMarkDrawer{\r
- public CrossDrawer(){\r
- }\r
-\r
- @Override\r
- public Shape getPlainShape(int w, int h){\r
- float ww = w / 2f;\r
- float hh = h / 2f;\r
-\r
- GeneralPath path = new GeneralPath();\r
- path.moveTo(0, hh);\r
- path.lineTo(w, hh);\r
- path.moveTo(ww, 0);\r
- path.lineTo(ww, h);\r
-\r
- return path;\r
- }\r
-\r
- @Override\r
- public Shape getOveredShape(int w, int h){\r
- return getPlainShape(w, h);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds.mark;
+
+/*
+ * $Id$
+ */
+
+import java.awt.Shape;
+import java.awt.geom.GeneralPath;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+class CrossDrawer extends LineMarkDrawer{
+ public CrossDrawer(){
+ }
+
+ @Override
+ public Shape getPlainShape(int w, int h){
+ float ww = w / 2f;
+ float hh = h / 2f;
+
+ GeneralPath path = new GeneralPath();
+ path.moveTo(0, hh);
+ path.lineTo(w, hh);
+ path.moveTo(ww, 0);
+ path.lineTo(ww, h);
+
+ return path;
+ }
+
+ @Override
+ public Shape getOveredShape(int w, int h){
+ return getPlainShape(w, h);
+ }
+}
-package jp.naist.se.stigmata.ui.swing.mds.mark;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.Shape;\r
-import java.awt.geom.GeneralPath;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-class DownerTriangleDrawer extends AbstractMarkDrawer{\r
- public DownerTriangleDrawer(){\r
- super();\r
- }\r
-\r
- public DownerTriangleDrawer(boolean fill){\r
- super(fill);\r
- }\r
-\r
- @Override\r
- public Shape getPlainShape(int w, int h){\r
- float ww = (float)w / 2f;\r
- float hh = (float)h / 2f;\r
-\r
- GeneralPath path = new GeneralPath();\r
- path.moveTo(ww - 2f, hh - 2f);\r
- path.lineTo(ww + 2f, hh - 2f);\r
- path.lineTo(ww, hh - 2f + (float)(2 * Math.sqrt(3)));\r
- path.lineTo(ww - 2f, hh - 2f);\r
-\r
- return path;\r
- }\r
-\r
- @Override\r
- public Shape getOveredShape(int w, int h){\r
- GeneralPath path = new GeneralPath();\r
- path.moveTo(0, 0);\r
- path.lineTo(w, 0);\r
- path.lineTo(w / 2f, h);\r
- path.lineTo(0, 0);\r
-\r
- return path;\r
- }\r
-\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds.mark;
+
+/*
+ * $Id$
+ */
+
+import java.awt.Shape;
+import java.awt.geom.GeneralPath;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+class DownerTriangleDrawer extends AbstractMarkDrawer{
+ public DownerTriangleDrawer(){
+ super();
+ }
+
+ public DownerTriangleDrawer(boolean fill){
+ super(fill);
+ }
+
+ @Override
+ public Shape getPlainShape(int w, int h){
+ float ww = (float)w / 2f;
+ float hh = (float)h / 2f;
+
+ GeneralPath path = new GeneralPath();
+ path.moveTo(ww - 2f, hh - 2f);
+ path.lineTo(ww + 2f, hh - 2f);
+ path.lineTo(ww, hh - 2f + (float)(2 * Math.sqrt(3)));
+ path.lineTo(ww - 2f, hh - 2f);
+
+ return path;
+ }
+
+ @Override
+ public Shape getOveredShape(int w, int h){
+ GeneralPath path = new GeneralPath();
+ path.moveTo(0, 0);
+ path.lineTo(w, 0);
+ path.lineTo(w / 2f, h);
+ path.lineTo(0, 0);
+
+ return path;
+ }
+
+}
-package jp.naist.se.stigmata.ui.swing.mds.mark;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-\r
-import javax.swing.Icon;\r
-\r
-import jp.naist.se.stigmata.ui.swing.mds.GeometoryType;\r
-import jp.naist.se.stigmata.ui.swing.mds.MarkDrawer;\r
-import jp.naist.se.stigmata.ui.swing.mds.MarkIcon;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class DrawerFactory{\r
- private static final DrawerFactory instance = new DrawerFactory();\r
-\r
- private Map<GeometoryType, MarkDrawer> drawers = new HashMap<GeometoryType, MarkDrawer>();\r
-\r
- private DrawerFactory(){\r
- drawers.put(GeometoryType.CROSS, new CrossDrawer());\r
- drawers.put(GeometoryType.XMARK, new XMarkDrawer());\r
- drawers.put(GeometoryType.STAR, new StarDrawer());\r
- drawers.put(GeometoryType.CIRCLE, new CircleDrawer());\r
- drawers.put(GeometoryType.FILLED_CIRCLE, new CircleDrawer(true));\r
- drawers.put(GeometoryType.RHOMBUS, new RhombusDrawer());\r
- drawers.put(GeometoryType.FILLED_RHOMBUS, new RhombusDrawer(true));\r
- drawers.put(GeometoryType.RECTANGLE, new RectangleDrawer());\r
- drawers.put(GeometoryType.FILLED_RECTANGLE, new RectangleDrawer(true));\r
- drawers.put(GeometoryType.UPPER_TRIANGLE, new UpperTriangleDrawer());\r
- drawers.put(GeometoryType.FILLED_UPPER_TRIANGLE, new UpperTriangleDrawer(true));\r
- drawers.put(GeometoryType.DOWNER_TRIANGLE, new DownerTriangleDrawer());\r
- drawers.put(GeometoryType.FILLED_DOWNER_TRIANGLE, new DownerTriangleDrawer(true));\r
- }\r
-\r
- public static DrawerFactory getInstance(){\r
- return instance;\r
- }\r
-\r
- public MarkDrawer create(GeometoryType type){\r
- return drawers.get(type);\r
- }\r
-\r
- public Icon createIcon(GeometoryType type){\r
- return new MarkIcon(create(type));\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds.mark;
+
+/*
+ * $Id$
+ */
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.Icon;
+
+import jp.sourceforge.stigmata.ui.swing.mds.GeometoryType;
+import jp.sourceforge.stigmata.ui.swing.mds.MarkDrawer;
+import jp.sourceforge.stigmata.ui.swing.mds.MarkIcon;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class DrawerFactory{
+ private static final DrawerFactory instance = new DrawerFactory();
+
+ private Map<GeometoryType, MarkDrawer> drawers = new HashMap<GeometoryType, MarkDrawer>();
+
+ private DrawerFactory(){
+ drawers.put(GeometoryType.CROSS, new CrossDrawer());
+ drawers.put(GeometoryType.XMARK, new XMarkDrawer());
+ drawers.put(GeometoryType.STAR, new StarDrawer());
+ drawers.put(GeometoryType.CIRCLE, new CircleDrawer());
+ drawers.put(GeometoryType.FILLED_CIRCLE, new CircleDrawer(true));
+ drawers.put(GeometoryType.RHOMBUS, new RhombusDrawer());
+ drawers.put(GeometoryType.FILLED_RHOMBUS, new RhombusDrawer(true));
+ drawers.put(GeometoryType.RECTANGLE, new RectangleDrawer());
+ drawers.put(GeometoryType.FILLED_RECTANGLE, new RectangleDrawer(true));
+ drawers.put(GeometoryType.UPPER_TRIANGLE, new UpperTriangleDrawer());
+ drawers.put(GeometoryType.FILLED_UPPER_TRIANGLE, new UpperTriangleDrawer(true));
+ drawers.put(GeometoryType.DOWNER_TRIANGLE, new DownerTriangleDrawer());
+ drawers.put(GeometoryType.FILLED_DOWNER_TRIANGLE, new DownerTriangleDrawer(true));
+ }
+
+ public static DrawerFactory getInstance(){
+ return instance;
+ }
+
+ public MarkDrawer create(GeometoryType type){
+ return drawers.get(type);
+ }
+
+ public Icon createIcon(GeometoryType type){
+ return new MarkIcon(create(type));
+ }
+}
-package jp.naist.se.stigmata.ui.swing.mds.mark;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.BasicStroke;\r
-import java.awt.Stroke;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-abstract class LineMarkDrawer extends AbstractMarkDrawer{\r
- public LineMarkDrawer(){\r
- }\r
-\r
- @Override\r
- public boolean isFilled(){\r
- return false;\r
- }\r
-\r
- @Override\r
- public void setFilled(boolean fill){\r
- // nothing to to.\r
- }\r
-\r
- @Override\r
- public Stroke getOverStroke(){\r
- return new BasicStroke(3f);\r
- }\r
-\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds.mark;
+
+/*
+ * $Id$
+ */
+
+import java.awt.BasicStroke;
+import java.awt.Stroke;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+abstract class LineMarkDrawer extends AbstractMarkDrawer{
+ public LineMarkDrawer(){
+ }
+
+ @Override
+ public boolean isFilled(){
+ return false;
+ }
+
+ @Override
+ public void setFilled(boolean fill){
+ // nothing to to.
+ }
+
+ @Override
+ public Stroke getOverStroke(){
+ return new BasicStroke(3f);
+ }
+
+}
-package jp.naist.se.stigmata.ui.swing.mds.mark;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.Shape;\r
-import java.awt.geom.Rectangle2D;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-class RectangleDrawer extends AbstractMarkDrawer{\r
-\r
- public RectangleDrawer(){\r
- super();\r
- }\r
-\r
- public RectangleDrawer(boolean fill){\r
- super(fill);\r
- }\r
-\r
- @Override\r
- public Shape getPlainShape(int w, int h){\r
- double ww = (double)w / 2d;\r
- double hh = (double)h / 2d;\r
-\r
- return new Rectangle2D.Double(ww - 2d, hh - 2d, 4d, 4d);\r
- }\r
-\r
- @Override\r
- public Shape getOveredShape(int w, int h){\r
- return new Rectangle2D.Double(0, 0, w - 1, h - 1);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds.mark;
+
+/*
+ * $Id$
+ */
+
+import java.awt.Shape;
+import java.awt.geom.Rectangle2D;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+class RectangleDrawer extends AbstractMarkDrawer{
+
+ public RectangleDrawer(){
+ super();
+ }
+
+ public RectangleDrawer(boolean fill){
+ super(fill);
+ }
+
+ @Override
+ public Shape getPlainShape(int w, int h){
+ double ww = (double)w / 2d;
+ double hh = (double)h / 2d;
+
+ return new Rectangle2D.Double(ww - 2d, hh - 2d, 4d, 4d);
+ }
+
+ @Override
+ public Shape getOveredShape(int w, int h){
+ return new Rectangle2D.Double(0, 0, w - 1, h - 1);
+ }
+}
-package jp.naist.se.stigmata.ui.swing.mds.mark;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.Shape;\r
-import java.awt.geom.GeneralPath;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-class RhombusDrawer extends AbstractMarkDrawer{\r
-\r
- public RhombusDrawer(){\r
- super();\r
- }\r
-\r
- public RhombusDrawer(boolean fill){\r
- super(fill);\r
- }\r
-\r
- @Override\r
- public Shape getPlainShape(int w, int h){\r
- float ww = (float)w / 2f;\r
- float hh = (float)h / 2f;\r
-\r
- GeneralPath path = new GeneralPath();\r
- path.moveTo(ww, hh - 2f);\r
- path.lineTo(ww + 2f, hh);\r
- path.lineTo(ww, hh + 2f);\r
- path.lineTo(ww - 2f, hh);\r
- path.lineTo(ww, hh - 2f);\r
-\r
- return path;\r
- }\r
-\r
- @Override\r
- public Shape getOveredShape(int w, int h){\r
- float ww = (float)w / 2f;\r
- float hh = (float)h / 2f;\r
-\r
- GeneralPath path = new GeneralPath();\r
- path.moveTo(ww, 0);\r
- path.lineTo(0, hh);\r
- path.lineTo(ww, h);\r
- path.lineTo(w, hh);\r
- path.lineTo(ww, 0);\r
-\r
- return path;\r
- }\r
-\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds.mark;
+
+/*
+ * $Id$
+ */
+
+import java.awt.Shape;
+import java.awt.geom.GeneralPath;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+class RhombusDrawer extends AbstractMarkDrawer{
+
+ public RhombusDrawer(){
+ super();
+ }
+
+ public RhombusDrawer(boolean fill){
+ super(fill);
+ }
+
+ @Override
+ public Shape getPlainShape(int w, int h){
+ float ww = (float)w / 2f;
+ float hh = (float)h / 2f;
+
+ GeneralPath path = new GeneralPath();
+ path.moveTo(ww, hh - 2f);
+ path.lineTo(ww + 2f, hh);
+ path.lineTo(ww, hh + 2f);
+ path.lineTo(ww - 2f, hh);
+ path.lineTo(ww, hh - 2f);
+
+ return path;
+ }
+
+ @Override
+ public Shape getOveredShape(int w, int h){
+ float ww = (float)w / 2f;
+ float hh = (float)h / 2f;
+
+ GeneralPath path = new GeneralPath();
+ path.moveTo(ww, 0);
+ path.lineTo(0, hh);
+ path.lineTo(ww, h);
+ path.lineTo(w, hh);
+ path.lineTo(ww, 0);
+
+ return path;
+ }
+
+}
-package jp.naist.se.stigmata.ui.swing.mds.mark;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.Shape;\r
-import java.awt.geom.GeneralPath;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-class StarDrawer extends LineMarkDrawer{\r
- public StarDrawer(){\r
- }\r
-\r
- @Override\r
- public Shape getPlainShape(int w, int h){\r
- float ww = w / 2f;\r
- float hh = h / 2f;\r
-\r
- GeneralPath path = new GeneralPath();\r
- path.moveTo(0, hh); path.lineTo(w, hh);\r
- path.moveTo(ww, 0); path.lineTo(ww, h);\r
- path.moveTo(0, 0); path.lineTo(w, h);\r
- path.moveTo(w, 0); path.lineTo(0, h);\r
-\r
- return path;\r
- }\r
-\r
- @Override\r
- public Shape getOveredShape(int w, int h){\r
- return getPlainShape(w, h);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds.mark;
+
+/*
+ * $Id$
+ */
+
+import java.awt.Shape;
+import java.awt.geom.GeneralPath;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+class StarDrawer extends LineMarkDrawer{
+ public StarDrawer(){
+ }
+
+ @Override
+ public Shape getPlainShape(int w, int h){
+ float ww = w / 2f;
+ float hh = h / 2f;
+
+ GeneralPath path = new GeneralPath();
+ path.moveTo(0, hh); path.lineTo(w, hh);
+ path.moveTo(ww, 0); path.lineTo(ww, h);
+ path.moveTo(0, 0); path.lineTo(w, h);
+ path.moveTo(w, 0); path.lineTo(0, h);
+
+ return path;
+ }
+
+ @Override
+ public Shape getOveredShape(int w, int h){
+ return getPlainShape(w, h);
+ }
+}
-package jp.naist.se.stigmata.ui.swing.mds.mark;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.Shape;\r
-import java.awt.geom.GeneralPath;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-class UpperTriangleDrawer extends AbstractMarkDrawer{\r
-\r
- public UpperTriangleDrawer(){\r
- super();\r
- }\r
-\r
- public UpperTriangleDrawer(boolean fill){\r
- super(fill);\r
- }\r
-\r
- @Override\r
- public Shape getPlainShape(int w, int h){\r
- float ww = (float)w / 2f;\r
- float hh = (float)h / 2f;\r
-\r
- GeneralPath path = new GeneralPath();\r
- path.moveTo(ww - 2f, hh + 2f);\r
- path.lineTo(ww + 2f, hh + 2f);\r
- path.lineTo(ww, hh + 2f - (float)(2 * Math.sqrt(3)));\r
- path.lineTo(ww - 2f, hh + 2f);\r
-\r
- return path;\r
- }\r
-\r
- @Override\r
- public Shape getOveredShape(int w, int h){\r
- GeneralPath path = new GeneralPath();\r
- path.moveTo(0, h - 1f);\r
- path.lineTo(w, h - 1f);\r
- path.lineTo(w / 2f, 0);\r
- path.lineTo(0, h - 1f);\r
-\r
- return path;\r
- }\r
-\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds.mark;
+
+/*
+ * $Id$
+ */
+
+import java.awt.Shape;
+import java.awt.geom.GeneralPath;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+class UpperTriangleDrawer extends AbstractMarkDrawer{
+
+ public UpperTriangleDrawer(){
+ super();
+ }
+
+ public UpperTriangleDrawer(boolean fill){
+ super(fill);
+ }
+
+ @Override
+ public Shape getPlainShape(int w, int h){
+ float ww = (float)w / 2f;
+ float hh = (float)h / 2f;
+
+ GeneralPath path = new GeneralPath();
+ path.moveTo(ww - 2f, hh + 2f);
+ path.lineTo(ww + 2f, hh + 2f);
+ path.lineTo(ww, hh + 2f - (float)(2 * Math.sqrt(3)));
+ path.lineTo(ww - 2f, hh + 2f);
+
+ return path;
+ }
+
+ @Override
+ public Shape getOveredShape(int w, int h){
+ GeneralPath path = new GeneralPath();
+ path.moveTo(0, h - 1f);
+ path.lineTo(w, h - 1f);
+ path.lineTo(w / 2f, 0);
+ path.lineTo(0, h - 1f);
+
+ return path;
+ }
+
+}
-package jp.naist.se.stigmata.ui.swing.mds.mark;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.Shape;\r
-import java.awt.geom.GeneralPath;\r
-\r
-/**\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-class XMarkDrawer extends LineMarkDrawer{\r
- public XMarkDrawer(){\r
- }\r
-\r
- @Override\r
- public Shape getPlainShape(int w, int h){\r
- GeneralPath path = new GeneralPath();\r
- path.moveTo(0, 0);\r
- path.lineTo(w, h);\r
- path.moveTo(w, 0);\r
- path.lineTo(0, h);\r
-\r
- return path;\r
- }\r
-\r
- @Override\r
- public Shape getOveredShape(int w, int h){\r
- return getPlainShape(w, h);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.mds.mark;
+
+/*
+ * $Id$
+ */
+
+import java.awt.Shape;
+import java.awt.geom.GeneralPath;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+class XMarkDrawer extends LineMarkDrawer{
+ public XMarkDrawer(){
+ }
+
+ @Override
+ public Shape getPlainShape(int w, int h){
+ GeneralPath path = new GeneralPath();
+ path.moveTo(0, 0);
+ path.lineTo(w, h);
+ path.moveTo(w, 0);
+ path.lineTo(0, h);
+
+ return path;
+ }
+
+ @Override
+ public Shape getOveredShape(int w, int h){
+ return getPlainShape(w, h);
+ }
+}
-package jp.naist.se.stigmata.ui.swing.tab;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.LayoutManager;\r
-import java.awt.Rectangle;\r
-import java.awt.event.MouseAdapter;\r
-import java.awt.event.MouseEvent;\r
-\r
-import javax.swing.JPanel;\r
-\r
-/**\r
- * This program is copied from below URL.\r
- * http://terai.xrea.jp/Swing/EditTabTitle.html\r
- * \r
- * @author Haruaki Tamada\r
- * @author Terai Atsuhiro\r
- * @version $Revision$ $Date$\r
- */\r
-class EditableGlassPane extends JPanel{\r
- private static final long serialVersionUID = 9009103705988625476L;\r
-\r
- private EditableTabbedPane pane;\r
- private Rectangle rect;\r
-\r
- public EditableGlassPane(EditableTabbedPane panel){\r
- super((LayoutManager)null);\r
- this.pane = panel;\r
-\r
- setOpaque(false);\r
- addMouseListener(new MouseAdapter(){\r
- public void mouseClicked(MouseEvent e){\r
- if(rect == null || rect.contains(e.getPoint()))\r
- return;\r
- pane.renameTab();\r
- }\r
- });\r
- }\r
-\r
- public void setRectangle(int x, int y, int w, int h){\r
- setRectangle(new Rectangle(x, y, w, h));\r
- }\r
-\r
- public void setRectangle(Rectangle rect){\r
- this.rect = rect;\r
- }\r
-\r
- public Rectangle getRectangle(){\r
- return rect;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.tab;
+
+/*
+ * $Id$
+ */
+
+import java.awt.LayoutManager;
+import java.awt.Rectangle;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.JPanel;
+
+/**
+ * This program is copied from below URL.
+ * http://terai.xrea.jp/Swing/EditTabTitle.html
+ *
+ * @author Haruaki Tamada
+ * @author Terai Atsuhiro
+ * @version $Revision$ $Date$
+ */
+class EditableGlassPane extends JPanel{
+ private static final long serialVersionUID = 9009103705988625476L;
+
+ private EditableTabbedPane pane;
+ private Rectangle rect;
+
+ public EditableGlassPane(EditableTabbedPane panel){
+ super((LayoutManager)null);
+ this.pane = panel;
+
+ setOpaque(false);
+ addMouseListener(new MouseAdapter(){
+ public void mouseClicked(MouseEvent e){
+ if(rect == null || rect.contains(e.getPoint()))
+ return;
+ pane.renameTab();
+ }
+ });
+ }
+
+ public void setRectangle(int x, int y, int w, int h){
+ setRectangle(new Rectangle(x, y, w, h));
+ }
+
+ public void setRectangle(Rectangle rect){
+ this.rect = rect;
+ }
+
+ public Rectangle getRectangle(){
+ return rect;
+ }
+}
-package jp.naist.se.stigmata.ui.swing.tab;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.FocusTraversalPolicy;\r
-import java.awt.Rectangle;\r
-import java.awt.event.FocusAdapter;\r
-import java.awt.event.FocusEvent;\r
-import java.awt.event.KeyAdapter;\r
-import java.awt.event.KeyEvent;\r
-import java.awt.event.MouseAdapter;\r
-import java.awt.event.MouseEvent;\r
-\r
-import javax.swing.BorderFactory;\r
-import javax.swing.JFrame;\r
-import javax.swing.JMenuBar;\r
-import javax.swing.JTabbedPane;\r
-import javax.swing.JTextField;\r
-\r
-/**\r
- * This program is copied from below URL.\r
- * http://terai.xrea.jp/Swing/EditTabTitle.html\r
- * \r
- * @author Haruaki Tamada\r
- * @author Terai Atsuhiro\r
- * @version $Revision$ $Date$\r
- */\r
-public class EditableTabbedPane extends JTabbedPane{\r
- private static final long serialVersionUID = -66174062280771547L;\r
-\r
- private final EditableGlassPane panel;\r
- private final JTextField editor;\r
- private final JFrame frame;\r
- private final FocusTraversalPolicy policy;\r
- private FocusTraversalPolicy ftp;\r
-\r
- public EditableTabbedPane(JFrame frame){\r
- this.frame = frame;\r
- this.panel = new EditableGlassPane(this);\r
- this.editor = new JTextField();\r
-\r
- policy = new EditableTabbedPaneFocusTraversalPolicy(editor);\r
-\r
- editor.setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 3));\r
- editor.addFocusListener(new FocusAdapter(){\r
- public void focusGained(final FocusEvent e){\r
- ((JTextField)e.getSource()).selectAll();\r
- }\r
- });\r
- editor.addKeyListener(new KeyAdapter(){\r
- public void keyPressed(KeyEvent e){\r
- if(e.getKeyCode() == KeyEvent.VK_ENTER){\r
- renameTab();\r
- }\r
- else if(e.getKeyCode() == KeyEvent.VK_ESCAPE){\r
- cancelEditing();\r
- }\r
- }\r
- });\r
- addMouseListener(new MouseAdapter(){\r
- public void mouseClicked(MouseEvent me){\r
- if(me.getClickCount() == 2){\r
- startEditing();\r
- }\r
- }\r
- });\r
- addKeyListener(new KeyAdapter(){\r
- public void keyPressed(KeyEvent e){\r
- if(e.getKeyCode() == KeyEvent.VK_ENTER){\r
- startEditing();\r
- }\r
- }\r
- });\r
-\r
- frame.setGlassPane(panel);\r
- panel.add(editor);\r
- panel.setVisible(false);\r
- }\r
-\r
- void renameTab(){\r
- frame.setFocusTraversalPolicy(ftp);\r
- if(editor.getText().trim().length() > 0){\r
- setTitleAt(getSelectedIndex(), editor.getText());\r
- }\r
- panel.setVisible(false);\r
- }\r
-\r
- private void startEditing(){\r
- initEditor();\r
- ftp = frame.getFocusTraversalPolicy();\r
- panel.setVisible(true);\r
- editor.requestFocusInWindow();\r
- frame.setFocusTraversalPolicy(policy);\r
- }\r
-\r
- private void cancelEditing(){\r
- frame.setFocusTraversalPolicy(ftp);\r
- panel.setVisible(false);\r
- }\r
-\r
- private void initEditor(){\r
- JMenuBar bar = frame.getJMenuBar();\r
- Rectangle rect = getUI().getTabBounds(this, getSelectedIndex());\r
- rect.setRect(rect.x + 2, rect.y + 2, rect.width - 2, rect.height - 2);\r
- if(bar != null){\r
- rect.y += bar.getSize().height;\r
- }\r
- panel.setRectangle(rect);\r
-\r
- editor.setBounds(rect);\r
- editor.setText(getTitleAt(getSelectedIndex()));\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.tab;
+
+/*
+ * $Id$
+ */
+
+import java.awt.FocusTraversalPolicy;
+import java.awt.Rectangle;
+import java.awt.event.FocusAdapter;
+import java.awt.event.FocusEvent;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.BorderFactory;
+import javax.swing.JFrame;
+import javax.swing.JMenuBar;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextField;
+
+/**
+ * This program is copied from below URL.
+ * http://terai.xrea.jp/Swing/EditTabTitle.html
+ *
+ * @author Haruaki Tamada
+ * @author Terai Atsuhiro
+ * @version $Revision$ $Date$
+ */
+public class EditableTabbedPane extends JTabbedPane{
+ private static final long serialVersionUID = -66174062280771547L;
+
+ private final EditableGlassPane panel;
+ private final JTextField editor;
+ private final JFrame frame;
+ private final FocusTraversalPolicy policy;
+ private FocusTraversalPolicy ftp;
+
+ public EditableTabbedPane(JFrame frame){
+ this.frame = frame;
+ this.panel = new EditableGlassPane(this);
+ this.editor = new JTextField();
+
+ policy = new EditableTabbedPaneFocusTraversalPolicy(editor);
+
+ editor.setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 3));
+ editor.addFocusListener(new FocusAdapter(){
+ public void focusGained(final FocusEvent e){
+ ((JTextField)e.getSource()).selectAll();
+ }
+ });
+ editor.addKeyListener(new KeyAdapter(){
+ public void keyPressed(KeyEvent e){
+ if(e.getKeyCode() == KeyEvent.VK_ENTER){
+ renameTab();
+ }
+ else if(e.getKeyCode() == KeyEvent.VK_ESCAPE){
+ cancelEditing();
+ }
+ }
+ });
+ addMouseListener(new MouseAdapter(){
+ public void mouseClicked(MouseEvent me){
+ if(me.getClickCount() == 2){
+ startEditing();
+ }
+ }
+ });
+ addKeyListener(new KeyAdapter(){
+ public void keyPressed(KeyEvent e){
+ if(e.getKeyCode() == KeyEvent.VK_ENTER){
+ startEditing();
+ }
+ }
+ });
+
+ frame.setGlassPane(panel);
+ panel.add(editor);
+ panel.setVisible(false);
+ }
+
+ void renameTab(){
+ frame.setFocusTraversalPolicy(ftp);
+ if(editor.getText().trim().length() > 0){
+ setTitleAt(getSelectedIndex(), editor.getText());
+ }
+ panel.setVisible(false);
+ }
+
+ private void startEditing(){
+ initEditor();
+ ftp = frame.getFocusTraversalPolicy();
+ panel.setVisible(true);
+ editor.requestFocusInWindow();
+ frame.setFocusTraversalPolicy(policy);
+ }
+
+ private void cancelEditing(){
+ frame.setFocusTraversalPolicy(ftp);
+ panel.setVisible(false);
+ }
+
+ private void initEditor(){
+ JMenuBar bar = frame.getJMenuBar();
+ Rectangle rect = getUI().getTabBounds(this, getSelectedIndex());
+ rect.setRect(rect.x + 2, rect.y + 2, rect.width - 2, rect.height - 2);
+ if(bar != null){
+ rect.y += bar.getSize().height;
+ }
+ panel.setRectangle(rect);
+
+ editor.setBounds(rect);
+ editor.setText(getTitleAt(getSelectedIndex()));
+ }
+}
-package jp.naist.se.stigmata.ui.swing.tab;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.awt.Component;\r
-import java.awt.Container;\r
-import java.awt.FocusTraversalPolicy;\r
-\r
-import javax.swing.JTextField;\r
-\r
-/**\r
- * This program is copied from below URL.\r
- * http://terai.xrea.jp/Swing/EditTabTitle.html\r
- * \r
- * @author Haruaki Tamada\r
- * @author Terai Atsuhiro\r
- * @version $Revision$ $Date$\r
- */\r
-class EditableTabbedPaneFocusTraversalPolicy extends FocusTraversalPolicy{\r
- private JTextField editor;\r
-\r
- public EditableTabbedPaneFocusTraversalPolicy(JTextField editor){\r
- this.editor = editor;\r
- }\r
-\r
- @Override\r
- public Component getFirstComponent(Container focusCycleRoot){\r
- return null;\r
- }\r
-\r
- @Override\r
- public Component getLastComponent(Container focusCycleRoot){\r
- return editor;\r
- }\r
-\r
- @Override\r
- public Component getComponentAfter(Container focusCycleRoot, Component cmp){\r
- return editor;\r
- }\r
-\r
- @Override\r
- public Component getComponentBefore(Container focusCycleRoot, Component cmp){\r
- return editor;\r
- }\r
-\r
- @Override\r
- public Component getDefaultComponent(Container focusCycleRoot){\r
- return editor;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.ui.swing.tab;
+
+/*
+ * $Id$
+ */
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.FocusTraversalPolicy;
+
+import javax.swing.JTextField;
+
+/**
+ * This program is copied from below URL.
+ * http://terai.xrea.jp/Swing/EditTabTitle.html
+ *
+ * @author Haruaki Tamada
+ * @author Terai Atsuhiro
+ * @version $Revision$ $Date$
+ */
+class EditableTabbedPaneFocusTraversalPolicy extends FocusTraversalPolicy{
+ private JTextField editor;
+
+ public EditableTabbedPaneFocusTraversalPolicy(JTextField editor){
+ this.editor = editor;
+ }
+
+ @Override
+ public Component getFirstComponent(Container focusCycleRoot){
+ return null;
+ }
+
+ @Override
+ public Component getLastComponent(Container focusCycleRoot){
+ return editor;
+ }
+
+ @Override
+ public Component getComponentAfter(Container focusCycleRoot, Component cmp){
+ return editor;
+ }
+
+ @Override
+ public Component getComponentBefore(Container focusCycleRoot, Component cmp){
+ return editor;
+ }
+
+ @Override
+ public Component getDefaultComponent(Container focusCycleRoot){
+ return editor;
+ }
+}
-package jp.naist.se.stigmata.utils;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.Iterator;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revission$ $Date$\r
- */\r
-public class ArrayIterator<T> implements Iterator<T>{\r
- private T[] values;\r
- private int length;\r
- private int currentIndex = 0;\r
-\r
- public ArrayIterator(T[] values){\r
- this.values = values;\r
- if(values != null){\r
- length = values.length;\r
- }\r
- else{\r
- length = 0;\r
- }\r
- }\r
-\r
- public boolean hasNext(){\r
- return currentIndex < length;\r
- }\r
-\r
- public T next(){\r
- T value = values[currentIndex];\r
- currentIndex++;\r
- return value;\r
- }\r
-\r
- public void remove(){\r
- }\r
-}\r
+package jp.sourceforge.stigmata.utils;
+
+/*
+ * $Id$
+ */
+
+import java.util.Iterator;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revission$ $Date$
+ */
+public class ArrayIterator<T> implements Iterator<T>{
+ private T[] values;
+ private int length;
+ private int currentIndex = 0;
+
+ public ArrayIterator(T[] values){
+ this.values = values;
+ if(values != null){
+ length = values.length;
+ }
+ else{
+ length = 0;
+ }
+ }
+
+ public boolean hasNext(){
+ return currentIndex < length;
+ }
+
+ public T next(){
+ T value = values[currentIndex];
+ currentIndex++;
+ return value;
+ }
+
+ public void remove(){
+ }
+}
-package jp.naist.se.stigmata.utils;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.IOException;\r
-import java.io.PrintWriter;\r
-\r
-import jp.naist.se.stigmata.ui.swing.UnsupportedFormatException;\r
-\r
-/**\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public interface AsciiDataWritable{\r
- public void writeAsciiData(PrintWriter out, String format) throws IOException, UnsupportedFormatException;\r
-}\r
+package jp.sourceforge.stigmata.utils;
+
+/*
+ * $Id$
+ */
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import jp.sourceforge.stigmata.ui.swing.UnsupportedFormatException;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public interface AsciiDataWritable{
+ public void writeAsciiData(PrintWriter out, String format) throws IOException, UnsupportedFormatException;
+}
-package jp.naist.se.stigmata.utils;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.IOException;\r
-import java.io.OutputStream;\r
-\r
-import jp.naist.se.stigmata.ui.swing.UnsupportedFormatException;\r
-\r
-/**\r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public interface BinaryDataWritable{\r
- public void writeBinaryData(OutputStream out, String format) throws IOException, UnsupportedFormatException;\r
-}\r
+package jp.sourceforge.stigmata.utils;
+
+/*
+ * $Id$
+ */
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+import jp.sourceforge.stigmata.ui.swing.UnsupportedFormatException;
+
+/**
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public interface BinaryDataWritable{
+ public void writeBinaryData(OutputStream out, String format) throws IOException, UnsupportedFormatException;
+}
-package jp.naist.se.stigmata.utils;\r
-\r
-/*\r
- * $Id$\r
- */\r
-import java.io.IOException;\r
-import java.io.PrintWriter;\r
-import java.net.URL;\r
-import java.util.Iterator;\r
-import java.util.Map;\r
-\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.ComparisonPairFilter;\r
-import jp.naist.se.stigmata.ComparisonPairFilterSet;\r
-import jp.naist.se.stigmata.birthmarks.BirthmarkService;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-import org.apache.commons.beanutils.BeanUtils;\r
-\r
-/**\r
- * Export birthmark environment to xml file.\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ConfigFileExporter{\r
- private BirthmarkEnvironment environment;\r
-\r
- public ConfigFileExporter(BirthmarkEnvironment environment){\r
- this.environment = environment;\r
- }\r
-\r
- public void export(BirthmarkEnvironment environment, PrintWriter out) throws IOException{\r
- new ConfigFileExporter(environment).export(out);\r
- }\r
-\r
- public void export(PrintWriter out) throws IOException{\r
- out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");\r
- out.println("<stigmata>");\r
-\r
- exportServices(out);\r
- exportFilters(out);\r
- exportWellknownClasses(out);\r
- exportClasspath(out);\r
- exportProperties(out);\r
-\r
- out.println("</stigmata>");\r
- out.flush();\r
- }\r
-\r
- private void exportProperties(PrintWriter out) throws IOException{\r
- out.println(" <properties>");\r
- for(Iterator<String> i = environment.propertyKeys(); i.hasNext(); ){\r
- String key = i.next();\r
- String value = environment.getProperty(key);\r
- out.println(" <property>");\r
- out.printf(" <name>%s</name>%n", key);\r
- out.printf(" <value>%s</value>%n", value);\r
- out.println(" </property>");\r
- }\r
- out.println(" </properties>");\r
- }\r
-\r
- private void exportClasspath(PrintWriter out) throws IOException{\r
- out.println(" <classpath-list>");\r
- for(URL location: environment.getClasspathContext()){\r
- out.printf(" <classpath>%s</classpath>%n", location.toString());\r
- }\r
- out.println(" </classpath-list>");\r
- }\r
-\r
- private void exportWellknownClasses(PrintWriter out) throws IOException{\r
- out.println(" <wellknown-classes>");\r
- for(WellknownClassJudgeRule rule: environment.getWellknownClassManager()){\r
- String value = rule.getPattern();\r
- String tag;\r
- String matchtag;\r
- switch(rule.getMatchPartType()){\r
- case CLASS_NAME:\r
- tag = "class-name";\r
- break;\r
- case FULLY_NAME:\r
- tag = "fully-name";\r
- break;\r
- case PACKAGE_NAME:\r
- tag = "package-name";\r
- break;\r
- default:\r
- throw new InternalError("unknown part type: " + rule.getMatchPartType());\r
- }\r
- switch(rule.getMatchType()){\r
- case EXACT:\r
- matchtag = "match";\r
- break;\r
- case NOT_MATCH:\r
- matchtag = "not-match";\r
- break;\r
- case PREFIX:\r
- matchtag = "prefix";\r
- break;\r
- case SUFFIX:\r
- matchtag = "suffix";\r
- break;\r
- default:\r
- throw new InternalError("unknown match type: " + rule.getMatchType());\r
- }\r
-\r
- out.print(" ");\r
- if(rule.isExclude()) out.print("<exclude>");\r
- out.printf("<%s><%s>%s</%s></%s>", tag, matchtag, value, matchtag, tag);\r
- if(rule.isExclude()) out.print("</exclude>");\r
- out.println();\r
- }\r
- out.println(" </wellknown-classes>");\r
- }\r
-\r
- @SuppressWarnings("unchecked")\r
- private void exportFilters(PrintWriter out) throws IOException{\r
- out.println(" <filterset-list>");\r
- for(ComparisonPairFilterSet filterset: environment.getFilterManager().getFilterSets()){\r
- out.println(" <filterset>");\r
- out.printf(" <name>%s</name>%n", filterset.getName());\r
- out.printf(" <match>%s</match>%n", filterset.isMatchAll()? "all": "any");\r
- out.println(" <filter-list>");\r
- for(ComparisonPairFilter filter: filterset){\r
- out.println(" <filter>");\r
- out.printf(" <filter-type>%s</filter-type>%n", filter.getService().getFilterName());\r
- out.printf(" <criterion>%s</criterion>%n", filter.getCriterion());\r
- try{\r
- Map props = BeanUtils.describe(filter);\r
- props.remove("service");\r
- props.remove("class");\r
- props.remove("criterion");\r
- props.remove("acceptableCriteria");\r
- out.println(" <attributes>");\r
- for(Object object: props.entrySet()){\r
- Map.Entry entry = (Map.Entry)object;\r
- Object value = entry.getValue();\r
- out.println(" <attribute>");\r
- out.printf(" <name>%s</name>%n", String.valueOf(entry.getKey()));\r
- if(value == null){\r
- out.println(" <value></value>%n");\r
- }\r
- else{\r
- out.printf(" <value>%s</value>%n", String.valueOf(entry.getValue()));\r
- }\r
- out.println(" </attribute>");\r
- }\r
- out.println(" </attributes>");\r
- } catch(Exception e){\r
- e.printStackTrace();\r
- }\r
- out.println(" </filter>");\r
- }\r
- out.println(" </filter-list>");\r
- out.println(" </filterset>");\r
- }\r
- out.println(" </filterset-list>");\r
- }\r
-\r
- private void exportServices(PrintWriter out) throws IOException{\r
- out.println(" <birthmark-services>");\r
- for(BirthmarkSpi service: environment.getServices()){\r
- if(service.isExpert() && service instanceof BirthmarkService){\r
- out.println(" <birthmark-service>");\r
- out.printf(" <type>%s</type>%n", service.getType());\r
- out.printf(" <display-name>%s</display-name>%n", service.getDisplayType());\r
- out.printf(" <description>%s</description>%n", service.getDescription());\r
- out.printf(" <extractor>%s</extractor>%n", service.getExtractorClassName());\r
- out.printf(" <comparator>%s</comparator>%n", service.getComparatorClassName());\r
- out.println(" </birthmark-service>");\r
- }\r
- }\r
- out.println(" </birthmark-services>");\r
- }\r
-}\r
+package jp.sourceforge.stigmata.utils;
+
+/*
+ * $Id$
+ */
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.Map;
+
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.ComparisonPairFilter;
+import jp.sourceforge.stigmata.ComparisonPairFilterSet;
+import jp.sourceforge.stigmata.birthmarks.BirthmarkService;
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+import org.apache.commons.beanutils.BeanUtils;
+
+/**
+ * Export birthmark environment to xml file.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ConfigFileExporter{
+ private BirthmarkEnvironment environment;
+
+ public ConfigFileExporter(BirthmarkEnvironment environment){
+ this.environment = environment;
+ }
+
+ public void export(BirthmarkEnvironment environment, PrintWriter out) throws IOException{
+ new ConfigFileExporter(environment).export(out);
+ }
+
+ public void export(PrintWriter out) throws IOException{
+ out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
+ out.println("<stigmata>");
+
+ exportServices(out);
+ exportFilters(out);
+ exportWellknownClasses(out);
+ exportClasspath(out);
+ exportProperties(out);
+
+ out.println("</stigmata>");
+ out.flush();
+ }
+
+ private void exportProperties(PrintWriter out) throws IOException{
+ out.println(" <properties>");
+ for(Iterator<String> i = environment.propertyKeys(); i.hasNext(); ){
+ String key = i.next();
+ String value = environment.getProperty(key);
+ out.println(" <property>");
+ out.printf(" <name>%s</name>%n", key);
+ out.printf(" <value>%s</value>%n", value);
+ out.println(" </property>");
+ }
+ out.println(" </properties>");
+ }
+
+ private void exportClasspath(PrintWriter out) throws IOException{
+ out.println(" <classpath-list>");
+ for(URL location: environment.getClasspathContext()){
+ out.printf(" <classpath>%s</classpath>%n", location.toString());
+ }
+ out.println(" </classpath-list>");
+ }
+
+ private void exportWellknownClasses(PrintWriter out) throws IOException{
+ out.println(" <wellknown-classes>");
+ for(WellknownClassJudgeRule rule: environment.getWellknownClassManager()){
+ String value = rule.getPattern();
+ String tag;
+ String matchtag;
+ switch(rule.getMatchPartType()){
+ case CLASS_NAME:
+ tag = "class-name";
+ break;
+ case FULLY_NAME:
+ tag = "fully-name";
+ break;
+ case PACKAGE_NAME:
+ tag = "package-name";
+ break;
+ default:
+ throw new InternalError("unknown part type: " + rule.getMatchPartType());
+ }
+ switch(rule.getMatchType()){
+ case EXACT:
+ matchtag = "match";
+ break;
+ case NOT_MATCH:
+ matchtag = "not-match";
+ break;
+ case PREFIX:
+ matchtag = "prefix";
+ break;
+ case SUFFIX:
+ matchtag = "suffix";
+ break;
+ default:
+ throw new InternalError("unknown match type: " + rule.getMatchType());
+ }
+
+ out.print(" ");
+ if(rule.isExclude()) out.print("<exclude>");
+ out.printf("<%s><%s>%s</%s></%s>", tag, matchtag, value, matchtag, tag);
+ if(rule.isExclude()) out.print("</exclude>");
+ out.println();
+ }
+ out.println(" </wellknown-classes>");
+ }
+
+ @SuppressWarnings("unchecked")
+ private void exportFilters(PrintWriter out) throws IOException{
+ out.println(" <filterset-list>");
+ for(ComparisonPairFilterSet filterset: environment.getFilterManager().getFilterSets()){
+ out.println(" <filterset>");
+ out.printf(" <name>%s</name>%n", filterset.getName());
+ out.printf(" <match>%s</match>%n", filterset.isMatchAll()? "all": "any");
+ out.println(" <filter-list>");
+ for(ComparisonPairFilter filter: filterset){
+ out.println(" <filter>");
+ out.printf(" <filter-type>%s</filter-type>%n", filter.getService().getFilterName());
+ out.printf(" <criterion>%s</criterion>%n", filter.getCriterion());
+ try{
+ Map props = BeanUtils.describe(filter);
+ props.remove("service");
+ props.remove("class");
+ props.remove("criterion");
+ props.remove("acceptableCriteria");
+ out.println(" <attributes>");
+ for(Object object: props.entrySet()){
+ Map.Entry entry = (Map.Entry)object;
+ Object value = entry.getValue();
+ out.println(" <attribute>");
+ out.printf(" <name>%s</name>%n", String.valueOf(entry.getKey()));
+ if(value == null){
+ out.println(" <value></value>%n");
+ }
+ else{
+ out.printf(" <value>%s</value>%n", String.valueOf(entry.getValue()));
+ }
+ out.println(" </attribute>");
+ }
+ out.println(" </attributes>");
+ } catch(Exception e){
+ e.printStackTrace();
+ }
+ out.println(" </filter>");
+ }
+ out.println(" </filter-list>");
+ out.println(" </filterset>");
+ }
+ out.println(" </filterset-list>");
+ }
+
+ private void exportServices(PrintWriter out) throws IOException{
+ out.println(" <birthmark-services>");
+ for(BirthmarkSpi service: environment.getServices()){
+ if(service.isExpert() && service instanceof BirthmarkService){
+ out.println(" <birthmark-service>");
+ out.printf(" <type>%s</type>%n", service.getType());
+ out.printf(" <display-name>%s</display-name>%n", service.getDisplayType());
+ out.printf(" <description>%s</description>%n", service.getDescription());
+ out.printf(" <extractor>%s</extractor>%n", service.getExtractorClassName());
+ out.printf(" <comparator>%s</comparator>%n", service.getComparatorClassName());
+ out.println(" </birthmark-service>");
+ }
+ }
+ out.println(" </birthmark-services>");
+ }
+}
-package jp.naist.se.stigmata.utils;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.net.MalformedURLException;\r
-import java.net.URL;\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-\r
-import javax.xml.parsers.ParserConfigurationException;\r
-import javax.xml.parsers.SAXParser;\r
-import javax.xml.parsers.SAXParserFactory;\r
-\r
-import jp.naist.se.stigmata.BirthmarkEnvironment;\r
-import jp.naist.se.stigmata.ComparisonPairFilter;\r
-import jp.naist.se.stigmata.ComparisonPairFilterSet;\r
-import jp.naist.se.stigmata.Stigmata;\r
-import jp.naist.se.stigmata.birthmarks.BirthmarkService;\r
-\r
-import org.xml.sax.Attributes;\r
-import org.xml.sax.SAXException;\r
-import org.xml.sax.helpers.DefaultHandler;\r
-\r
-/**\r
- * configuration file parser.\r
- * \r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ConfigFileImporter{\r
- private BirthmarkEnvironment environment;\r
-\r
- public ConfigFileImporter(BirthmarkEnvironment environment){\r
- this.environment = environment;\r
- }\r
-\r
- public ConfigFileImporter(){\r
- // generate environment.\r
- }\r
-\r
- public BirthmarkEnvironment parse(InputStream in) throws IOException{\r
- try{\r
- SAXParserFactory factory = SAXParserFactory.newInstance();\r
- SAXParser parser = factory.newSAXParser();\r
- Handler handler = new Handler(getEnvironment());\r
- parser.parse(in, handler);\r
- this.environment = handler.getEnvironment();\r
-\r
- return environment;\r
- }catch(ParserConfigurationException e){\r
- throw new IOException(e.getMessage());\r
- }catch(SAXException e){\r
- throw new IOException(e.getMessage());\r
- }\r
- }\r
-\r
- public BirthmarkEnvironment getEnvironment(){\r
- return environment;\r
- }\r
-\r
- private static enum Part{\r
- WELLKNOWN_CLASSES, PROPERTIES, CLASSPATH, SERVICES, FILTER_SET, FILTER_DEFINITION,\r
- }\r
-\r
- private static class Handler extends DefaultHandler{\r
- private BirthmarkEnvironment environment;\r
- private WellknownClassManager manager;\r
- private BirthmarkService service;\r
- private ComparisonPairFilterSet filter;\r
- private Part part;\r
- private boolean exclude;\r
- private WellknownClassJudgeRule.MatchType matchType;\r
- private WellknownClassJudgeRule.MatchPartType partType;\r
- private String qname;\r
- private String key;\r
- private String filterType, filterCriterion, attributeName;\r
- private Map<String, String> filterAttributes = new HashMap<String, String>();\r
-\r
- public Handler(BirthmarkEnvironment environment){\r
- if(environment == null){\r
- environment = Stigmata.getInstance().createEnvironment();\r
- }\r
- this.environment = environment;\r
- this.manager = environment.getWellknownClassManager();\r
- }\r
-\r
- public BirthmarkEnvironment getEnvironment(){\r
- return environment;\r
- }\r
-\r
- @Override\r
- public void startElement(String uri, String localName, String qname,\r
- Attributes attributes) throws SAXException{\r
- this.qname = qname;\r
-\r
- if(qname.equals("wellknown-classes")){\r
- part = Part.WELLKNOWN_CLASSES;\r
- }\r
- else if(qname.equals("property")){\r
- part = Part.PROPERTIES;\r
- }\r
- else if(qname.equals("classpath-list")){\r
- part = Part.CLASSPATH;\r
- }\r
- else if(qname.equals("birthmark-service")){\r
- part = Part.SERVICES;\r
- service = new BirthmarkService();\r
- service.setUserDefined(false);\r
- }\r
- else if(qname.equals("filterset-list")){\r
- part = Part.FILTER_SET;\r
- }\r
-\r
- if(part == Part.FILTER_SET){\r
- if(qname.equals("filterset")){\r
- filter = new ComparisonPairFilterSet();\r
- }\r
- else if(qname.equals("filter")){\r
- part = Part.FILTER_DEFINITION;\r
- filterAttributes.clear();\r
- }\r
- }\r
- else if(part == Part.WELLKNOWN_CLASSES){\r
- if(qname.equals("exclude")){\r
- exclude = true;\r
- }\r
- else if(qname.equals("package-name")){\r
- partType = WellknownClassJudgeRule.MatchPartType.PACKAGE_NAME;\r
- }\r
- else if(qname.equals("class-name")){\r
- partType = WellknownClassJudgeRule.MatchPartType.CLASS_NAME;\r
- }\r
- else if(qname.equals("fully-name")){\r
- partType = WellknownClassJudgeRule.MatchPartType.FULLY_NAME;\r
- }\r
- else if(qname.equals("suffix")){\r
- matchType = WellknownClassJudgeRule.MatchType.SUFFIX;\r
- }\r
- else if(qname.equals("prefix")){\r
- matchType = WellknownClassJudgeRule.MatchType.PREFIX;\r
- }\r
- else if(qname.equals("match")){\r
- matchType = WellknownClassJudgeRule.MatchType.EXACT;\r
- }\r
- else if(qname.equals("not-match")){\r
- matchType = WellknownClassJudgeRule.MatchType.NOT_MATCH;\r
- }\r
- }\r
- }\r
-\r
- @Override\r
- public void characters(char[] data, int offset, int length) throws SAXException{\r
- String value = new String(data, offset, length).trim();\r
-\r
- if(value.length() > 0){\r
- if(part == Part.PROPERTIES){\r
- if(qname.equals("name")){\r
- key = value;\r
- }\r
- else if(qname.equals("value")){\r
- environment.addProperty(key, value);\r
- }\r
- }\r
- else if(part == Part.WELLKNOWN_CLASSES\r
- && (qname.equals("suffix") || qname.equals("prefix") || qname.equals("match"))){\r
- manager.add(new WellknownClassJudgeRule(value, matchType, partType, exclude));\r
- exclude = false;\r
- }\r
- else if(part == Part.CLASSPATH && qname.equals("classpath")){\r
- try{\r
- environment.getClasspathContext().addClasspath(\r
- new URL(value));\r
- }catch(MalformedURLException e){\r
- throw new SAXException(e);\r
- }\r
- }\r
- else if(part == Part.SERVICES){\r
- if(qname.equals("type"))\r
- service.setType(value);\r
- else if(qname.equals("display-name"))\r
- service.setDisplayType(value);\r
- else if(qname.equals("description"))\r
- service.setDescription(value);\r
- else if(qname.equals("extractor"))\r
- service.setExtractorClassName(value);\r
- else if(qname.equals("comparator"))\r
- service.setComparatorClassName(value);\r
- }\r
- else if(part == Part.FILTER_SET){\r
- if(qname.equals("name")){\r
- filter.setName(value);\r
- }\r
- else if(qname.equals("match")){\r
- if(value.equals("all")){\r
- filter.setMatchAll();\r
- }\r
- else{\r
- filter.setMatchAny();\r
- }\r
- }\r
- }\r
- else if(part == Part.FILTER_DEFINITION){\r
- if(qname.equals("filter-type")){\r
- filterType = value;\r
- }\r
- else if(qname.equals("criterion")){\r
- filterCriterion = value;\r
- }\r
- else if(qname.equals("name")){\r
- attributeName = value;\r
- }\r
- else{\r
- filterAttributes.put(attributeName, value);\r
- }\r
- }\r
- }\r
- }\r
-\r
- @Override\r
- public void endElement(String uri, String localname, String qname){\r
- if(part == Part.SERVICES && qname.equals("birthmark-service")){\r
- environment.addService(service);\r
- service = null;\r
- }\r
- else if(part == Part.FILTER_DEFINITION && qname.equals("filter")){\r
- ComparisonPairFilter f = environment.getFilterManager().buildFilter(\r
- filterType, filterCriterion, filterAttributes\r
- );\r
- filter.addFilter(f);\r
- part = Part.FILTER_SET;\r
- }\r
- else if(part == Part.FILTER_SET && qname.equals("filterset")){\r
- environment.getFilterManager().addFilterSet(filter);\r
- }\r
- }\r
- }\r
-}\r
+package jp.sourceforge.stigmata.utils;
+
+/*
+ * $Id$
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import jp.sourceforge.stigmata.BirthmarkEnvironment;
+import jp.sourceforge.stigmata.ComparisonPairFilter;
+import jp.sourceforge.stigmata.ComparisonPairFilterSet;
+import jp.sourceforge.stigmata.Stigmata;
+import jp.sourceforge.stigmata.birthmarks.BirthmarkService;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ * configuration file parser.
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ConfigFileImporter{
+ private BirthmarkEnvironment environment;
+
+ public ConfigFileImporter(BirthmarkEnvironment environment){
+ this.environment = environment;
+ }
+
+ public ConfigFileImporter(){
+ // generate environment.
+ }
+
+ public BirthmarkEnvironment parse(InputStream in) throws IOException{
+ try{
+ SAXParserFactory factory = SAXParserFactory.newInstance();
+ SAXParser parser = factory.newSAXParser();
+ Handler handler = new Handler(getEnvironment());
+ parser.parse(in, handler);
+ this.environment = handler.getEnvironment();
+
+ return environment;
+ }catch(ParserConfigurationException e){
+ throw new IOException(e.getMessage());
+ }catch(SAXException e){
+ throw new IOException(e.getMessage());
+ }
+ }
+
+ public BirthmarkEnvironment getEnvironment(){
+ return environment;
+ }
+
+ private static enum Part{
+ WELLKNOWN_CLASSES, PROPERTIES, CLASSPATH, SERVICES, FILTER_SET, FILTER_DEFINITION,
+ }
+
+ private static class Handler extends DefaultHandler{
+ private BirthmarkEnvironment environment;
+ private WellknownClassManager manager;
+ private BirthmarkService service;
+ private ComparisonPairFilterSet filter;
+ private Part part;
+ private boolean exclude;
+ private WellknownClassJudgeRule.MatchType matchType;
+ private WellknownClassJudgeRule.MatchPartType partType;
+ private String qname;
+ private String key;
+ private String filterType, filterCriterion, attributeName;
+ private Map<String, String> filterAttributes = new HashMap<String, String>();
+
+ public Handler(BirthmarkEnvironment environment){
+ if(environment == null){
+ environment = Stigmata.getInstance().createEnvironment();
+ }
+ this.environment = environment;
+ this.manager = environment.getWellknownClassManager();
+ }
+
+ public BirthmarkEnvironment getEnvironment(){
+ return environment;
+ }
+
+ @Override
+ public void startElement(String uri, String localName, String qname,
+ Attributes attributes) throws SAXException{
+ this.qname = qname;
+
+ if(qname.equals("wellknown-classes")){
+ part = Part.WELLKNOWN_CLASSES;
+ }
+ else if(qname.equals("property")){
+ part = Part.PROPERTIES;
+ }
+ else if(qname.equals("classpath-list")){
+ part = Part.CLASSPATH;
+ }
+ else if(qname.equals("birthmark-service")){
+ part = Part.SERVICES;
+ service = new BirthmarkService();
+ service.setUserDefined(false);
+ }
+ else if(qname.equals("filterset-list")){
+ part = Part.FILTER_SET;
+ }
+
+ if(part == Part.FILTER_SET){
+ if(qname.equals("filterset")){
+ filter = new ComparisonPairFilterSet();
+ }
+ else if(qname.equals("filter")){
+ part = Part.FILTER_DEFINITION;
+ filterAttributes.clear();
+ }
+ }
+ else if(part == Part.WELLKNOWN_CLASSES){
+ if(qname.equals("exclude")){
+ exclude = true;
+ }
+ else if(qname.equals("package-name")){
+ partType = WellknownClassJudgeRule.MatchPartType.PACKAGE_NAME;
+ }
+ else if(qname.equals("class-name")){
+ partType = WellknownClassJudgeRule.MatchPartType.CLASS_NAME;
+ }
+ else if(qname.equals("fully-name")){
+ partType = WellknownClassJudgeRule.MatchPartType.FULLY_NAME;
+ }
+ else if(qname.equals("suffix")){
+ matchType = WellknownClassJudgeRule.MatchType.SUFFIX;
+ }
+ else if(qname.equals("prefix")){
+ matchType = WellknownClassJudgeRule.MatchType.PREFIX;
+ }
+ else if(qname.equals("match")){
+ matchType = WellknownClassJudgeRule.MatchType.EXACT;
+ }
+ else if(qname.equals("not-match")){
+ matchType = WellknownClassJudgeRule.MatchType.NOT_MATCH;
+ }
+ }
+ }
+
+ @Override
+ public void characters(char[] data, int offset, int length) throws SAXException{
+ String value = new String(data, offset, length).trim();
+
+ if(value.length() > 0){
+ if(part == Part.PROPERTIES){
+ if(qname.equals("name")){
+ key = value;
+ }
+ else if(qname.equals("value")){
+ environment.addProperty(key, value);
+ }
+ }
+ else if(part == Part.WELLKNOWN_CLASSES
+ && (qname.equals("suffix") || qname.equals("prefix") || qname.equals("match"))){
+ manager.add(new WellknownClassJudgeRule(value, matchType, partType, exclude));
+ exclude = false;
+ }
+ else if(part == Part.CLASSPATH && qname.equals("classpath")){
+ try{
+ environment.getClasspathContext().addClasspath(
+ new URL(value));
+ }catch(MalformedURLException e){
+ throw new SAXException(e);
+ }
+ }
+ else if(part == Part.SERVICES){
+ if(qname.equals("type"))
+ service.setType(value);
+ else if(qname.equals("display-name"))
+ service.setDisplayType(value);
+ else if(qname.equals("description"))
+ service.setDescription(value);
+ else if(qname.equals("extractor"))
+ service.setExtractorClassName(value);
+ else if(qname.equals("comparator"))
+ service.setComparatorClassName(value);
+ }
+ else if(part == Part.FILTER_SET){
+ if(qname.equals("name")){
+ filter.setName(value);
+ }
+ else if(qname.equals("match")){
+ if(value.equals("all")){
+ filter.setMatchAll();
+ }
+ else{
+ filter.setMatchAny();
+ }
+ }
+ }
+ else if(part == Part.FILTER_DEFINITION){
+ if(qname.equals("filter-type")){
+ filterType = value;
+ }
+ else if(qname.equals("criterion")){
+ filterCriterion = value;
+ }
+ else if(qname.equals("name")){
+ attributeName = value;
+ }
+ else{
+ filterAttributes.put(attributeName, value);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void endElement(String uri, String localname, String qname){
+ if(part == Part.SERVICES && qname.equals("birthmark-service")){
+ environment.addService(service);
+ service = null;
+ }
+ else if(part == Part.FILTER_DEFINITION && qname.equals("filter")){
+ ComparisonPairFilter f = environment.getFilterManager().buildFilter(
+ filterType, filterCriterion, filterAttributes
+ );
+ filter.addFilter(f);
+ part = Part.FILTER_SET;
+ }
+ else if(part == Part.FILTER_SET && qname.equals("filterset")){
+ environment.getFilterManager().addFilterSet(filter);
+ }
+ }
+ }
+}
-package jp.naist.se.stigmata.utils;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.HashMap;\r
-import java.util.Locale;\r
-import java.util.Map;\r
-import java.util.MissingResourceException;\r
-import java.util.ResourceBundle;\r
-\r
-/**\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class LocalizedDescriptionManager{\r
- public static enum ServiceCategory{\r
- comparator, extractor, birthmark, formatter, filter,\r
- };\r
- private Map<Locale, ResourceBundle> resources = new HashMap<Locale, ResourceBundle>();\r
-\r
- /**\r
- * only one instance of singleton pattern.\r
- */\r
- private static LocalizedDescriptionManager manager = new LocalizedDescriptionManager();\r
-\r
- private LocalizedDescriptionManager(){\r
- }\r
-\r
- public String getDisplayType(Locale locale, String type){\r
- return getDisplayType(locale, type, ServiceCategory.birthmark);\r
- }\r
-\r
- public String getDisplayType(Locale locale, String type, ServiceCategory category){\r
- try{\r
- return getBundle(locale).getString(category.name() + "." + type + ".display.type");\r
- } catch(MissingResourceException e){\r
- return null;\r
- }\r
- }\r
-\r
- public String getDescription(Locale locale, String birthmarkType){\r
- return getDescription(locale, birthmarkType, ServiceCategory.birthmark);\r
- }\r
-\r
- public String getDescription(Locale locale, String type, ServiceCategory category){\r
- try{\r
- return getBundle(locale).getString(category.name() + "." + type + ".description");\r
- } catch(MissingResourceException e){\r
- return null;\r
- }\r
- }\r
-\r
- private ResourceBundle getBundle(Locale locale){\r
- ResourceBundle bundle = resources.get(locale);\r
- if(bundle == null){\r
- bundle = ResourceBundle.getBundle("resources.description", locale);\r
- resources.put(locale, bundle);\r
- }\r
- return bundle;\r
- }\r
-\r
- public static LocalizedDescriptionManager getInstance(){\r
- return manager;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.utils;
+
+/*
+ * $Id$
+ */
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class LocalizedDescriptionManager{
+ public static enum ServiceCategory{
+ comparator, extractor, birthmark, formatter, filter,
+ };
+ private Map<Locale, ResourceBundle> resources = new HashMap<Locale, ResourceBundle>();
+
+ /**
+ * only one instance of singleton pattern.
+ */
+ private static LocalizedDescriptionManager manager = new LocalizedDescriptionManager();
+
+ private LocalizedDescriptionManager(){
+ }
+
+ public String getDisplayType(Locale locale, String type){
+ return getDisplayType(locale, type, ServiceCategory.birthmark);
+ }
+
+ public String getDisplayType(Locale locale, String type, ServiceCategory category){
+ try{
+ return getBundle(locale).getString(category.name() + "." + type + ".display.type");
+ } catch(MissingResourceException e){
+ return null;
+ }
+ }
+
+ public String getDescription(Locale locale, String birthmarkType){
+ return getDescription(locale, birthmarkType, ServiceCategory.birthmark);
+ }
+
+ public String getDescription(Locale locale, String type, ServiceCategory category){
+ try{
+ return getBundle(locale).getString(category.name() + "." + type + ".description");
+ } catch(MissingResourceException e){
+ return null;
+ }
+ }
+
+ private ResourceBundle getBundle(Locale locale){
+ ResourceBundle bundle = resources.get(locale);
+ if(bundle == null){
+ bundle = ResourceBundle.getBundle("resources.description", locale);
+ resources.put(locale, bundle);
+ }
+ return bundle;
+ }
+
+ public static LocalizedDescriptionManager getInstance(){
+ return manager;
+ }
+}
-package jp.naist.se.stigmata.utils;
+package jp.sourceforge.stigmata.utils;
/*
* $Id$
-package jp.naist.se.stigmata.utils;
+package jp.sourceforge.stigmata.utils;
/*
* $Id$
-package jp.naist.se.stigmata.utils;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.util.Iterator;\r
-import java.util.NoSuchElementException;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada \r
- * @version $Revision$ $Date$\r
- */\r
-public class NullIterator<T> implements Iterator<T>{\r
- public boolean hasNext(){\r
- return false;\r
- }\r
-\r
- public T next(){\r
- throw new NoSuchElementException("no more object");\r
- }\r
-\r
- public void remove(){\r
- }\r
-}\r
+package jp.sourceforge.stigmata.utils;
+
+/*
+ * $Id$
+ */
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class NullIterator<T> implements Iterator<T>{
+ public boolean hasNext(){
+ return false;
+ }
+
+ public T next(){
+ throw new NoSuchElementException("no more object");
+ }
+
+ public void remove(){
+ }
+}
-package jp.naist.se.stigmata.utils;
+package jp.sourceforge.stigmata.utils;
import java.io.File;
-package jp.naist.se.stigmata.utils;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.ByteArrayOutputStream;\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.net.URL;\r
-import java.net.URLClassLoader;\r
-import java.net.URLStreamHandlerFactory;\r
-\r
-/**\r
- * ClassLoader for war file.\r
- * A war file layouts classes in /WEB-INF/classes directory.\r
- * Therefore, plain jar class loader cannot load classes included in war file.\r
- * Because plain jar class loader only loads classes in top directory.\r
- * Then, this class loader can load classes included in a plain jar file and a war file.\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class WarClassLoader extends URLClassLoader{\r
- public WarClassLoader(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory){\r
- super(urls, parent, factory);\r
- }\r
-\r
- public WarClassLoader(URL[] urls, ClassLoader parent){\r
- super(urls, parent);\r
- }\r
-\r
- public WarClassLoader(URL[] urls){\r
- super(urls);\r
- }\r
-\r
- @Override\r
- protected Class<?> findClass(String name) throws ClassNotFoundException{\r
- Class<?> clazz = null;\r
- try{\r
- clazz = super.findClass(name);\r
- } catch(ClassNotFoundException e){\r
- String path = "WEB-INF/classes/" + name.replace('.', '/') + ".class";\r
- for(URL url: getURLs()){\r
- if(url.toString().endsWith(".war")){\r
- try{\r
- URL newurl = new URL("jar:" + url + "!/" + path);\r
- InputStream in = newurl.openStream();\r
- ByteArrayOutputStream out = new ByteArrayOutputStream();\r
- byte[] data = new byte[256];\r
- int read = 0;\r
- while((read = in.read(data, 0, data.length)) != -1){\r
- out.write(data, 0, read);\r
- }\r
- byte[] classdata = out.toByteArray();\r
- in.close();\r
- out.close();\r
- \r
- clazz = defineClass(name, classdata, 0, classdata.length);\r
- break;\r
- } catch(IOException exp){\r
- }\r
- }\r
- }\r
- }\r
- if(clazz == null){\r
- throw new ClassNotFoundException(name);\r
- }\r
- return clazz;\r
- }\r
-}\r
+package jp.sourceforge.stigmata.utils;
+
+/*
+ * $Id$
+ */
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.net.URLStreamHandlerFactory;
+
+/**
+ * ClassLoader for war file.
+ * A war file layouts classes in /WEB-INF/classes directory.
+ * Therefore, plain jar class loader cannot load classes included in war file.
+ * Because plain jar class loader only loads classes in top directory.
+ * Then, this class loader can load classes included in a plain jar file and a war file.
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class WarClassLoader extends URLClassLoader{
+ public WarClassLoader(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory){
+ super(urls, parent, factory);
+ }
+
+ public WarClassLoader(URL[] urls, ClassLoader parent){
+ super(urls, parent);
+ }
+
+ public WarClassLoader(URL[] urls){
+ super(urls);
+ }
+
+ @Override
+ protected Class<?> findClass(String name) throws ClassNotFoundException{
+ Class<?> clazz = null;
+ try{
+ clazz = super.findClass(name);
+ } catch(ClassNotFoundException e){
+ String path = "WEB-INF/classes/" + name.replace('.', '/') + ".class";
+ for(URL url: getURLs()){
+ if(url.toString().endsWith(".war")){
+ try{
+ URL newurl = new URL("jar:" + url + "!/" + path);
+ InputStream in = newurl.openStream();
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ byte[] data = new byte[256];
+ int read = 0;
+ while((read = in.read(data, 0, data.length)) != -1){
+ out.write(data, 0, read);
+ }
+ byte[] classdata = out.toByteArray();
+ in.close();
+ out.close();
+
+ clazz = defineClass(name, classdata, 0, classdata.length);
+ break;
+ } catch(IOException exp){
+ }
+ }
+ }
+ }
+ if(clazz == null){
+ throw new ClassNotFoundException(name);
+ }
+ return clazz;
+ }
+}
-package jp.naist.se.stigmata.utils;
+package jp.sourceforge.stigmata.utils;
/*
* $Id$
-package jp.naist.se.stigmata.utils;
+package jp.sourceforge.stigmata.utils;
/*
* $Id$
import java.util.Iterator;
import java.util.List;
-import jp.naist.se.stigmata.utils.WellknownClassJudgeRule.MatchPartType;
-import jp.naist.se.stigmata.utils.WellknownClassJudgeRule.MatchType;
+import jp.sourceforge.stigmata.utils.WellknownClassJudgeRule.MatchPartType;
+import jp.sourceforge.stigmata.utils.WellknownClassJudgeRule.MatchType;
import org.objectweb.asm.Opcodes;
+++ /dev/null
-jp.naist.se.stigmata.birthmarks.comparators.PlainBirthmarkComparatorService\r
-jp.naist.se.stigmata.birthmarks.comparators.LogicalAndBirthmarkComparatorService\r
-jp.naist.se.stigmata.birthmarks.comparators.DPMatchingBirthmarkComparatorService\r
-jp.naist.se.stigmata.birthmarks.comparators.EditDistanceBirthmarkComparatorService\r
-jp.naist.se.stigmata.birthmarks.comparators.ExtendedEditDistanceBirthmarkComparatorService\r
-jp.naist.se.stigmata.birthmarks.comparators.CosineSimilarityBirthmarkComparatorService\r
+++ /dev/null
-jp.naist.se.stigmata.birthmarks.extractors.ConstantValueOfFieldVariableBirthmarkExtractorService\r
-jp.naist.se.stigmata.birthmarks.extractors.InheritanceStructureBirthmarkExtractorService\r
-jp.naist.se.stigmata.birthmarks.extractors.SequentialMethodCallBirthmarkExtractorService\r
-jp.naist.se.stigmata.birthmarks.extractors.UsedClassesBirthmarkExtractorService\r
-jp.naist.se.stigmata.birthmarks.extractors.KGramBasedBirthmarkExtractorService\r
-jp.naist.se.stigmata.birthmarks.extractors.FrequencyMethodCallBirthmarkExtractorService\r
-jp.naist.se.stigmata.birthmarks.extractors.FrequencyUsedClassesBirthmarkExtractorService\r
+++ /dev/null
-jp.naist.se.stigmata.birthmarks.smc.SequentialMethodCallBirthmarkService\r
-jp.naist.se.stigmata.birthmarks.cvfv.ConstantValueOfFieldVariableBirthmarkService\r
-jp.naist.se.stigmata.birthmarks.is.InheritanceStructureBirthmarkService\r
-jp.naist.se.stigmata.birthmarks.uc.UsedClassesBirthmarkService\r
-jp.naist.se.stigmata.birthmarks.kgram.KGramBasedBirthmarkService\r
-jp.naist.se.stigmata.birthmarks.fmc.FrequencyMethodCallBirthmarkService\r
-jp.naist.se.stigmata.birthmarks.fuc.FrequencyUsedClassesBirthmarkService\r
+++ /dev/null
-jp.naist.se.stigmata.filter.BirthmarkElementCountComparisonPairFilterService\r
-jp.naist.se.stigmata.filter.SimilarityComparisonPairFilterService\r
-jp.naist.se.stigmata.filter.TargetNameComparisonPairFilterService\r
-jp.naist.se.stigmata.filter.TotalElementCountComparisonPairFilterService\r
+++ /dev/null
-jp.naist.se.stigmata.result.MemoryExtractedBirthmarkService\r
-jp.naist.se.stigmata.result.XmlFileExtractedBirthmarkService\r
-jp.naist.se.stigmata.result.RDBExtractedBirthmarkService\r
+++ /dev/null
-jp.naist.se.stigmata.printer.xml.XmlResultPrinterService\r
-jp.naist.se.stigmata.printer.csv.CsvResultPrinterService\r
+++ /dev/null
-jp.naist.se.stigmata.ui.swing.filter.BirthmarkElementCountComparisonPairFilterComponentService\r
-jp.naist.se.stigmata.ui.swing.filter.SimilarityComparisonPairFilterComponentService\r
-jp.naist.se.stigmata.ui.swing.filter.TargetNameComparisonPairFilterComponentService\r
-jp.naist.se.stigmata.ui.swing.filter.TotalElementCountComparisonPairFilterComponentService\r
--- /dev/null
+jp.sourceforge.stigmata.birthmarks.comparators.PlainBirthmarkComparatorService
+jp.sourceforge.stigmata.birthmarks.comparators.LogicalAndBirthmarkComparatorService
+jp.sourceforge.stigmata.birthmarks.comparators.DPMatchingBirthmarkComparatorService
+jp.sourceforge.stigmata.birthmarks.comparators.EditDistanceBirthmarkComparatorService
+jp.sourceforge.stigmata.birthmarks.comparators.ExtendedEditDistanceBirthmarkComparatorService
+jp.sourceforge.stigmata.birthmarks.comparators.CosineSimilarityBirthmarkComparatorService
--- /dev/null
+jp.sourceforge.stigmata.birthmarks.extractors.ConstantValueOfFieldVariableBirthmarkExtractorService
+jp.sourceforge.stigmata.birthmarks.extractors.InheritanceStructureBirthmarkExtractorService
+jp.sourceforge.stigmata.birthmarks.extractors.SequentialMethodCallBirthmarkExtractorService
+jp.sourceforge.stigmata.birthmarks.extractors.UsedClassesBirthmarkExtractorService
+jp.sourceforge.stigmata.birthmarks.extractors.KGramBasedBirthmarkExtractorService
+jp.sourceforge.stigmata.birthmarks.extractors.FrequencyMethodCallBirthmarkExtractorService
+jp.sourceforge.stigmata.birthmarks.extractors.FrequencyUsedClassesBirthmarkExtractorService
--- /dev/null
+jp.sourceforge.stigmata.birthmarks.smc.SequentialMethodCallBirthmarkService
+jp.sourceforge.stigmata.birthmarks.cvfv.ConstantValueOfFieldVariableBirthmarkService
+jp.sourceforge.stigmata.birthmarks.is.InheritanceStructureBirthmarkService
+jp.sourceforge.stigmata.birthmarks.uc.UsedClassesBirthmarkService
+jp.sourceforge.stigmata.birthmarks.kgram.KGramBasedBirthmarkService
+jp.sourceforge.stigmata.birthmarks.fmc.FrequencyMethodCallBirthmarkService
+jp.sourceforge.stigmata.birthmarks.fuc.FrequencyUsedClassesBirthmarkService
--- /dev/null
+jp.sourceforge.stigmata.filter.BirthmarkElementCountComparisonPairFilterService
+jp.sourceforge.stigmata.filter.SimilarityComparisonPairFilterService
+jp.sourceforge.stigmata.filter.TargetNameComparisonPairFilterService
+jp.sourceforge.stigmata.filter.TotalElementCountComparisonPairFilterService
--- /dev/null
+jp.sourceforge.stigmata.result.MemoryExtractedBirthmarkService
+jp.sourceforge.stigmata.result.XmlFileExtractedBirthmarkService
+jp.sourceforge.stigmata.result.RDBExtractedBirthmarkService
--- /dev/null
+jp.sourceforge.stigmata.printer.xml.XmlResultPrinterService
+jp.sourceforge.stigmata.printer.csv.CsvResultPrinterService
--- /dev/null
+jp.sourceforge.stigmata.ui.swing.filter.BirthmarkElementCountComparisonPairFilterComponentService
+jp.sourceforge.stigmata.ui.swing.filter.SimilarityComparisonPairFilterComponentService
+jp.sourceforge.stigmata.ui.swing.filter.TargetNameComparisonPairFilterComponentService
+jp.sourceforge.stigmata.ui.swing.filter.TotalElementCountComparisonPairFilterComponentService
cli.interface=java -jar stigmata-%s.jar <OPTIONS> <TARGETS>%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. (SE Lab., NAIST)
+cli.interface.copyright=Copyright (C) by Haruaki Tamada, Ph.D. (Kyoto Sangyo University, Japan)
cli.interface.mailto=Please notify us some bugs and requests to <stigmata-info[ at ]list.sourceforge.jp>
cli.interface.filter.matchall=Match all
cli.interface.filter.matchany=Match any
cli.interface=java -jar stigmata-%s.jar <OPTIONS> <TARGETS>%nTARGETS\82É\82Íjar\83t\83@\83C\83\8b\81Cwar\83t\83@\83C\83\8b\81C\83N\83\89\83X\83t\83@\83C\83\8b\82â\83f\83B\83\8c\83N\83g\83\8a\82ª\8ew\92è\89Â\94\\82Å\82·\81D\r
cli.interface.birthmarks=\8ew\92è\89Â\94\\82È\83o\81[\83X\83}\81[\83N:\r
cli.interface.filters=\8ew\92è\89Â\94\\82È\83t\83B\83\8b\83^:\r
-cli.interface.copyright=Copyright (C) by Haruaki Tamada, Ph.D. (SE Lab., NAIST)\r
+cli.interface.copyright=Copyright (C) by Haruaki Tamada, Ph.D. (Kyoto Sangyo University)\r
cli.interface.mailto=\83\8a\83N\83G\83X\83g\82â\83o\83O\95ñ\8d\90\82Í <stigmata-info[ at ]list.sourceforge.jp> \82Ü\82Å\82¨\8aè\82¢\82µ\82Ü\82·\81D\r
cli.interface.filter.matchall=\91S\82Ä\82Ì\8fð\8c\8f\82É\83}\83b\83`\r
cli.interface.filter.matchany=\82¢\82¸\82ê\82©\82Ì\8fð\8c\8f\82É\83}\83b\83`\r
<type>uc_seq</type>
<display-name>Used Classes (compare as sequence)</display-name>
<description></description>
- <extractor>jp.naist.se.stigmata.birthmarks.uc.UsedClassesBirthmarkExtractor</extractor>
- <comparator>jp.naist.se.stigmata.birthmarks.comparators.PlainBirthmarkComparator</comparator>
+ <extractor>jp.sourceforge.stigmata.birthmarks.uc.UsedClassesBirthmarkExtractor</extractor>
+ <comparator>jp.sourceforge.stigmata.birthmarks.comparators.PlainBirthmarkComparator</comparator>
</birthmark-service>
<birthmark-service>
<type>uc_dp</type>
<display-name>Used Classes (DP matching)</display-name>
<description></description>
- <extractor>jp.naist.se.stigmata.birthmarks.uc.UsedClassesBirthmarkExtractor</extractor>
- <comparator>jp.naist.se.stigmata.birthmarks.comparators.DPMatchingBirthmarkComparator</comparator>
+ <extractor>jp.sourceforge.stigmata.birthmarks.uc.UsedClassesBirthmarkExtractor</extractor>
+ <comparator>jp.sourceforge.stigmata.birthmarks.comparators.DPMatchingBirthmarkComparator</comparator>
</birthmark-service>
<birthmark-service>
<type>uc_ed</type>
<display-name>Used Classes (Edit distance)</display-name>
<description></description>
- <extractor>jp.naist.se.stigmata.birthmarks.uc.UsedClassesBirthmarkExtractor</extractor>
- <comparator>jp.naist.se.stigmata.birthmarks.comparators.EditDistanceBirthmarkComparator</comparator>
+ <extractor>jp.sourceforge.stigmata.birthmarks.uc.UsedClassesBirthmarkExtractor</extractor>
+ <comparator>jp.sourceforge.stigmata.birthmarks.comparators.EditDistanceBirthmarkComparator</comparator>
</birthmark-service>
<birthmark-service>
<type>is_ed</type>
<display-name>Inheritance Structure (Edit distance)</display-name>
<description></description>
- <extractor>jp.naist.se.stigmata.birthmarks.is.InheritanceStructureBirthmarkExtractor</extractor>
- <comparator>jp.naist.se.stigmata.birthmarks.comparators.EditDistanceBirthmarkComparator</comparator>
+ <extractor>jp.sourceforge.stigmata.birthmarks.is.InheritanceStructureBirthmarkExtractor</extractor>
+ <comparator>jp.sourceforge.stigmata.birthmarks.comparators.EditDistanceBirthmarkComparator</comparator>
</birthmark-service>
<birthmark-service>
<type>is_dp</type>
<display-name>Inheritance Structure (DP matching)</display-name>
<description></description>
- <extractor>jp.naist.se.stigmata.birthmarks.is.InheritanceStructureBirthmarkExtractor</extractor>
- <comparator>jp.naist.se.stigmata.birthmarks.comparators.DPMatchingBirthmarkComparator</comparator>
+ <extractor>jp.sourceforge.stigmata.birthmarks.is.InheritanceStructureBirthmarkExtractor</extractor>
+ <comparator>jp.sourceforge.stigmata.birthmarks.comparators.DPMatchingBirthmarkComparator</comparator>
</birthmark-service>
<birthmark-service>
<type>smc_ed</type>
<display-name>Sequence of Method Calls (Edit distance)</display-name>
<description></description>
- <extractor>jp.naist.se.stigmata.birthmarks.smc.SequentialMethodCallBirthmarkExtractor</extractor>
- <comparator>jp.naist.se.stigmata.birthmarks.comparators.EditDistanceBirthmarkComparator</comparator>
+ <extractor>jp.sourceforge.stigmata.birthmarks.smc.SequentialMethodCallBirthmarkExtractor</extractor>
+ <comparator>jp.sourceforge.stigmata.birthmarks.comparators.EditDistanceBirthmarkComparator</comparator>
</birthmark-service>
<birthmark-service>
<type>smc_dp</type>
<display-name>Sequence of Method Calls (DP matching)</display-name>
<description></description>
- <extractor>jp.naist.se.stigmata.birthmarks.smc.SequentialMethodCallBirthmarkExtractor</extractor>
- <comparator>jp.naist.se.stigmata.birthmarks.comparators.DPMatchingBirthmarkComparator</comparator>
+ <extractor>jp.sourceforge.stigmata.birthmarks.smc.SequentialMethodCallBirthmarkExtractor</extractor>
+ <comparator>jp.sourceforge.stigmata.birthmarks.comparators.DPMatchingBirthmarkComparator</comparator>
</birthmark-service>
<birthmark-service>
<type>cvfv_ed</type>
<display-name>Constant Value of Field Variable (Edit distance)</display-name>
<description></description>
- <extractor>jp.naist.se.stigmata.birthmarks.cvfv.ConstantValueOfFieldVariableBirthmarkExtractor</extractor>
- <comparator>jp.naist.se.stigmata.birthmarks.comparators.EditDistanceBirthmarkComparator</comparator>
+ <extractor>jp.sourceforge.stigmata.birthmarks.cvfv.ConstantValueOfFieldVariableBirthmarkExtractor</extractor>
+ <comparator>jp.sourceforge.stigmata.birthmarks.comparators.EditDistanceBirthmarkComparator</comparator>
</birthmark-service>
<birthmark-service>
<type>cvfv_dp</type>
<display-name>Constant Value of Field Variable (DP matching)</display-name>
<description></description>
- <extractor>jp.naist.se.stigmata.birthmarks.cvfv.ConstantValueOfFieldVariableBirthmarkExtractor</extractor>
- <comparator>jp.naist.se.stigmata.birthmarks.comparators.DPMatchingBirthmarkComparator</comparator>
+ <extractor>jp.sourceforge.stigmata.birthmarks.cvfv.ConstantValueOfFieldVariableBirthmarkExtractor</extractor>
+ <comparator>jp.sourceforge.stigmata.birthmarks.comparators.DPMatchingBirthmarkComparator</comparator>
</birthmark-service>
</birthmark-services>
<dependencies>\r
:\r
<dependency>\r
- <groupId>jp.naist.se</groupId>\r
+ <groupId>jp.sourceforge</groupId>\r
<artifactId>stigmata</artifactId>\r
- <version>1.0.0</version>\r
+ <version>1.2.0</version>\r
</dependency>\r
:\r
</dependencies>\r
\r
Contact\r
\r
- Contact us by emal \<harua-t[ at ]is.naist.jp\>\r
+ Contact us by emal \<tama3[ at ]users.sourceforge.jp\>\r
\r
*{{{http://sourceforge.jp/developer/sendmessage.php?touser=587}Email sending form}}\r
\r
<project name="Stigmata">
<bannerLeft>
- <name>NAIST SE Lab.</name>
- <src>images/logos/selogo.png</src>
- <href>http://se.naist.jp/</href>
- <alt>se.naist.jp</alt>
+ <name>sourceforge.jp</name>
+ <href>http://sourceforge.jp/</href>
+ <alt>sourceforge.jp</alt>
</bannerLeft>
<bannerRight>
<name>Stigmata</name>
<menu name="Links">
<item name="SE Lab., NAIST" href="http://se.naist.jp/" />
+ <item name="Kyoto Sangyo University" href="http://www.kyoto-su.ac.jp/" />
<item name="DonQuixote" href="http://donquixote.cafebabe.jp/" />
</menu>
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import static org.junit.Assert.assertNotNull;\r
-\r
-import org.junit.Before;\r
-import org.junit.Test;\r
-\r
-/**\r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class ServiceListTest{\r
- private BirthmarkEnvironment env;\r
-\r
- @Before\r
- public void setup() throws Exception{\r
- env = Stigmata.getInstance().createEnvironment();\r
- }\r
-\r
- @Test\r
- public void testServiceList(){\r
- assertNotNull(env.getService("cvfv"));\r
- assertNotNull(env.getService("fmc"));\r
- assertNotNull(env.getService("fuc"));\r
- assertNotNull(env.getService("is"));\r
- assertNotNull(env.getService("kgram"));\r
- assertNotNull(env.getService("smc"));\r
- assertNotNull(env.getService("uc"));\r
- assertNotNull(env.getService("cvfv_dp"));\r
- assertNotNull(env.getService("cvfv_ed"));\r
- assertNotNull(env.getService("is_dp"));\r
- assertNotNull(env.getService("is_ed"));\r
- assertNotNull(env.getService("smc_dp"));\r
- assertNotNull(env.getService("smc_ed"));\r
- assertNotNull(env.getService("uc_dp"));\r
- assertNotNull(env.getService("uc_ed"));\r
- assertNotNull(env.getService("uc_seq"));\r
- }\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+import static org.junit.Assert.assertNotNull;
+
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class ServiceListTest{
+ private BirthmarkEnvironment env;
+
+ @Before
+ public void setup() throws Exception{
+ env = Stigmata.getInstance().createEnvironment();
+ }
+
+ @Test
+ public void testServiceList(){
+ assertNotNull(env.getService("cvfv"));
+ assertNotNull(env.getService("fmc"));
+ assertNotNull(env.getService("fuc"));
+ assertNotNull(env.getService("is"));
+ assertNotNull(env.getService("kgram"));
+ assertNotNull(env.getService("smc"));
+ assertNotNull(env.getService("uc"));
+ assertNotNull(env.getService("cvfv_dp"));
+ assertNotNull(env.getService("cvfv_ed"));
+ assertNotNull(env.getService("is_dp"));
+ assertNotNull(env.getService("is_ed"));
+ assertNotNull(env.getService("smc_dp"));
+ assertNotNull(env.getService("smc_ed"));
+ assertNotNull(env.getService("uc_dp"));
+ assertNotNull(env.getService("uc_ed"));
+ assertNotNull(env.getService("uc_seq"));
+ }
+}
-package jp.naist.se.stigmata;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-import org.junit.Assert;\r
-import org.junit.Before;\r
-import org.junit.Test;\r
-\r
-/**\r
- * test case.\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class StigmataTest{\r
- private BirthmarkContext context;\r
- private BirthmarkEnvironment environment;\r
-\r
- @Before\r
- public void prepare(){\r
- Stigmata stigmata = Stigmata.getInstance();\r
- context = stigmata.createContext();\r
- environment = context.getEnvironment();\r
- }\r
-\r
- @Test\r
- public void checkAvailableServices() throws Exception{\r
- Assert.assertNotNull(environment.getService("smc"));\r
- Assert.assertNotNull(environment.getService("cvfv"));\r
- Assert.assertNotNull(environment.getService("is"));\r
- Assert.assertNotNull(environment.getService("uc"));\r
- Assert.assertNotNull(environment.getService("kgram"));\r
- }\r
-\r
- @Test\r
- public void checkSmcBirthmarkService() throws Exception{\r
- BirthmarkSpi service = environment.getService("smc");\r
-\r
- Assert.assertNotNull(service.getComparator());\r
- Assert.assertNotNull(service.getExtractor());\r
- Assert.assertEquals(\r
- "jp.naist.se.stigmata.birthmarks.comparators.PlainBirthmarkComparator",\r
- service.getComparator().getClass().getName()\r
- );\r
- Assert.assertEquals(\r
- "jp.naist.se.stigmata.birthmarks.smc.SequentialMethodCallBirthmarkExtractor",\r
- service.getExtractor().getClass().getName()\r
- );\r
- }\r
-\r
- @Test\r
- public void checkCvfvBirthmarkService() throws Exception{\r
- BirthmarkSpi service = environment.getService("cvfv");\r
-\r
- Assert.assertNotNull(service.getComparator());\r
- Assert.assertNotNull(service.getExtractor());\r
- Assert.assertEquals(\r
- "jp.naist.se.stigmata.birthmarks.comparators.PlainBirthmarkComparator",\r
- service.getComparator().getClass().getName()\r
- );\r
- Assert.assertEquals(\r
- "jp.naist.se.stigmata.birthmarks.cvfv.ConstantValueOfFieldVariableBirthmarkExtractor",\r
- service.getExtractor().getClass().getName()\r
- );\r
- }\r
-\r
- @Test\r
- public void checkIsBirthmarkService() throws Exception{\r
- BirthmarkSpi service = environment.getService("is");\r
-\r
- Assert.assertNotNull(service.getComparator());\r
- Assert.assertNotNull(service.getExtractor());\r
- Assert.assertEquals(\r
- "jp.naist.se.stigmata.birthmarks.comparators.PlainBirthmarkComparator",\r
- service.getComparator().getClass().getName()\r
- );\r
- Assert.assertEquals(\r
- "jp.naist.se.stigmata.birthmarks.is.InheritanceStructureBirthmarkExtractor",\r
- service.getExtractor().getClass().getName()\r
- );\r
- }\r
-\r
- @Test\r
- public void checkUcBirthmarkService() throws Exception{\r
- BirthmarkSpi service = environment.getService("uc");\r
-\r
- Assert.assertNotNull(service.getComparator());\r
- Assert.assertNotNull(service.getExtractor());\r
- Assert.assertEquals(\r
- "jp.naist.se.stigmata.birthmarks.comparators.LogicalAndBirthmarkComparator",\r
- service.getComparator().getClass().getName()\r
- );\r
- Assert.assertEquals(\r
- "jp.naist.se.stigmata.birthmarks.uc.UsedClassesBirthmarkExtractor",\r
- service.getExtractor().getClass().getName()\r
- );\r
- }\r
-\r
- @Test\r
- public void checkKgramBirthmarkService() throws Exception{\r
- BirthmarkSpi service = environment.getService("kgram");\r
-\r
- Assert.assertNotNull(service.getComparator());\r
- Assert.assertNotNull(service.getExtractor());\r
- Assert.assertEquals(\r
- "jp.naist.se.stigmata.birthmarks.comparators.LogicalAndBirthmarkComparator",\r
- service.getComparator().getClass().getName()\r
- );\r
- Assert.assertEquals(\r
- "jp.naist.se.stigmata.birthmarks.kgram.KGramBasedBirthmarkExtractor",\r
- service.getExtractor().getClass().getName()\r
- );\r
- }\r
-}\r
+package jp.sourceforge.stigmata;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * test case.
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class StigmataTest{
+ private BirthmarkContext context;
+ private BirthmarkEnvironment environment;
+
+ @Before
+ public void prepare(){
+ Stigmata stigmata = Stigmata.getInstance();
+ context = stigmata.createContext();
+ environment = context.getEnvironment();
+ }
+
+ @Test
+ public void checkAvailableServices() throws Exception{
+ Assert.assertNotNull(environment.getService("smc"));
+ Assert.assertNotNull(environment.getService("cvfv"));
+ Assert.assertNotNull(environment.getService("is"));
+ Assert.assertNotNull(environment.getService("uc"));
+ Assert.assertNotNull(environment.getService("kgram"));
+ }
+
+ @Test
+ public void checkSmcBirthmarkService() throws Exception{
+ BirthmarkSpi service = environment.getService("smc");
+
+ Assert.assertNotNull(service.getComparator());
+ Assert.assertNotNull(service.getExtractor());
+ Assert.assertEquals(
+ "jp.sourceforge.stigmata.birthmarks.comparators.PlainBirthmarkComparator",
+ service.getComparator().getClass().getName()
+ );
+ Assert.assertEquals(
+ "jp.sourceforge.stigmata.birthmarks.smc.SequentialMethodCallBirthmarkExtractor",
+ service.getExtractor().getClass().getName()
+ );
+ }
+
+ @Test
+ public void checkCvfvBirthmarkService() throws Exception{
+ BirthmarkSpi service = environment.getService("cvfv");
+
+ Assert.assertNotNull(service.getComparator());
+ Assert.assertNotNull(service.getExtractor());
+ Assert.assertEquals(
+ "jp.sourceforge.stigmata.birthmarks.comparators.PlainBirthmarkComparator",
+ service.getComparator().getClass().getName()
+ );
+ Assert.assertEquals(
+ "jp.sourceforge.stigmata.birthmarks.cvfv.ConstantValueOfFieldVariableBirthmarkExtractor",
+ service.getExtractor().getClass().getName()
+ );
+ }
+
+ @Test
+ public void checkIsBirthmarkService() throws Exception{
+ BirthmarkSpi service = environment.getService("is");
+
+ Assert.assertNotNull(service.getComparator());
+ Assert.assertNotNull(service.getExtractor());
+ Assert.assertEquals(
+ "jp.sourceforge.stigmata.birthmarks.comparators.PlainBirthmarkComparator",
+ service.getComparator().getClass().getName()
+ );
+ Assert.assertEquals(
+ "jp.sourceforge.stigmata.birthmarks.is.InheritanceStructureBirthmarkExtractor",
+ service.getExtractor().getClass().getName()
+ );
+ }
+
+ @Test
+ public void checkUcBirthmarkService() throws Exception{
+ BirthmarkSpi service = environment.getService("uc");
+
+ Assert.assertNotNull(service.getComparator());
+ Assert.assertNotNull(service.getExtractor());
+ Assert.assertEquals(
+ "jp.sourceforge.stigmata.birthmarks.comparators.LogicalAndBirthmarkComparator",
+ service.getComparator().getClass().getName()
+ );
+ Assert.assertEquals(
+ "jp.sourceforge.stigmata.birthmarks.uc.UsedClassesBirthmarkExtractor",
+ service.getExtractor().getClass().getName()
+ );
+ }
+
+ @Test
+ public void checkKgramBirthmarkService() throws Exception{
+ BirthmarkSpi service = environment.getService("kgram");
+
+ Assert.assertNotNull(service.getComparator());
+ Assert.assertNotNull(service.getExtractor());
+ Assert.assertEquals(
+ "jp.sourceforge.stigmata.birthmarks.comparators.LogicalAndBirthmarkComparator",
+ service.getComparator().getClass().getName()
+ );
+ Assert.assertEquals(
+ "jp.sourceforge.stigmata.birthmarks.kgram.KGramBasedBirthmarkExtractor",
+ service.getExtractor().getClass().getName()
+ );
+ }
+}
-package jp.naist.se.stigmata.birthmarks;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkEngine;\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-import jp.naist.se.stigmata.ExtractionTarget;\r
-import jp.naist.se.stigmata.Stigmata;\r
-\r
-import org.junit.Assert;\r
-import org.junit.Before;\r
-import org.junit.Test;\r
-\r
-/**\r
- * \r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public class BirthmarkCompareTest{\r
- private BirthmarkContext context;\r
- private BirthmarkSet[] birthmarks;\r
- private BirthmarkEngine engine;\r
-\r
- @Before\r
- public void readBirthmarks() throws Exception{\r
- context = Stigmata.getInstance().createContext();\r
- context.setBirthmarkTypes(new String[] { "cvfv", "smc", "uc", "is", "kgram", });\r
- engine = new BirthmarkEngine(context.getEnvironment());\r
-\r
- ExtractionResultSet ers = engine.extract(\r
- new String[] {\r
- "target/classes/jp/naist/se/stigmata/Stigmata.class",\r
- "target/classes/jp/naist/se/stigmata/Main.class",\r
- "target/classes/jp/naist/se/stigmata/BirthmarkEnvironment.class",\r
- }, context\r
- );\r
- birthmarks = ers.getBirthmarkSets(ExtractionTarget.TARGET_BOTH);\r
- }\r
-\r
- @Test\r
- public void equalsTest() throws Exception{\r
- Assert.assertEquals(3, birthmarks.length);\r
- BirthmarkEngine engine = Stigmata.getInstance().createEngine();\r
-\r
- Assert.assertEquals(1d, engine.compareDetails(birthmarks[0], birthmarks[0], context).calculateSimilarity(), 1E-6);\r
- Assert.assertEquals(1d, engine.compareDetails(birthmarks[1], birthmarks[1], context).calculateSimilarity(), 1E-6);\r
- Assert.assertEquals(1d, engine.compareDetails(birthmarks[2], birthmarks[2], context).calculateSimilarity(), 1E-6);\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkEngine;
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.ExtractionTarget;
+import jp.sourceforge.stigmata.Stigmata;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$ $Date$
+ */
+public class BirthmarkCompareTest{
+ private BirthmarkContext context;
+ private BirthmarkSet[] birthmarks;
+ private BirthmarkEngine engine;
+
+ @Before
+ public void readBirthmarks() throws Exception{
+ context = Stigmata.getInstance().createContext();
+ context.setBirthmarkTypes(new String[] { "cvfv", "smc", "uc", "is", "kgram", });
+ engine = new BirthmarkEngine(context.getEnvironment());
+
+ ExtractionResultSet ers = engine.extract(
+ new String[] {
+ "target/classes/jp/sourceforge/stigmata/Stigmata.class",
+ "target/classes/jp/sourceforge/stigmata/Main.class",
+ "target/classes/jp/sourceforge/stigmata/BirthmarkEnvironment.class",
+ }, context
+ );
+ birthmarks = ers.getBirthmarkSets(ExtractionTarget.TARGET_BOTH);
+ }
+
+ @Test
+ public void equalsTest() throws Exception{
+ Assert.assertEquals(3, birthmarks.length);
+ BirthmarkEngine engine = Stigmata.getInstance().createEngine();
+
+ Assert.assertEquals(1d, engine.compareDetails(birthmarks[0], birthmarks[0], context).calculateSimilarity(), 1E-6);
+ Assert.assertEquals(1d, engine.compareDetails(birthmarks[1], birthmarks[1], context).calculateSimilarity(), 1E-6);
+ Assert.assertEquals(1d, engine.compareDetails(birthmarks[2], birthmarks[2], context).calculateSimilarity(), 1E-6);
+ }
+}
-package jp.naist.se.stigmata.birthmarks.cvfv;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.Birthmark;\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-import jp.naist.se.stigmata.Stigmata;\r
-\r
-import org.junit.Assert;\r
-import org.junit.Before;\r
-import org.junit.Test;\r
-\r
-/**\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class CVFVBirthmarkExtractorTest{\r
- private Stigmata stigmata;\r
- private BirthmarkContext context;\r
-\r
- @Before\r
- public void setup(){\r
- stigmata = Stigmata.getInstance();\r
- context = stigmata.createContext();\r
- context.addBirthmarkType("cvfv");\r
- }\r
-\r
- @Test\r
- public void checkCVFVBirthmark() throws Exception{\r
- ExtractionResultSet ers = stigmata.createEngine().extract(\r
- new String[] { "target/classes/jp/naist/se/stigmata/Stigmata.class", },\r
- context\r
- );\r
- BirthmarkSet[] array = ers.getBirthmarkSets();\r
-\r
- Assert.assertEquals(1, array.length);\r
- Assert.assertNotNull(array[0].getBirthmark("cvfv"));\r
-\r
- Birthmark birthmark = array[0].getBirthmark("cvfv");\r
- Assert.assertEquals("cvfv", birthmark.getType());\r
- Assert.assertEquals(3, birthmark.getElementCount());\r
-\r
- BirthmarkElement[] elements = birthmark.getElements();\r
- Assert.assertEquals("jp.naist.se.stigmata.birthmarks.cvfv.TypeAndValueBirthmarkElement",\r
- elements[0].getClass().getName());\r
- Assert.assertEquals("jp.naist.se.stigmata.birthmarks.cvfv.TypeAndValueBirthmarkElement",\r
- elements[1].getClass().getName());\r
- Assert.assertEquals("jp.naist.se.stigmata.birthmarks.cvfv.TypeAndValueBirthmarkElement",\r
- elements[2].getClass().getName());\r
-\r
- Assert.assertEquals("Ljp/naist/se/stigmata/Stigmata;",\r
- ((TypeAndValueBirthmarkElement)elements[0]).getSignature());\r
- Assert.assertNull(((TypeAndValueBirthmarkElement)elements[0]).getValue());\r
-\r
- Assert.assertEquals("Ljp/naist/se/stigmata/BirthmarkEnvironment;",\r
- ((TypeAndValueBirthmarkElement)elements[1]).getSignature());\r
- Assert.assertNull(((TypeAndValueBirthmarkElement)elements[1]).getValue());\r
-\r
- Assert.assertEquals("Ljava/util/List;",\r
- ((TypeAndValueBirthmarkElement)elements[2]).getSignature());\r
- Assert.assertNull(((TypeAndValueBirthmarkElement)elements[2]).getValue());\r
- }\r
-\r
- @Test\r
- public void checkCVFVBirthmark2() throws Exception{\r
- ExtractionResultSet ers = stigmata.createEngine().extract(\r
- new String[] { "target/classes/jp/naist/se/stigmata/result/RoundRobinComparisonResultSet.class", },\r
- context\r
- );\r
-\r
- BirthmarkSet[] array = ers.getBirthmarkSets();\r
-\r
- Assert.assertEquals(array.length, 1);\r
- Assert.assertNotNull(array[0].getBirthmark("cvfv"));\r
-\r
- Birthmark birthmark = array[0].getBirthmark("cvfv");\r
- Assert.assertEquals(birthmark.getType(), "cvfv");\r
- Assert.assertEquals(3, birthmark.getElementCount());\r
-\r
- BirthmarkElement[] elements = birthmark.getElements();\r
- Assert.assertEquals("jp.naist.se.stigmata.birthmarks.cvfv.TypeAndValueBirthmarkElement",\r
- elements[0].getClass().getName());\r
- Assert.assertEquals("jp.naist.se.stigmata.birthmarks.cvfv.TypeAndValueBirthmarkElement",\r
- elements[1].getClass().getName());\r
- Assert.assertEquals("jp.naist.se.stigmata.birthmarks.cvfv.TypeAndValueBirthmarkElement",\r
- elements[2].getClass().getName());\r
-\r
- Assert.assertEquals("I", ((TypeAndValueBirthmarkElement)elements[0]).getSignature());\r
- Assert.assertEquals(-1, ((TypeAndValueBirthmarkElement)elements[0]).getValue());\r
-\r
- Assert.assertEquals("Z", ((TypeAndValueBirthmarkElement)elements[1]).getSignature());\r
- Assert.assertEquals(null, ((TypeAndValueBirthmarkElement)elements[1]).getValue());\r
-\r
- Assert.assertEquals("Z", ((TypeAndValueBirthmarkElement)elements[2]).getSignature());\r
- Assert.assertEquals(0, ((TypeAndValueBirthmarkElement)elements[2]).getValue());\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.cvfv;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.Stigmata;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class CVFVBirthmarkExtractorTest{
+ private Stigmata stigmata;
+ private BirthmarkContext context;
+
+ @Before
+ public void setup(){
+ stigmata = Stigmata.getInstance();
+ context = stigmata.createContext();
+ context.addBirthmarkType("cvfv");
+ }
+
+ @Test
+ public void checkCVFVBirthmark() throws Exception{
+ ExtractionResultSet ers = stigmata.createEngine().extract(
+ new String[] { "target/classes/jp/sourceforge/stigmata/Stigmata.class", },
+ context
+ );
+ BirthmarkSet[] array = ers.getBirthmarkSets();
+
+ Assert.assertEquals(1, array.length);
+ Assert.assertNotNull(array[0].getBirthmark("cvfv"));
+
+ Birthmark birthmark = array[0].getBirthmark("cvfv");
+ Assert.assertEquals("cvfv", birthmark.getType());
+ Assert.assertEquals(3, birthmark.getElementCount());
+
+ BirthmarkElement[] elements = birthmark.getElements();
+ Assert.assertEquals("jp.sourceforge.stigmata.birthmarks.cvfv.TypeAndValueBirthmarkElement",
+ elements[0].getClass().getName());
+ Assert.assertEquals("jp.sourceforge.stigmata.birthmarks.cvfv.TypeAndValueBirthmarkElement",
+ elements[1].getClass().getName());
+ Assert.assertEquals("jp.sourceforge.stigmata.birthmarks.cvfv.TypeAndValueBirthmarkElement",
+ elements[2].getClass().getName());
+
+ Assert.assertEquals("Ljp/sourceforge/stigmata/Stigmata;",
+ ((TypeAndValueBirthmarkElement)elements[0]).getSignature());
+ Assert.assertNull(((TypeAndValueBirthmarkElement)elements[0]).getValue());
+
+ Assert.assertEquals("Ljp/sourceforge/stigmata/BirthmarkEnvironment;",
+ ((TypeAndValueBirthmarkElement)elements[1]).getSignature());
+ Assert.assertNull(((TypeAndValueBirthmarkElement)elements[1]).getValue());
+
+ Assert.assertEquals("Ljava/util/List;",
+ ((TypeAndValueBirthmarkElement)elements[2]).getSignature());
+ Assert.assertNull(((TypeAndValueBirthmarkElement)elements[2]).getValue());
+ }
+
+ @Test
+ public void checkCVFVBirthmark2() throws Exception{
+ ExtractionResultSet ers = stigmata.createEngine().extract(
+ new String[] { "target/classes/jp/sourceforge/stigmata/result/RoundRobinComparisonResultSet.class", },
+ context
+ );
+
+ BirthmarkSet[] array = ers.getBirthmarkSets();
+
+ Assert.assertEquals(array.length, 1);
+ Assert.assertNotNull(array[0].getBirthmark("cvfv"));
+
+ Birthmark birthmark = array[0].getBirthmark("cvfv");
+ Assert.assertEquals(birthmark.getType(), "cvfv");
+ Assert.assertEquals(3, birthmark.getElementCount());
+
+ BirthmarkElement[] elements = birthmark.getElements();
+ Assert.assertEquals("jp.sourceforge.stigmata.birthmarks.cvfv.TypeAndValueBirthmarkElement",
+ elements[0].getClass().getName());
+ Assert.assertEquals("jp.sourceforge.stigmata.birthmarks.cvfv.TypeAndValueBirthmarkElement",
+ elements[1].getClass().getName());
+ Assert.assertEquals("jp.sourceforge.stigmata.birthmarks.cvfv.TypeAndValueBirthmarkElement",
+ elements[2].getClass().getName());
+
+ Assert.assertEquals("I", ((TypeAndValueBirthmarkElement)elements[0]).getSignature());
+ Assert.assertEquals(-1, ((TypeAndValueBirthmarkElement)elements[0]).getValue());
+
+ Assert.assertEquals("Z", ((TypeAndValueBirthmarkElement)elements[1]).getSignature());
+ Assert.assertEquals(null, ((TypeAndValueBirthmarkElement)elements[1]).getValue());
+
+ Assert.assertEquals("Z", ((TypeAndValueBirthmarkElement)elements[2]).getSignature());
+ Assert.assertEquals(0, ((TypeAndValueBirthmarkElement)elements[2]).getValue());
+ }
+}
-package jp.naist.se.stigmata.birthmarks.is;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.Birthmark;\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-import jp.naist.se.stigmata.BirthmarkEngine;\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-import jp.naist.se.stigmata.Stigmata;\r
-\r
-import org.junit.Assert;\r
-import org.junit.Before;\r
-import org.junit.Test;\r
-\r
-/**\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class ISBirthmarkExtractorTest{\r
- private BirthmarkEngine engine;\r
- private BirthmarkContext context;\r
-\r
- @Before\r
- public void setup(){\r
- engine = Stigmata.getInstance().createEngine();\r
- context = Stigmata.getInstance().createContext();\r
- context.addBirthmarkType("is");\r
- }\r
-\r
- @Test\r
- public void checkISBirthmark() throws Exception{\r
- ExtractionResultSet ers = engine.extract(\r
- new String[] { "target/classes/jp/naist/se/stigmata/Stigmata.class", },\r
- context\r
- );\r
-\r
- BirthmarkSet[] array = ers.getBirthmarkSets();\r
-\r
- Assert.assertEquals(1, array.length);\r
- Assert.assertNotNull(array[0].getBirthmark("is"));\r
-\r
- Birthmark birthmark = array[0].getBirthmark("is");\r
- Assert.assertEquals("is", birthmark.getType());\r
- Assert.assertEquals(2, birthmark.getElementCount());\r
-\r
- BirthmarkElement[] elements = birthmark.getElements();\r
- Assert.assertNull(elements[0].getValue());\r
- Assert.assertEquals("java.lang.Object", elements[1].getValue());\r
- }\r
-\r
- @Test\r
- public void checkISBirthmark2() throws Exception{\r
- ExtractionResultSet ers = engine.extract(\r
- new String[] { "target/classes/jp/naist/se/stigmata/result/RoundRobinComparisonResultSet.class", },\r
- context\r
- );\r
- BirthmarkSet[] array = ers.getBirthmarkSets();\r
-\r
- Assert.assertEquals(1, array.length);\r
- Assert.assertNotNull(array[0].getBirthmark("is"));\r
-\r
- Birthmark birthmark = array[0].getBirthmark("is");\r
- Assert.assertEquals("is", birthmark.getType());\r
- Assert.assertEquals(3, birthmark.getElementCount());\r
-\r
- BirthmarkElement[] elements = birthmark.getElements();\r
- Assert.assertNull(elements[0].getValue());\r
- Assert.assertNull(elements[1].getValue());\r
- Assert.assertEquals("java.lang.Object", elements[2].getValue());\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.is;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.BirthmarkEngine;
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.Stigmata;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class ISBirthmarkExtractorTest{
+ private BirthmarkEngine engine;
+ private BirthmarkContext context;
+
+ @Before
+ public void setup(){
+ engine = Stigmata.getInstance().createEngine();
+ context = Stigmata.getInstance().createContext();
+ context.addBirthmarkType("is");
+ }
+
+ @Test
+ public void checkISBirthmark() throws Exception{
+ ExtractionResultSet ers = engine.extract(
+ new String[] { "target/classes/jp/sourceforge/stigmata/Stigmata.class", },
+ context
+ );
+
+ BirthmarkSet[] array = ers.getBirthmarkSets();
+
+ Assert.assertEquals(1, array.length);
+ Assert.assertNotNull(array[0].getBirthmark("is"));
+
+ Birthmark birthmark = array[0].getBirthmark("is");
+ Assert.assertEquals("is", birthmark.getType());
+ Assert.assertEquals(2, birthmark.getElementCount());
+
+ BirthmarkElement[] elements = birthmark.getElements();
+ Assert.assertNull(elements[0].getValue());
+ Assert.assertEquals("java.lang.Object", elements[1].getValue());
+ }
+
+ @Test
+ public void checkISBirthmark2() throws Exception{
+ ExtractionResultSet ers = engine.extract(
+ new String[] { "target/classes/jp/sourceforge/stigmata/result/RoundRobinComparisonResultSet.class", },
+ context
+ );
+ BirthmarkSet[] array = ers.getBirthmarkSets();
+
+ Assert.assertEquals(1, array.length);
+ Assert.assertNotNull(array[0].getBirthmark("is"));
+
+ Birthmark birthmark = array[0].getBirthmark("is");
+ Assert.assertEquals("is", birthmark.getType());
+ Assert.assertEquals(3, birthmark.getElementCount());
+
+ BirthmarkElement[] elements = birthmark.getElements();
+ Assert.assertNull(elements[0].getValue());
+ Assert.assertNull(elements[1].getValue());
+ Assert.assertEquals("java.lang.Object", elements[2].getValue());
+ }
+}
-package jp.naist.se.stigmata.birthmarks.kgram;
+package jp.sourceforge.stigmata.birthmarks.kgram;
/*
* $Id$
-package jp.naist.se.stigmata.birthmarks.smc;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.Birthmark;\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-import jp.naist.se.stigmata.Stigmata;\r
-\r
-import org.junit.Assert;\r
-import org.junit.Before;\r
-import org.junit.Test;\r
-\r
-/**\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class SmcBirthmarkExtractorTest{\r
- private Stigmata stigmata;\r
- private BirthmarkContext context;\r
-\r
- @Before\r
- public void setup(){\r
- stigmata = Stigmata.getInstance();\r
- context = stigmata.createContext();\r
- context.addBirthmarkType("smc");\r
- }\r
-\r
- @Test\r
- public void checkSmcBirthmark() throws Exception{\r
- ExtractionResultSet ers = stigmata.createEngine().extract(\r
- new String[] { "target/classes/jp/naist/se/stigmata/Stigmata.class", },\r
- context\r
- );\r
- BirthmarkSet[] array = ers.getBirthmarkSets();\r
-\r
- Assert.assertEquals(1, array.length);\r
- Assert.assertNotNull(array[0].getBirthmark("smc"));\r
-\r
- Birthmark birthmark = array[0].getBirthmark("smc");\r
- Assert.assertEquals("smc", birthmark.getType());\r
-\r
- BirthmarkElement[] elements = birthmark.getElements();\r
- for(int i = 0; i < elements.length; i++){\r
- Assert.assertEquals(\r
- "jp.naist.se.stigmata.birthmarks.smc.MethodCallBirthmarkElement",\r
- elements[i].getClass().getName()\r
- );\r
- }\r
- /*\r
- Assert.assertEquals(76, birthmark.getElementCount());\r
- int index = 0;\r
- Assert.assertEquals("java.io.FileInputStream#<init>", elements[index++].getValue());\r
- Assert.assertEquals("java.io.File#<init>", elements[index++].getValue());\r
- Assert.assertEquals("java.io.File#exists", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.System#getProperty", elements[index++].getValue());\r
- Assert.assertEquals("java.io.File#<init>", elements[index++].getValue());\r
- Assert.assertEquals("java.io.File#exists", elements[index++].getValue());\r
- Assert.assertEquals("java.io.FileInputStream#<init>", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.Object#getClass", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.Class#getResourceAsStream", elements[index++].getValue());\r
- Assert.assertEquals("java.util.ArrayList#<init>", elements[index++].getValue());\r
- Assert.assertEquals("java.util.ArrayList#<init>", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.String#endsWith", elements[index++].getValue());\r
- Assert.assertEquals("java.util.List#add", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.String#endsWith", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.String#endsWith", elements[index++].getValue());\r
- Assert.assertEquals("java.util.List#add", elements[index++].getValue());\r
- Assert.assertEquals("java.io.File#<init>", elements[index++].getValue());\r
- Assert.assertEquals("java.io.File#toURI", elements[index++].getValue());\r
- Assert.assertEquals("java.net.URI#toURL", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.String#endsWith", elements[index++].getValue());\r
- Assert.assertEquals("java.util.List#add", elements[index++].getValue());\r
- Assert.assertEquals("java.util.List#iterator", elements[index++].getValue());\r
- Assert.assertEquals("java.util.Iterator#hasNext", elements[index++].getValue());\r
- Assert.assertEquals("java.util.Iterator#next", elements[index++].getValue());\r
- Assert.assertEquals("java.util.Iterator#hasNext", elements[index++].getValue());\r
- Assert.assertEquals("java.util.Iterator#next", elements[index++].getValue());\r
- Assert.assertEquals("java.net.URL#openStream", elements[index++].getValue());\r
- Assert.assertEquals("java.util.List#add", elements[index++].getValue());\r
- Assert.assertEquals("java.util.List#size", elements[index++].getValue());\r
- Assert.assertEquals("java.util.List#toArray", elements[index++].getValue());\r
- Assert.assertEquals("java.util.ArrayList#<init>", elements[index++].getValue());\r
- Assert.assertEquals("java.util.List#add", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.Object#getClass", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.Class#getName", elements[index++].getValue());\r
- Assert.assertEquals("java.util.logging.Logger#getLogger", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.StringBuilder#<init>", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.StringBuilder#append", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.StringBuilder#append", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.StringBuilder#toString", elements[index++].getValue());\r
- Assert.assertEquals("java.util.logging.Logger#warning", elements[index++].getValue());\r
- Assert.assertEquals("java.util.List#size", elements[index++].getValue());\r
- Assert.assertEquals("java.util.List#toArray", elements[index++].getValue());\r
- Assert.assertEquals("java.util.ArrayList#<init>", elements[index++].getValue());\r
- Assert.assertEquals("java.util.Iterator#hasNext", elements[index++].getValue());\r
- Assert.assertEquals("java.util.Iterator#next", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.Double#valueOf", elements[index++].getValue());\r
- Assert.assertEquals("java.util.List#add", elements[index++].getValue());\r
- Assert.assertEquals("java.util.List#iterator", elements[index++].getValue());\r
- Assert.assertEquals("java.util.Iterator#hasNext", elements[index++].getValue());\r
- Assert.assertEquals("java.util.Iterator#next", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.Double#doubleValue", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.Double#doubleValue", elements[index++].getValue());\r
- Assert.assertEquals("org.apache.commons.beanutils.BeanUtils#describe",\r
- elements[index++].getValue());\r
- Assert.assertEquals("java.util.Map#remove", elements[index++].getValue());\r
- Assert.assertEquals("java.util.Map#remove", elements[index++].getValue());\r
- Assert.assertEquals("java.util.Map#keySet", elements[index++].getValue());\r
- Assert.assertEquals("java.util.Set#iterator", elements[index++].getValue());\r
- Assert.assertEquals("java.util.Iterator#hasNext", elements[index++].getValue());\r
- Assert.assertEquals("java.util.Iterator#next", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.StringBuilder#<init>", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.StringBuilder#append", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.StringBuilder#append", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.StringBuilder#append", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.String#valueOf", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.StringBuilder#append", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.StringBuilder#toString", elements[index++].getValue());\r
- Assert.assertEquals("org.apache.commons.beanutils.BeanUtils#setProperty",\r
- elements[index++].getValue());\r
- Assert.assertEquals("java.io.ByteArrayInputStream#<init>", elements[index++].getValue());\r
- Assert.assertEquals("java.io.ByteArrayOutputStream#<init>", elements[index++].getValue());\r
- Assert.assertEquals("java.io.InputStream#read", elements[index++].getValue());\r
- Assert.assertEquals("java.io.ByteArrayOutputStream#write", elements[index++].getValue());\r
- Assert.assertEquals("java.io.ByteArrayOutputStream#toByteArray",\r
- elements[index++].getValue());\r
- Assert.assertEquals("java.io.ByteArrayOutputStream#close", elements[index++].getValue());\r
- Assert.assertEquals("javax.imageio.spi.ServiceRegistry#lookupProviders",\r
- elements[index++].getValue());\r
- Assert.assertEquals("java.util.Iterator#hasNext", elements[index++].getValue());\r
- Assert.assertEquals("java.util.Iterator#next", elements[index++].getValue());\r
- */\r
- }\r
-\r
- @Test\r
- public void checkSmcBirthmark2() throws Exception{\r
- ExtractionResultSet ers = stigmata.createEngine().extract(\r
- new String[] { "target/classes/jp/naist/se/stigmata/result/RoundRobinComparisonResultSet.class", },\r
- context\r
- );\r
- BirthmarkSet[] array = ers.getBirthmarkSets();\r
-\r
- Assert.assertEquals(array.length, 1);\r
- Assert.assertNotNull(array[0].getBirthmark("smc"));\r
-\r
- Birthmark birthmark = array[0].getBirthmark("smc");\r
- Assert.assertEquals("smc", birthmark.getType());\r
- Assert.assertEquals(18, birthmark.getElementCount());\r
-\r
- BirthmarkElement[] elements = birthmark.getElements();\r
- for(int i = 0; i < elements.length; i++){\r
- Assert.assertEquals(\r
- "jp.naist.se.stigmata.birthmarks.smc.MethodCallBirthmarkElement",\r
- elements[i].getClass().getName()\r
- );\r
- }\r
- /*\r
- int index = 0;\r
- // <init>(ExtractionResult, BirthmarkEnvironment, boolean)\r
- Assert.assertEquals("java.lang.Object#<init>", elements[index++].toString());\r
-\r
- // getComparisonSources\r
- Assert.assertEquals("java.util.ArrayArrays#<init>", elements[index++].toString());\r
- Assert.assertEquals("java.util.Arrays#asList", elements[index++].toString());\r
-\r
- // setCompareSamePair\r
- Assert.assertEquals("java.util.List#size", elements[index++].toString());\r
- Assert.assertEquals("java.util.List#size", elements[index++].toString());\r
- Assert.assertEquals("java.util.List#size", elements[index++].toString());\r
- Assert.assertEquals("java.util.List#size", elements[index++].toString());\r
-\r
- // getComparisonSources\r
- Assert.assertEquals("java.util.HashMap#<init>", elements[index++].toString());\r
- Assert.assertEquals("java.util.List#iterator", elements[index++].toString());\r
- Assert.assertEquals("java.util.Iterator#hasNext", elements[index++].toString());\r
- Assert.assertEquals("java.util.Iterator#next", elements[index++].toString());\r
- Assert.assertEquals("java.util.Map#put", elements[index++].toString());\r
- Assert.assertEquals("java.util.List#iterator", elements[index++].toString());\r
- Assert.assertEquals("java.util.Iterator#hasNext", elements[index++].toString());\r
- Assert.assertEquals("java.util.Iterator#next", elements[index++].toString());\r
- Assert.assertEquals("java.util.Map#put", elements[index++].toString());\r
- Assert.assertEquals("java.util.Map#size", elements[index++].toString());\r
- Assert.assertEquals("java.util.Map#entrySet", elements[index++].toString());\r
- Assert.assertEquals("java.util.Set#iterator", elements[index++].toString());\r
- Assert.assertEquals("java.util.Iterator#hasNext", elements[index++].toString());\r
- Assert.assertEquals("java.util.Iterator#next", elements[index++].toString());\r
- Assert.assertEquals("java.util.Map$Entry#getValue", elements[index++].toString());\r
- */\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.smc;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.Stigmata;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class SmcBirthmarkExtractorTest{
+ private Stigmata stigmata;
+ private BirthmarkContext context;
+
+ @Before
+ public void setup(){
+ stigmata = Stigmata.getInstance();
+ context = stigmata.createContext();
+ context.addBirthmarkType("smc");
+ }
+
+ @Test
+ public void checkSmcBirthmark() throws Exception{
+ ExtractionResultSet ers = stigmata.createEngine().extract(
+ new String[] { "target/classes/jp/sourceforge/stigmata/Stigmata.class", },
+ context
+ );
+ BirthmarkSet[] array = ers.getBirthmarkSets();
+
+ Assert.assertEquals(1, array.length);
+ Assert.assertNotNull(array[0].getBirthmark("smc"));
+
+ Birthmark birthmark = array[0].getBirthmark("smc");
+ Assert.assertEquals("smc", birthmark.getType());
+
+ BirthmarkElement[] elements = birthmark.getElements();
+ for(int i = 0; i < elements.length; i++){
+ Assert.assertEquals(
+ "jp.sourceforge.stigmata.birthmarks.smc.MethodCallBirthmarkElement",
+ elements[i].getClass().getName()
+ );
+ }
+ /*
+ Assert.assertEquals(76, birthmark.getElementCount());
+ int index = 0;
+ Assert.assertEquals("java.io.FileInputStream#<init>", elements[index++].getValue());
+ Assert.assertEquals("java.io.File#<init>", elements[index++].getValue());
+ Assert.assertEquals("java.io.File#exists", elements[index++].getValue());
+ Assert.assertEquals("java.lang.System#getProperty", elements[index++].getValue());
+ Assert.assertEquals("java.io.File#<init>", elements[index++].getValue());
+ Assert.assertEquals("java.io.File#exists", elements[index++].getValue());
+ Assert.assertEquals("java.io.FileInputStream#<init>", elements[index++].getValue());
+ Assert.assertEquals("java.lang.Object#getClass", elements[index++].getValue());
+ Assert.assertEquals("java.lang.Class#getResourceAsStream", elements[index++].getValue());
+ Assert.assertEquals("java.util.ArrayList#<init>", elements[index++].getValue());
+ Assert.assertEquals("java.util.ArrayList#<init>", elements[index++].getValue());
+ Assert.assertEquals("java.lang.String#endsWith", elements[index++].getValue());
+ Assert.assertEquals("java.util.List#add", elements[index++].getValue());
+ Assert.assertEquals("java.lang.String#endsWith", elements[index++].getValue());
+ Assert.assertEquals("java.lang.String#endsWith", elements[index++].getValue());
+ Assert.assertEquals("java.util.List#add", elements[index++].getValue());
+ Assert.assertEquals("java.io.File#<init>", elements[index++].getValue());
+ Assert.assertEquals("java.io.File#toURI", elements[index++].getValue());
+ Assert.assertEquals("java.net.URI#toURL", elements[index++].getValue());
+ Assert.assertEquals("java.lang.String#endsWith", elements[index++].getValue());
+ Assert.assertEquals("java.util.List#add", elements[index++].getValue());
+ Assert.assertEquals("java.util.List#iterator", elements[index++].getValue());
+ Assert.assertEquals("java.util.Iterator#hasNext", elements[index++].getValue());
+ Assert.assertEquals("java.util.Iterator#next", elements[index++].getValue());
+ Assert.assertEquals("java.util.Iterator#hasNext", elements[index++].getValue());
+ Assert.assertEquals("java.util.Iterator#next", elements[index++].getValue());
+ Assert.assertEquals("java.net.URL#openStream", elements[index++].getValue());
+ Assert.assertEquals("java.util.List#add", elements[index++].getValue());
+ Assert.assertEquals("java.util.List#size", elements[index++].getValue());
+ Assert.assertEquals("java.util.List#toArray", elements[index++].getValue());
+ Assert.assertEquals("java.util.ArrayList#<init>", elements[index++].getValue());
+ Assert.assertEquals("java.util.List#add", elements[index++].getValue());
+ Assert.assertEquals("java.lang.Object#getClass", elements[index++].getValue());
+ Assert.assertEquals("java.lang.Class#getName", elements[index++].getValue());
+ Assert.assertEquals("java.util.logging.Logger#getLogger", elements[index++].getValue());
+ Assert.assertEquals("java.lang.StringBuilder#<init>", elements[index++].getValue());
+ Assert.assertEquals("java.lang.StringBuilder#append", elements[index++].getValue());
+ Assert.assertEquals("java.lang.StringBuilder#append", elements[index++].getValue());
+ Assert.assertEquals("java.lang.StringBuilder#toString", elements[index++].getValue());
+ Assert.assertEquals("java.util.logging.Logger#warning", elements[index++].getValue());
+ Assert.assertEquals("java.util.List#size", elements[index++].getValue());
+ Assert.assertEquals("java.util.List#toArray", elements[index++].getValue());
+ Assert.assertEquals("java.util.ArrayList#<init>", elements[index++].getValue());
+ Assert.assertEquals("java.util.Iterator#hasNext", elements[index++].getValue());
+ Assert.assertEquals("java.util.Iterator#next", elements[index++].getValue());
+ Assert.assertEquals("java.lang.Double#valueOf", elements[index++].getValue());
+ Assert.assertEquals("java.util.List#add", elements[index++].getValue());
+ Assert.assertEquals("java.util.List#iterator", elements[index++].getValue());
+ Assert.assertEquals("java.util.Iterator#hasNext", elements[index++].getValue());
+ Assert.assertEquals("java.util.Iterator#next", elements[index++].getValue());
+ Assert.assertEquals("java.lang.Double#doubleValue", elements[index++].getValue());
+ Assert.assertEquals("java.lang.Double#doubleValue", elements[index++].getValue());
+ Assert.assertEquals("org.apache.commons.beanutils.BeanUtils#describe",
+ elements[index++].getValue());
+ Assert.assertEquals("java.util.Map#remove", elements[index++].getValue());
+ Assert.assertEquals("java.util.Map#remove", elements[index++].getValue());
+ Assert.assertEquals("java.util.Map#keySet", elements[index++].getValue());
+ Assert.assertEquals("java.util.Set#iterator", elements[index++].getValue());
+ Assert.assertEquals("java.util.Iterator#hasNext", elements[index++].getValue());
+ Assert.assertEquals("java.util.Iterator#next", elements[index++].getValue());
+ Assert.assertEquals("java.lang.StringBuilder#<init>", elements[index++].getValue());
+ Assert.assertEquals("java.lang.StringBuilder#append", elements[index++].getValue());
+ Assert.assertEquals("java.lang.StringBuilder#append", elements[index++].getValue());
+ Assert.assertEquals("java.lang.StringBuilder#append", elements[index++].getValue());
+ Assert.assertEquals("java.lang.String#valueOf", elements[index++].getValue());
+ Assert.assertEquals("java.lang.StringBuilder#append", elements[index++].getValue());
+ Assert.assertEquals("java.lang.StringBuilder#toString", elements[index++].getValue());
+ Assert.assertEquals("org.apache.commons.beanutils.BeanUtils#setProperty",
+ elements[index++].getValue());
+ Assert.assertEquals("java.io.ByteArrayInputStream#<init>", elements[index++].getValue());
+ Assert.assertEquals("java.io.ByteArrayOutputStream#<init>", elements[index++].getValue());
+ Assert.assertEquals("java.io.InputStream#read", elements[index++].getValue());
+ Assert.assertEquals("java.io.ByteArrayOutputStream#write", elements[index++].getValue());
+ Assert.assertEquals("java.io.ByteArrayOutputStream#toByteArray",
+ elements[index++].getValue());
+ Assert.assertEquals("java.io.ByteArrayOutputStream#close", elements[index++].getValue());
+ Assert.assertEquals("javax.imageio.spi.ServiceRegistry#lookupProviders",
+ elements[index++].getValue());
+ Assert.assertEquals("java.util.Iterator#hasNext", elements[index++].getValue());
+ Assert.assertEquals("java.util.Iterator#next", elements[index++].getValue());
+ */
+ }
+
+ @Test
+ public void checkSmcBirthmark2() throws Exception{
+ ExtractionResultSet ers = stigmata.createEngine().extract(
+ new String[] { "target/classes/jp/sourceforge/stigmata/result/RoundRobinComparisonResultSet.class", },
+ context
+ );
+ BirthmarkSet[] array = ers.getBirthmarkSets();
+
+ Assert.assertEquals(array.length, 1);
+ Assert.assertNotNull(array[0].getBirthmark("smc"));
+
+ Birthmark birthmark = array[0].getBirthmark("smc");
+ Assert.assertEquals("smc", birthmark.getType());
+ Assert.assertEquals(18, birthmark.getElementCount());
+
+ BirthmarkElement[] elements = birthmark.getElements();
+ for(int i = 0; i < elements.length; i++){
+ Assert.assertEquals(
+ "jp.sourceforge.stigmata.birthmarks.smc.MethodCallBirthmarkElement",
+ elements[i].getClass().getName()
+ );
+ }
+ /*
+ int index = 0;
+ // <init>(ExtractionResult, BirthmarkEnvironment, boolean)
+ Assert.assertEquals("java.lang.Object#<init>", elements[index++].toString());
+
+ // getComparisonSources
+ Assert.assertEquals("java.util.ArrayArrays#<init>", elements[index++].toString());
+ Assert.assertEquals("java.util.Arrays#asList", elements[index++].toString());
+
+ // setCompareSamePair
+ Assert.assertEquals("java.util.List#size", elements[index++].toString());
+ Assert.assertEquals("java.util.List#size", elements[index++].toString());
+ Assert.assertEquals("java.util.List#size", elements[index++].toString());
+ Assert.assertEquals("java.util.List#size", elements[index++].toString());
+
+ // getComparisonSources
+ Assert.assertEquals("java.util.HashMap#<init>", elements[index++].toString());
+ Assert.assertEquals("java.util.List#iterator", elements[index++].toString());
+ Assert.assertEquals("java.util.Iterator#hasNext", elements[index++].toString());
+ Assert.assertEquals("java.util.Iterator#next", elements[index++].toString());
+ Assert.assertEquals("java.util.Map#put", elements[index++].toString());
+ Assert.assertEquals("java.util.List#iterator", elements[index++].toString());
+ Assert.assertEquals("java.util.Iterator#hasNext", elements[index++].toString());
+ Assert.assertEquals("java.util.Iterator#next", elements[index++].toString());
+ Assert.assertEquals("java.util.Map#put", elements[index++].toString());
+ Assert.assertEquals("java.util.Map#size", elements[index++].toString());
+ Assert.assertEquals("java.util.Map#entrySet", elements[index++].toString());
+ Assert.assertEquals("java.util.Set#iterator", elements[index++].toString());
+ Assert.assertEquals("java.util.Iterator#hasNext", elements[index++].toString());
+ Assert.assertEquals("java.util.Iterator#next", elements[index++].toString());
+ Assert.assertEquals("java.util.Map$Entry#getValue", elements[index++].toString());
+ */
+ }
+}
-package jp.naist.se.stigmata.birthmarks.uc;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import jp.naist.se.stigmata.Birthmark;\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
-import jp.naist.se.stigmata.BirthmarkElement;\r
-import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.ExtractionResultSet;\r
-import jp.naist.se.stigmata.Stigmata;\r
-\r
-import org.junit.Assert;\r
-import org.junit.Before;\r
-import org.junit.Test;\r
-\r
-/**\r
- *\r
- * @author Haruaki TAMADA\r
- * @version $Revision$ $Date$\r
- */\r
-public class UCBirthmarkExtractorTest{\r
- private Stigmata stigmata;\r
- private BirthmarkContext context;\r
-\r
- @Before\r
- public void setup(){\r
- stigmata = Stigmata.getInstance();\r
- context = stigmata.createContext();\r
- context.addBirthmarkType("uc");\r
- }\r
-\r
- @Test\r
- public void checkUCBirthmark() throws Exception{\r
- ExtractionResultSet ers = stigmata.createEngine().extract(\r
- new String[] { "target/classes/jp/naist/se/stigmata/Stigmata.class", },\r
- context\r
- );\r
- BirthmarkSet[] array = ers.getBirthmarkSets();\r
-\r
- Assert.assertEquals(1, array.length);\r
- Assert.assertNotNull(array[0].getBirthmark("uc"));\r
-\r
- Birthmark birthmark = array[0].getBirthmark("uc");\r
- Assert.assertEquals("uc", birthmark.getType());\r
- Assert.assertEquals(18, birthmark.getElementCount());\r
-\r
- BirthmarkElement[] elements = birthmark.getElements();\r
- int index = 0;\r
- Assert.assertEquals("java.io.File", elements[index++].getValue());\r
- Assert.assertEquals("java.io.FileFilter", elements[index++].getValue());\r
- Assert.assertEquals("java.io.FileInputStream", elements[index++].getValue());\r
- Assert.assertEquals("java.io.FileWriter", elements[index++].getValue());\r
- Assert.assertEquals("java.io.InputStream", elements[index++].getValue());\r
- Assert.assertEquals("java.io.PrintWriter", elements[index++].getValue());\r
- Assert.assertEquals("java.io.Writer", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.Class", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.ClassLoader", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.Object", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.String", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.System", elements[index++].getValue());\r
- Assert.assertEquals("java.net.URI", elements[index++].getValue());\r
- Assert.assertEquals("java.net.URL", elements[index++].getValue());\r
- Assert.assertEquals("java.net.URLClassLoader", elements[index++].getValue());\r
- Assert.assertEquals("java.util.ArrayList", elements[index++].getValue());\r
- Assert.assertEquals("java.util.Iterator", elements[index++].getValue());\r
- Assert.assertEquals("java.util.List", elements[index++].getValue());\r
- }\r
-\r
- @Test\r
- public void checkUCBirthmark2() throws Exception{\r
- ExtractionResultSet ers = stigmata.createEngine().extract(\r
- new String[] { "target/classes/jp/naist/se/stigmata/result/RoundRobinComparisonResultSet.class", },\r
- context\r
- );\r
- BirthmarkSet[] array = ers.getBirthmarkSets();\r
-\r
- Assert.assertEquals(1, array.length);\r
- Assert.assertNotNull(array[0].getBirthmark("uc"));\r
-\r
- Birthmark birthmark = array[0].getBirthmark("uc");\r
- Assert.assertEquals("uc", birthmark.getType());\r
- Assert.assertEquals(9, birthmark.getElementCount());\r
-\r
- BirthmarkElement[] elements = birthmark.getElements();\r
- int index = 0;\r
- Assert.assertEquals("java.lang.Object", elements[index++].getValue());\r
- Assert.assertEquals("java.lang.String", elements[index++].getValue());\r
- Assert.assertEquals("java.net.URL", elements[index++].getValue());\r
- Assert.assertEquals("java.util.ArrayList", elements[index++].getValue());\r
- Assert.assertEquals("java.util.Collection", elements[index++].getValue());\r
- Assert.assertEquals("java.util.HashMap", elements[index++].getValue());\r
- Assert.assertEquals("java.util.Iterator", elements[index++].getValue());\r
- Assert.assertEquals("java.util.List", elements[index++].getValue());\r
- Assert.assertEquals("java.util.Map", elements[index++].getValue());\r
- }\r
-}\r
+package jp.sourceforge.stigmata.birthmarks.uc;
+
+/*
+ * $Id$
+ */
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.BirthmarkSet;
+import jp.sourceforge.stigmata.ExtractionResultSet;
+import jp.sourceforge.stigmata.Stigmata;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ *
+ * @author Haruaki TAMADA
+ * @version $Revision$ $Date$
+ */
+public class UCBirthmarkExtractorTest{
+ private Stigmata stigmata;
+ private BirthmarkContext context;
+
+ @Before
+ public void setup(){
+ stigmata = Stigmata.getInstance();
+ context = stigmata.createContext();
+ context.addBirthmarkType("uc");
+ }
+
+ @Test
+ public void checkUCBirthmark() throws Exception{
+ ExtractionResultSet ers = stigmata.createEngine().extract(
+ new String[] { "target/classes/jp/sourceforge/stigmata/Stigmata.class", },
+ context
+ );
+ BirthmarkSet[] array = ers.getBirthmarkSets();
+
+ Assert.assertEquals(1, array.length);
+ Assert.assertNotNull(array[0].getBirthmark("uc"));
+
+ Birthmark birthmark = array[0].getBirthmark("uc");
+ Assert.assertEquals("uc", birthmark.getType());
+ Assert.assertEquals(18, birthmark.getElementCount());
+
+ BirthmarkElement[] elements = birthmark.getElements();
+ int index = 0;
+ Assert.assertEquals("java.io.File", elements[index++].getValue());
+ Assert.assertEquals("java.io.FileFilter", elements[index++].getValue());
+ Assert.assertEquals("java.io.FileInputStream", elements[index++].getValue());
+ Assert.assertEquals("java.io.FileWriter", elements[index++].getValue());
+ Assert.assertEquals("java.io.InputStream", elements[index++].getValue());
+ Assert.assertEquals("java.io.PrintWriter", elements[index++].getValue());
+ Assert.assertEquals("java.io.Writer", elements[index++].getValue());
+ Assert.assertEquals("java.lang.Class", elements[index++].getValue());
+ Assert.assertEquals("java.lang.ClassLoader", elements[index++].getValue());
+ Assert.assertEquals("java.lang.Object", elements[index++].getValue());
+ Assert.assertEquals("java.lang.String", elements[index++].getValue());
+ Assert.assertEquals("java.lang.System", elements[index++].getValue());
+ Assert.assertEquals("java.net.URI", elements[index++].getValue());
+ Assert.assertEquals("java.net.URL", elements[index++].getValue());
+ Assert.assertEquals("java.net.URLClassLoader", elements[index++].getValue());
+ Assert.assertEquals("java.util.ArrayList", elements[index++].getValue());
+ Assert.assertEquals("java.util.Iterator", elements[index++].getValue());
+ Assert.assertEquals("java.util.List", elements[index++].getValue());
+ }
+
+ @Test
+ public void checkUCBirthmark2() throws Exception{
+ ExtractionResultSet ers = stigmata.createEngine().extract(
+ new String[] { "target/classes/jp/sourceforge/stigmata/result/RoundRobinComparisonResultSet.class", },
+ context
+ );
+ BirthmarkSet[] array = ers.getBirthmarkSets();
+
+ Assert.assertEquals(1, array.length);
+ Assert.assertNotNull(array[0].getBirthmark("uc"));
+
+ Birthmark birthmark = array[0].getBirthmark("uc");
+ Assert.assertEquals("uc", birthmark.getType());
+ Assert.assertEquals(9, birthmark.getElementCount());
+
+ BirthmarkElement[] elements = birthmark.getElements();
+ int index = 0;
+ Assert.assertEquals("java.lang.Object", elements[index++].getValue());
+ Assert.assertEquals("java.lang.String", elements[index++].getValue());
+ Assert.assertEquals("java.net.URL", elements[index++].getValue());
+ Assert.assertEquals("java.util.ArrayList", elements[index++].getValue());
+ Assert.assertEquals("java.util.Collection", elements[index++].getValue());
+ Assert.assertEquals("java.util.HashMap", elements[index++].getValue());
+ Assert.assertEquals("java.util.Iterator", elements[index++].getValue());
+ Assert.assertEquals("java.util.List", elements[index++].getValue());
+ Assert.assertEquals("java.util.Map", elements[index++].getValue());
+ }
+}