+.classpath
+.djunitplugin
+.project
+.settings
target
+jcoverage.ser
<modelVersion>4.0.0</modelVersion>\r
<groupId>jp.sourceforge</groupId>\r
<artifactId>stigmata</artifactId>\r
- <version>2.0.1-SNAPSHOT</version>\r
- <name>stigmata</name>\r
+ <version>3.0.0-SNAPSHOT</version>\r
+ <name>Stigmata</name>\r
<description>Java birthmark toolkit</description>\r
<url>http://stigmata.sourceforge.jp/</url>\r
<inceptionYear>2006</inceptionYear>\r
<dependencies>\r
<dependency>\r
<groupId>asm</groupId>\r
- <artifactId>asm-all</artifactId>\r
- <version>3.1</version>\r
+ <artifactId>asm</artifactId>\r
+ <version>3.3</version>\r
<scope>compile</scope>\r
</dependency>\r
<dependency>\r
<dependency>\r
<groupId>jp.sourceforge.stigmata</groupId>\r
<artifactId>digger</artifactId>\r
- <version>1.1.0</version>\r
+ <version>3.0.0-SNAPSHOT</version>\r
<scope>compile</scope>\r
</dependency>\r
<dependency>\r
<plugin>\r
<groupId>org.apache.maven.plugins</groupId>\r
<artifactId>maven-compiler-plugin</artifactId>\r
+ <version>2.3.2</version>\r
<configuration>\r
<source>1.6</source>\r
<target>1.6</target>\r
\r
<plugin>\r
<groupId>org.apache.maven.plugins</groupId>\r
+ <artifactId>maven-resources-plugin</artifactId>\r
+ <version>2.4.3</version>\r
+ <configuration>\r
+ <encoding>utf-8</encoding>\r
+ </configuration>\r
+ </plugin>\r
+\r
+ <plugin>\r
+ <groupId>org.apache.maven.plugins</groupId>\r
<artifactId>maven-jar-plugin</artifactId>\r
+ <version>2.3.1</version>\r
<configuration>\r
<archive>\r
<manifest>\r
<plugin>\r
<groupId>org.codehaus.mojo</groupId>\r
<artifactId>native2ascii-maven-plugin</artifactId>\r
+ <version>1.0-alpha-1</version>\r
<executions>\r
<execution>\r
<goals>\r
<plugin>\r
<groupId>org.apache.maven.plugins</groupId>\r
<artifactId>maven-site-plugin</artifactId>\r
+ <version>3.0-beta-3</version>\r
<configuration>\r
<inputEncoding>euc-jp</inputEncoding>\r
<outputEncoding>utf-8</outputEncoding>\r
<plugin>\r
<groupId>org.apache.maven.plugins</groupId>\r
<artifactId>maven-project-info-reports-plugin</artifactId>\r
- </plugin>\r
- <plugin>\r
- <groupId>org.apache.maven.plugins</groupId>\r
- <artifactId>maven-javadoc-plugin</artifactId>\r
- <configuration>\r
- <locale>en</locale>\r
- </configuration>\r
+ <version>2.3.1</version>\r
</plugin>\r
<plugin>\r
<groupId>org.codehaus.mojo</groupId>\r
<artifactId>cobertura-maven-plugin</artifactId>\r
+ <version>2.4</version>\r
+ <configuration>\r
+ <formats>\r
+ <format>xml</format>\r
+ <format>html</format>\r
+ </formats>\r
+ <encoding>utf-8</encoding>\r
+ </configuration>\r
</plugin>\r
<plugin>\r
+ <groupId>org.apache.maven.plugins</groupId>\r
<artifactId>maven-pmd-plugin</artifactId>\r
+ <version>2.5</version>\r
<configuration>\r
- <linkXref>true</linkXref>\r
<sourceEncoding>utf-8</sourceEncoding>\r
+ <outputEncoding>utf-8</outputEncoding>\r
<targetJdk>1.6</targetJdk>\r
</configuration>\r
</plugin>\r
<plugin>\r
- <groupId>org.apache.maven.plugins</groupId>\r
- <artifactId>maven-jxr-plugin</artifactId>\r
+ <groupId>org.codehaus.mojo</groupId>\r
+ <artifactId>findbugs-maven-plugin</artifactId>\r
+ <version>2.3.2</version>\r
+ <configuration>\r
+ <sourceEncoding>utf-8</sourceEncoding>\r
+ <outputEncoding>utf-8</outputEncoding>\r
+ </configuration>\r
</plugin>\r
<plugin>\r
<groupId>org.apache.maven.plugins</groupId>\r
- <artifactId>maven-changes-plugin</artifactId>\r
- <reportSets>\r
- <reportSet>\r
- <reports>\r
- <report>changes-report</report>\r
- </reports>\r
- </reportSet>\r
- </reportSets>\r
+ <artifactId>maven-surefire-report-plugin</artifactId>\r
+ <version>2.8</version>\r
</plugin>\r
<plugin>\r
- <groupId>org.codehaus.mojo</groupId>\r
- <artifactId>findbugs-maven-plugin</artifactId>\r
+ <groupId>org.apache.maven.plugins</groupId>\r
+ <artifactId>maven-jxr-plugin</artifactId>\r
+ <version>2.1</version>\r
<configuration>\r
- <xmlOutput>false</xmlOutput>\r
- <threshold>Normal</threshold>\r
- <effort>Default</effort>\r
+ <inputEncoding>utf-8</inputEncoding>\r
+ <outputEncoding>utf-8</outputEncoding>\r
+ <aggregate>true</aggregate>\r
</configuration>\r
</plugin>\r
-\r
<plugin>\r
<groupId>org.apache.maven.plugins</groupId>\r
<artifactId>maven-javadoc-plugin</artifactId>\r
+ <version>2.7</version>\r
<configuration>\r
- <locale>en</locale>\r
+ <charset>utf-8</charset>\r
+ <encoding>utf-8</encoding>\r
+ <docencoding>utf-8</docencoding>\r
</configuration>\r
</plugin>\r
</plugins>\r
import jp.sourceforge.stigmata.hook.StigmataHookManager;
import jp.sourceforge.stigmata.result.CertainPairComparisonResultSet;
import jp.sourceforge.stigmata.result.RoundRobinComparisonResultSet;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* core engine for extracting/comparing/filtering birthmarks.
String[] target = set.toArray(new String[set.size()]);
ClassFileArchive[] archives = createArchives(target, environment);
for(String type: context.getBirthmarkTypes()){
- BirthmarkSpi service = context.getEnvironment().getService(type);
+ BirthmarkService service = context.getEnvironment().getService(type);
if(service != null && service.getPreprocessor() != null){
BirthmarkPreprocessor preprocessor = service.getPreprocessor();
preprocessor.preprocess(archives, context);
import java.util.ServiceLoader;
import java.util.Set;
-import javax.imageio.spi.ServiceRegistry;
-
import jp.sourceforge.stigmata.digger.ClasspathContext;
import jp.sourceforge.stigmata.filter.ComparisonPairFilterManager;
import jp.sourceforge.stigmata.resolvers.StigmataHomeManager;
import jp.sourceforge.stigmata.result.history.ExtractedBirthmarkServiceManager;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
+import jp.sourceforge.stigmata.utils.NullIterator;
import jp.sourceforge.stigmata.utils.WellknownClassManager;
/**
/**
* collection of services.
*/
- private Map<String, BirthmarkSpi> services = new HashMap<String, BirthmarkSpi>();
+ private Map<String, BirthmarkService> services = new HashMap<String, BirthmarkService>();
/**
* properties manager.
classpathContext = new ClasspathContext();
filterManager = new ComparisonPairFilterManager(this);
historyManager = new ExtractedBirthmarkServiceManager(this);
+
+ findDefaultServices();
}
/**
/**
* add given birthmark service to this environment.
*/
- public synchronized void addService(BirthmarkSpi service){
+ public synchronized void addService(BirthmarkService service){
if(parent == null || parent.getService(service.getType()) == null){
services.put(service.getType(), service);
}
/**
* return birthmark service registered with given birthmark type.
*/
- public BirthmarkSpi getService(String type){
- BirthmarkSpi service = services.get(type);
+ public BirthmarkService getService(String type){
+ BirthmarkService service = services.get(type);
if(service == null && parent != null){
service = parent.getService(type);
}
/**
* 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()]);
+ public synchronized BirthmarkService[] getServices(){
+ List<BirthmarkService> list = getServiceList();
+ BirthmarkService[] services = list.toArray(new BirthmarkService[list.size()]);
Arrays.sort(services, new BirthmarkSpiComparator());
return services;
}
public <T> Iterator<T> lookupProviders(Class<T> providerClass){
- Iterator<T> iterator;
+ ServiceLoader<T> services;
if(loader != null){
- ServiceLoader<T> services = ServiceLoader.load(providerClass, loader);
+ services = ServiceLoader.load(providerClass, loader);
+ }
+ else{
+ services = ServiceLoader.load(providerClass);
+ }
+
+ Iterator<T> iterator;
+ if(services != null){
iterator = services.iterator();
}
else{
- iterator = ServiceRegistry.lookupProviders(providerClass);
+ iterator = new NullIterator<T>();
}
return iterator;
}
/**
* return birthmark services lookup from current class path.
*/
- public synchronized BirthmarkSpi[] findServices(){
- List<BirthmarkSpi> list = getServiceList();
+ public synchronized BirthmarkService[] findServices(){
+ List<BirthmarkService> list = getServiceList();
- for(Iterator<BirthmarkSpi> i = lookupProviders(BirthmarkSpi.class); i.hasNext(); ){
- BirthmarkSpi spi = i.next();
+ for(Iterator<BirthmarkService> i = lookupProviders(BirthmarkService.class); i.hasNext(); ){
+ BirthmarkService spi = i.next();
if(getService(spi.getType()) == null){
list.add(spi);
}
}
- BirthmarkSpi[] services = list.toArray(new BirthmarkSpi[list.size()]);
+ BirthmarkService[] services = list.toArray(new BirthmarkService[list.size()]);
Arrays.sort(services, new BirthmarkSpiComparator());
return services;
/**
* find the all birthmark services searching to root environment.
*/
- private List<BirthmarkSpi> getServiceList(){
- List<BirthmarkSpi> list = new ArrayList<BirthmarkSpi>();
+ private List<BirthmarkService> getServiceList(){
+ List<BirthmarkService> list = new ArrayList<BirthmarkService>();
if(parent != null){
- for(BirthmarkSpi spi: parent.getServices()){
+ for(BirthmarkService spi: parent.getServices()){
list.add(spi);
}
}
}
return list;
}
+
+ private void findDefaultServices(){
+ for(BirthmarkService service: ServiceLoader.load(BirthmarkService.class)){
+ addService(service);
+ }
+ }
}
import java.io.InputStream;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* extract birthmarks from given Java bytecode stream.
/**
* returns service provider interface of this extractor.
*/
- public BirthmarkSpi getProvider();
+ public BirthmarkService getProvider();
/**
* create new birthmark.
public ExtractionUnit[] getAcceptableUnits();
/**
+ * build birthmark element from given string.
+ */
+ public BirthmarkElement buildElement(String value);
+
+ /**
* extract birthmark from given stream with given environment.
*/
public Birthmark extract(InputStream in, BirthmarkContext context) throws BirthmarkExtractionFailedException;
import java.util.Comparator;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* @author Haruaki TAMADA
*/
-class BirthmarkSpiComparator implements Comparator<BirthmarkSpi>{
+class BirthmarkSpiComparator implements Comparator<BirthmarkService>{
/**
* default constructor
*/
}
@Override
- public int compare(BirthmarkSpi s1, BirthmarkSpi s2){
+ public int compare(BirthmarkService s1, BirthmarkService s2){
if(s1.isExperimental() && !s2.isExperimental()){
return 1;
}
import jp.sourceforge.stigmata.digger.ClasspathContext;
import jp.sourceforge.stigmata.hook.Phase;
import jp.sourceforge.stigmata.hook.StigmataHookManager;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
import jp.sourceforge.talisman.xmlcli.CommandLinePlus;
import jp.sourceforge.talisman.xmlcli.OptionsBuilder;
import jp.sourceforge.talisman.xmlcli.XmlCliConfigurationException;
String[] birthmarks = cl.getOptionValues("birthmark");
if(birthmarks == null || birthmarks.length == 0){
List<String> birthmarkList = new ArrayList<String>();
- for(BirthmarkSpi service: env.getServices()){
+ for(BirthmarkService service: env.getServices()){
if(!service.isExperimental()){
birthmarkList.add(service.getType());
}
import jp.sourceforge.stigmata.event.BirthmarkEngineListener;
import jp.sourceforge.stigmata.printer.PrinterManager;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
import jp.sourceforge.stigmata.ui.swing.ExtensionFilter;
import jp.sourceforge.stigmata.utils.ConfigFileExporter;
import jp.sourceforge.stigmata.utils.ConfigFileImporter;
} catch(IOException e){
throw new ApplicationInitializationError(e);
}
- for(Iterator<BirthmarkSpi> i = defaultEnvironment.lookupProviders(BirthmarkSpi.class); i.hasNext(); ){
- BirthmarkSpi service = i.next();
+ for(Iterator<BirthmarkService> i = defaultEnvironment.lookupProviders(BirthmarkService.class); i.hasNext(); ){
+ BirthmarkService service = i.next();
defaultEnvironment.addService(service);
}
PrinterManager.refresh(defaultEnvironment);
import jp.sourceforge.stigmata.Birthmark;
import jp.sourceforge.stigmata.BirthmarkContext;
import jp.sourceforge.stigmata.BirthmarkExtractionFailedException;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
* @author Haruaki TAMADA
*/
public abstract class ASMBirthmarkExtractor extends AbstractBirthmarkExtractor{
- public ASMBirthmarkExtractor(BirthmarkSpi spi){
+ public ASMBirthmarkExtractor(BirthmarkService spi){
super(spi);
}
import jp.sourceforge.stigmata.BirthmarkExtractionFailedException;
import jp.sourceforge.stigmata.BirthmarkExtractor;
import jp.sourceforge.stigmata.ExtractionUnit;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* Abstract class for extracting birthmark.
/**
* provider.
*/
- private BirthmarkSpi spi;
+ private BirthmarkService spi;
/**
* default constructor.
* constructor.
* @param spi service provider.
*/
- public AbstractBirthmarkExtractor(BirthmarkSpi spi){
+ public AbstractBirthmarkExtractor(BirthmarkService spi){
this.spi = spi;
}
* returns the provider of this extractor.
*/
@Override
- public BirthmarkSpi getProvider(){
+ public BirthmarkService getProvider(){
return spi;
}
import jp.sourceforge.stigmata.BirthmarkContext;
import jp.sourceforge.stigmata.BirthmarkPreprocessor;
import jp.sourceforge.stigmata.digger.ClassFileArchive;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
public abstract class AbstractBirthmarkPreprocessor implements BirthmarkPreprocessor{
- private BirthmarkSpi service;
+ private BirthmarkService service;
/**
* default constructor.
public AbstractBirthmarkPreprocessor(){
}
- public AbstractBirthmarkPreprocessor(BirthmarkSpi service){
+ public AbstractBirthmarkPreprocessor(BirthmarkService service){
this.service = service;
}
- public BirthmarkSpi getProvider(){
+ public BirthmarkService getProvider(){
return service;
}
+++ /dev/null
-package jp.sourceforge.stigmata.birthmarks;
-
-import java.util.Locale;
-
-import jp.sourceforge.stigmata.Birthmark;
-import jp.sourceforge.stigmata.BirthmarkComparator;
-import jp.sourceforge.stigmata.BirthmarkElement;
-import jp.sourceforge.stigmata.BirthmarkExtractor;
-import jp.sourceforge.stigmata.BirthmarkPreprocessor;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
-import jp.sourceforge.stigmata.utils.LocalizedDescriptionManager;
-
-/**
- * Abstract class for {@link BirthmarkSpi <code>BirthmarkSpi</code>}
- *
- * @author Haruaki TAMADA
- */
-public abstract class AbstractBirthmarkService implements BirthmarkSpi{
- @Override
- public String getDisplayType(){
- return getDisplayType(Locale.getDefault());
- }
-
- @Override
- public String getDisplayType(Locale locale){
- LocalizedDescriptionManager manager = LocalizedDescriptionManager.getInstance();
- String type = manager.getDisplayType(locale, getType());
- if(type == null){
- type = getType();
- }
- return type;
- }
-
- @Override
- public String getDescription(){
- return getDescription(Locale.getDefault());
- }
-
- @Override
- public String getDescription(Locale locale){
- LocalizedDescriptionManager manager = LocalizedDescriptionManager.getInstance();
- String description = manager.getDescription(locale, getType());
- if(description == null){
- description = getDefaultDescription();
- }
- return description;
- }
-
- @Override
- public abstract BirthmarkComparator getComparator();
-
- @Override
- public String getComparatorClassName(){
- return getComparator().getClass().getName();
- }
-
- @Override
- public abstract BirthmarkExtractor getExtractor();
-
- @Override
- public String getExtractorClassName(){
- return getExtractor().getClass().getName();
- }
-
- @Override
- public BirthmarkPreprocessor getPreprocessor(){
- return null;
- }
-
- @Override
- public String getPreprocessorClassName(){
- BirthmarkPreprocessor preprocessor = getPreprocessor();
- String name = null;
- if(preprocessor != null){
- name = preprocessor.getClass().getName();
- }
- return name;
- }
-
- @Override
- public abstract String getType();
-
- @Override
- public abstract String getDefaultDescription();
-
- @Override
- public boolean isExperimental(){
- return true;
- }
-
- @Override
- public boolean isUserDefined(){
- return true;
- }
-
- @Override
- public String getVersion(){
- return getClass().getPackage().getImplementationVersion();
- }
-
- @Override
- public String getVendorName(){
- return getClass().getPackage().getImplementationVendor();
- }
-
- @Override
- public Birthmark buildBirthmark(){
- return getExtractor().createBirthmark();
- }
-
- @Override
- public BirthmarkElement buildBirthmarkElement(String value){
- if(value == null || value.equals("<null>")){
- return NullBirthmarkElement.getInstance();
- }
- return new BirthmarkElement(value);
- }
-}
+++ /dev/null
-package jp.sourceforge.stigmata.birthmarks;
-
-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
- */
-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;
- }
-
- @Override
- public String getDisplayType(){
- return displayType;
- }
-
- public void setDescription(String description){
- this.description = description;
- }
-
- @Override
- 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;
- }
-
- @Override
- public String getExtractorClassName(){
- return extractorClass.getName();
- }
-
- /**
- * returns a extractor for the birthmark of this service.
- */
- @Override
- 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;
- }
-
- @Override
- public String getComparatorClassName(){
- return comparatorClass.getName();
- }
-
- /**
- * returns a comparator for the birthmark of this service.
- */
- @Override
- 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;
- }
-
- @Override
- public boolean isUserDefined(){
- return userDefined;
- }
-
- public void setUserDefined(boolean userDefined){
- this.userDefined = userDefined;
- }
-}
-
import jp.sourceforge.stigmata.Birthmark;
import jp.sourceforge.stigmata.BirthmarkComparator;
import jp.sourceforge.stigmata.BirthmarkContext;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* abstract birthmark comparator.
* @author Haruaki Tamada
*/
public abstract class AbstractBirthmarkComparator implements BirthmarkComparator{
- private BirthmarkSpi spi;
+ private BirthmarkService spi;
@Deprecated
public AbstractBirthmarkComparator(){
}
- public AbstractBirthmarkComparator(BirthmarkSpi spi){
+ public AbstractBirthmarkComparator(BirthmarkService spi){
this.spi = spi;
}
- public BirthmarkSpi getProvider(){
+ public BirthmarkService getProvider(){
return spi;
}
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.spi.BirthmarkService;
import jp.sourceforge.stigmata.utils.LocalizedDescriptionManager;
/**
* returns a extractor for the birthmark of this service.
*/
@Override
- public BirthmarkComparator getComparator(BirthmarkSpi service){
+ public BirthmarkComparator getComparator(BirthmarkService service){
try{
Class<?> c = Class.forName(getComparatorClassName());
Class<? extends BirthmarkComparator> clazz = c.asSubclass(BirthmarkComparator.class);
- Constructor<? extends BirthmarkComparator> constructor = clazz.getConstructor(BirthmarkSpi.class);
+ Constructor<? extends BirthmarkComparator> constructor = clazz.getConstructor(BirthmarkService.class);
return constructor.newInstance(service);
} catch(NoSuchMethodException e){
} catch(InstantiationException e){
import jp.sourceforge.stigmata.BirthmarkContext;
import jp.sourceforge.stigmata.BirthmarkElement;
import jp.sourceforge.stigmata.birthmarks.ValueCountable;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* Comparing birthmarks by cosine similarity algorithm. This class compares
public class CosineSimilarityBirthmarkComparator extends
AbstractBirthmarkComparator{
- public CosineSimilarityBirthmarkComparator(BirthmarkSpi spi){
+ public CosineSimilarityBirthmarkComparator(BirthmarkService spi){
super(spi);
}
package jp.sourceforge.stigmata.birthmarks.comparators;
import jp.sourceforge.stigmata.BirthmarkComparator;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* SPI of {@link BirthmarkComparator <code>BirthmarkComparator</code>}.
* returns a extractor for the birthmark of this service.
*/
@Override
- public BirthmarkComparator getComparator(BirthmarkSpi service){
+ public BirthmarkComparator getComparator(BirthmarkService service){
return new CosineSimilarityBirthmarkComparator(service);
}
}
import jp.sourceforge.stigmata.Birthmark;
import jp.sourceforge.stigmata.BirthmarkContext;
import jp.sourceforge.stigmata.BirthmarkElement;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* calculate similarities between two birthmarks by DP matching algorithm.
private int mismatchPenalty = 5;
private int shiftPenalty = 1;
- public DPMatchingBirthmarkComparator(BirthmarkSpi spi){
+ public DPMatchingBirthmarkComparator(BirthmarkService spi){
super(spi);
}
package jp.sourceforge.stigmata.birthmarks.comparators;
import jp.sourceforge.stigmata.BirthmarkComparator;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* SPI of {@link BirthmarkComparator <code>BirthmarkComparator</code>}.
* returns a extractor for the birthmark of this service.
*/
@Override
- public BirthmarkComparator getComparator(BirthmarkSpi service){
+ public BirthmarkComparator getComparator(BirthmarkService service){
return new DPMatchingBirthmarkComparator(service);
}
}
import jp.sourceforge.stigmata.Birthmark;
import jp.sourceforge.stigmata.BirthmarkContext;
import jp.sourceforge.stigmata.BirthmarkElement;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* calculate similarities between two birthmarks by edit distance
* @author Haruaki TAMADA
*/
public class EditDistanceBirthmarkComparator extends AbstractBirthmarkComparator{
- public EditDistanceBirthmarkComparator(BirthmarkSpi spi){
+ public EditDistanceBirthmarkComparator(BirthmarkService spi){
super(spi);
}
package jp.sourceforge.stigmata.birthmarks.comparators;
import jp.sourceforge.stigmata.BirthmarkComparator;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* SPI of {@link BirthmarkComparator <code>BirthmarkComparator</code>}.
* returns a extractor for the birthmark of this service.
*/
@Override
- public BirthmarkComparator getComparator(BirthmarkSpi service){
+ public BirthmarkComparator getComparator(BirthmarkService service){
return new EditDistanceBirthmarkComparator(service);
}
}
import jp.sourceforge.stigmata.Birthmark;
import jp.sourceforge.stigmata.BirthmarkElement;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* calculate similarities between two birthmarks by edit distance
* @author Haruaki TAMADA
*/
public class ExtendedEditDistanceBirthmarkComparator extends EditDistanceBirthmarkComparator{
- public ExtendedEditDistanceBirthmarkComparator(BirthmarkSpi spi){
+ public ExtendedEditDistanceBirthmarkComparator(BirthmarkService spi){
super(spi);
}
package jp.sourceforge.stigmata.birthmarks.comparators;
import jp.sourceforge.stigmata.BirthmarkComparator;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* SPI of {@link BirthmarkComparator <code>BirthmarkComparator</code>}.
* returns a extractor for the birthmark of this service.
*/
@Override
- public BirthmarkComparator getComparator(BirthmarkSpi service){
+ public BirthmarkComparator getComparator(BirthmarkService service){
return new ExtendedEditDistanceBirthmarkComparator(service);
}
}
import jp.sourceforge.stigmata.Birthmark;
import jp.sourceforge.stigmata.BirthmarkContext;
import jp.sourceforge.stigmata.BirthmarkElement;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* this comparator calculate following formula.
* @author Haruaki TAMADA
*/
public class LogicalAndBirthmarkComparator extends AbstractBirthmarkComparator{
- public LogicalAndBirthmarkComparator(BirthmarkSpi spi){
+ public LogicalAndBirthmarkComparator(BirthmarkService spi){
super(spi);
}
package jp.sourceforge.stigmata.birthmarks.comparators;
import jp.sourceforge.stigmata.BirthmarkComparator;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* SPI of {@link BirthmarkComparator <code>BirthmarkComparator</code>}.
* returns a extractor for the birthmark of this service.
*/
@Override
- public BirthmarkComparator getComparator(BirthmarkSpi service){
+ public BirthmarkComparator getComparator(BirthmarkService service){
return new LogicalAndBirthmarkComparator(service);
}
}
import jp.sourceforge.stigmata.BirthmarkComparator;
import jp.sourceforge.stigmata.BirthmarkContext;
import jp.sourceforge.stigmata.BirthmarkElement;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* An implementation of {@link BirthmarkComparator
* @author Haruaki TAMADA
*/
public class PlainBirthmarkComparator extends AbstractBirthmarkComparator{
- public PlainBirthmarkComparator(BirthmarkSpi spi){
+ public PlainBirthmarkComparator(BirthmarkService spi){
super(spi);
}
package jp.sourceforge.stigmata.birthmarks.comparators;
import jp.sourceforge.stigmata.BirthmarkComparator;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* SPI of {@link BirthmarkComparator <code>BirthmarkComparator</code>}.
* returns a extractor for the birthmark of this service.
*/
@Override
- public BirthmarkComparator getComparator(BirthmarkSpi service){
+ public BirthmarkComparator getComparator(BirthmarkService service){
return new PlainBirthmarkComparator(service);
}
}
import jp.sourceforge.stigmata.Birthmark;
import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkElement;
import jp.sourceforge.stigmata.ExtractionUnit;
import jp.sourceforge.stigmata.birthmarks.ASMBirthmarkExtractor;
import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
import org.objectweb.asm.ClassWriter;
* @author Haruaki TAMADA
*/
public class ConstantValueOfFieldVariableBirthmarkExtractor extends ASMBirthmarkExtractor{
- public ConstantValueOfFieldVariableBirthmarkExtractor(BirthmarkSpi spi){
+ public ConstantValueOfFieldVariableBirthmarkExtractor(BirthmarkService spi){
super(spi);
}
ExtractionUnit.CLASS, ExtractionUnit.PACKAGE, ExtractionUnit.ARCHIVE,
};
}
+
+ @Override
+ public BirthmarkElement buildElement(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.sourceforge.stigmata.birthmarks.cvfv;
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.BirthmarkPreprocessor;
import jp.sourceforge.stigmata.birthmarks.comparators.PlainBirthmarkComparator;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
*
*
* @author Haruaki TAMADA
*/
-public class ConstantValueOfFieldVariableBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{
+public class ConstantValueOfFieldVariableBirthmarkService implements BirthmarkService{
private BirthmarkComparator comparator = new PlainBirthmarkComparator(this);
private BirthmarkExtractor extractor = new ConstantValueOfFieldVariableBirthmarkExtractor(this);
}
@Override
- public String getDefaultDescription(){
+ public String getDescription(){
return "Field type and its initial value.";
}
}
@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);
- }
+ public BirthmarkPreprocessor getPreprocessor(){
+ return null;
+ }
}
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.spi.BirthmarkService;
import jp.sourceforge.stigmata.utils.LocalizedDescriptionManager;
/**
* returns a extractor for the birthmark of this service.
*/
@Override
- public BirthmarkExtractor getExtractor(BirthmarkSpi service){
+ public BirthmarkExtractor getExtractor(BirthmarkService service){
try{
Class<?> c = Class.forName(getExtractorClassName());
Class<? extends BirthmarkExtractor> clazz = c.asSubclass(BirthmarkExtractor.class);
- Constructor<? extends BirthmarkExtractor> constructor = clazz.getConstructor(BirthmarkSpi.class);
+ Constructor<? extends BirthmarkExtractor> constructor = clazz.getConstructor(BirthmarkService.class);
return constructor.newInstance(service);
} catch(NoSuchMethodException e){
} catch(InstantiationException e){
import jp.sourceforge.stigmata.BirthmarkEnvironment;
import jp.sourceforge.stigmata.BirthmarkExtractor;
import jp.sourceforge.stigmata.ExtractorNotFoundException;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
import org.apache.commons.beanutils.BeanUtils;
@SuppressWarnings("rawtypes")
private BirthmarkExtractor buildExtractor(String birthmarkType) throws ExtractorNotFoundException{
- BirthmarkSpi spi = environment.getService(birthmarkType);
+ BirthmarkService spi = environment.getService(birthmarkType);
BirthmarkExtractor extractor = null;
if(spi != null){
extractor = spi.getExtractor();
import jp.sourceforge.stigmata.BirthmarkExtractor;
import jp.sourceforge.stigmata.birthmarks.cvfv.ConstantValueOfFieldVariableBirthmarkExtractor;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* Birthmark Service Provider Interface.
* returns a extractor for the birthmark of this service.
*/
@Override
- public BirthmarkExtractor getExtractor(BirthmarkSpi service){
+ public BirthmarkExtractor getExtractor(BirthmarkService service){
return new ConstantValueOfFieldVariableBirthmarkExtractor(service);
}
}
\ No newline at end of file
import jp.sourceforge.stigmata.BirthmarkExtractor;
import jp.sourceforge.stigmata.birthmarks.fmc.FrequencyMethodCallBirthmarkExtractor;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* Birthmark Service Provider Interface.
* returns a extractor for the birthmark of this service.
*/
@Override
- public BirthmarkExtractor getExtractor(BirthmarkSpi service){
+ public BirthmarkExtractor getExtractor(BirthmarkService service){
return new FrequencyMethodCallBirthmarkExtractor(service);
}
}
\ No newline at end of file
import jp.sourceforge.stigmata.BirthmarkExtractor;
import jp.sourceforge.stigmata.birthmarks.fuc.FrequencyUsedClassesBirthmarkExtractor;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* Birthmark Service Provider Interface.
* returns a extractor for the birthmark of this service.
*/
@Override
- public BirthmarkExtractor getExtractor(BirthmarkSpi service){
+ public BirthmarkExtractor getExtractor(BirthmarkService service){
return new FrequencyUsedClassesBirthmarkExtractor(service);
}
}
\ No newline at end of file
import jp.sourceforge.stigmata.BirthmarkExtractor;
import jp.sourceforge.stigmata.birthmarks.is.InheritanceStructureBirthmarkExtractor;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* Birthmark Service Provider Interface.
* returns a extractor for the birthmark of this service.
*/
@Override
- public BirthmarkExtractor getExtractor(BirthmarkSpi service){
+ public BirthmarkExtractor getExtractor(BirthmarkService service){
return new InheritanceStructureBirthmarkExtractor(service);
}
}
\ No newline at end of file
import jp.sourceforge.stigmata.BirthmarkExtractor;
import jp.sourceforge.stigmata.birthmarks.kgram.KGramBasedBirthmarkExtractor;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* Birthmark Service Provider Interface.
* returns a extractor for the birthmark of this service.
*/
@Override
- public BirthmarkExtractor getExtractor(BirthmarkSpi service){
+ public BirthmarkExtractor getExtractor(BirthmarkService service){
return new KGramBasedBirthmarkExtractor(service);
}
}
\ No newline at end of file
import jp.sourceforge.stigmata.BirthmarkExtractor;
import jp.sourceforge.stigmata.birthmarks.smc.SequentialMethodCallBirthmarkExtractor;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* Birthmark Service Provider Interface.
* returns a extractor for the birthmark of this service.
*/
@Override
- public BirthmarkExtractor getExtractor(BirthmarkSpi service){
+ public BirthmarkExtractor getExtractor(BirthmarkService service){
return new SequentialMethodCallBirthmarkExtractor(service);
}
}
\ No newline at end of file
import jp.sourceforge.stigmata.BirthmarkExtractor;
import jp.sourceforge.stigmata.birthmarks.uc.UsedClassesBirthmarkExtractor;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* Birthmark Service Provider Interface.
* returns a extractor for the birthmark of this service.
*/
@Override
- public BirthmarkExtractor getExtractor(BirthmarkSpi service){
+ public BirthmarkExtractor getExtractor(BirthmarkService service){
return new UsedClassesBirthmarkExtractor(service);
}
}
\ No newline at end of file
import jp.sourceforge.stigmata.Birthmark;
import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkElement;
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 jp.sourceforge.stigmata.spi.BirthmarkService;
import org.objectweb.asm.ClassWriter;
* @author Haruaki TAMADA
*/
public class FrequencyMethodCallBirthmarkExtractor extends ASMBirthmarkExtractor{
- public FrequencyMethodCallBirthmarkExtractor(BirthmarkSpi spi){
+ public FrequencyMethodCallBirthmarkExtractor(BirthmarkService spi){
super(spi);
}
public Birthmark createBirthmark(){
return new FrequencyBirthmark(getProvider().getType());
}
+
+
+ @Override
+ public BirthmarkElement buildElement(String value) {
+ return new FrequencyBirthmarkElement(value);
+ }
}
package jp.sourceforge.stigmata.birthmarks.fmc;
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.BirthmarkPreprocessor;
import jp.sourceforge.stigmata.birthmarks.comparators.CosineSimilarityBirthmarkComparator;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
*
*
* @author Haruaki TAMADA
*/
-public class FrequencyMethodCallBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{
+public class FrequencyMethodCallBirthmarkService implements BirthmarkService{
private BirthmarkComparator comparator = new CosineSimilarityBirthmarkComparator(this);
private BirthmarkExtractor extractor = new FrequencyMethodCallBirthmarkExtractor(this);
}
@Override
- public String getDefaultDescription(){
- return "Frequency of method call which order is appeared in method definition.";
- }
-
- @Override
public BirthmarkExtractor getExtractor(){
return extractor;
}
return false;
}
- @Override
- public BirthmarkElement buildBirthmarkElement(String value) {
- return new FrequencyBirthmarkElement(value);
- }
+ @Override
+ public String getDescription(){
+ return "Frequency of Method Calls";
+ }
+
+ @Override
+ public BirthmarkPreprocessor getPreprocessor(){
+ return null;
+ }
}
import jp.sourceforge.stigmata.Birthmark;
import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkElement;
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.uc.UsedClassesBirthmarkExtractVisitor;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
import org.objectweb.asm.ClassWriter;
* @author Haruaki TAMADA
*/
public class FrequencyUsedClassesBirthmarkExtractor extends ASMBirthmarkExtractor{
- public FrequencyUsedClassesBirthmarkExtractor(BirthmarkSpi spi){
+ public FrequencyUsedClassesBirthmarkExtractor(BirthmarkService spi){
super(spi);
}
public Birthmark createBirthmark(){
return new FrequencyBirthmark(getProvider().getType());
}
+
+ public BirthmarkElement buildElement(String value){
+ return new FrequencyBirthmarkElement(value);
+ }
}
package jp.sourceforge.stigmata.birthmarks.fuc;
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.BirthmarkPreprocessor;
import jp.sourceforge.stigmata.birthmarks.comparators.CosineSimilarityBirthmarkComparator;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
*
*
* @author Haruaki TAMADA
*/
-public class FrequencyUsedClassesBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{
+public class FrequencyUsedClassesBirthmarkService implements BirthmarkService{
private BirthmarkComparator comparator = new CosineSimilarityBirthmarkComparator(this);
private BirthmarkExtractor extractor = new FrequencyUsedClassesBirthmarkExtractor(this);
}
@Override
- public String getDefaultDescription(){
+ public String getDescription(){
return "Frequency of used classes in target class.";
}
return false;
}
- public BirthmarkElement createBirthmarkElement(String value){
- return new FrequencyBirthmarkElement(value);
+ @Override
+ public BirthmarkPreprocessor getPreprocessor(){
+ return null;
}
}
import jp.sourceforge.stigmata.Birthmark;
import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkElement;
import jp.sourceforge.stigmata.BirthmarkElementClassNotFoundException;
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 jp.sourceforge.stigmata.spi.BirthmarkService;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
* @author Haruaki TAMADA
*/
public class InheritanceStructureBirthmarkExtractor extends AbstractBirthmarkExtractor{
- public InheritanceStructureBirthmarkExtractor(BirthmarkSpi spi){
+ public InheritanceStructureBirthmarkExtractor(BirthmarkService spi){
super(spi);
}
public ExtractionUnit[] getAcceptableUnits(){
return new ExtractionUnit[] { ExtractionUnit.CLASS, };
}
+
+ @Override
+ public BirthmarkElement buildElement(String value){
+ return new BirthmarkElement(value);
+ }
}
import jp.sourceforge.stigmata.BirthmarkComparator;
import jp.sourceforge.stigmata.BirthmarkExtractor;
-import jp.sourceforge.stigmata.birthmarks.AbstractBirthmarkService;
+import jp.sourceforge.stigmata.BirthmarkPreprocessor;
import jp.sourceforge.stigmata.birthmarks.comparators.PlainBirthmarkComparator;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
*
*
* @author Haruaki TAMADA
*/
-public class InheritanceStructureBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{
+public class InheritanceStructureBirthmarkService implements BirthmarkService{
private BirthmarkComparator comparator = new PlainBirthmarkComparator(this);
private BirthmarkExtractor extractor = new InheritanceStructureBirthmarkExtractor(this);
}
@Override
- public String getDefaultDescription(){
+ public String getDescription(){
return "Inheritance sequence to root class and user classes is replaced to <null>.";
}
public boolean isUserDefined(){
return false;
}
+
+ @Override
+ public BirthmarkPreprocessor getPreprocessor(){
+ return null;
+ }
}
import jp.sourceforge.stigmata.Birthmark;
import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkElement;
import jp.sourceforge.stigmata.ExtractionUnit;
import jp.sourceforge.stigmata.birthmarks.ASMBirthmarkExtractor;
import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
import org.objectweb.asm.ClassWriter;
public class KGramBasedBirthmarkExtractor extends ASMBirthmarkExtractor{
private int kvalue = 4;
- public KGramBasedBirthmarkExtractor(BirthmarkSpi spi){
+ public KGramBasedBirthmarkExtractor(BirthmarkService spi){
super(spi);
}
ExtractionUnit.CLASS, ExtractionUnit.PACKAGE, ExtractionUnit.ARCHIVE,
};
}
+
+
+ @Override
+ public BirthmarkElement buildElement(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.sourceforge.stigmata.birthmarks.kgram;
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.BirthmarkPreprocessor;
import jp.sourceforge.stigmata.birthmarks.comparators.LogicalAndBirthmarkComparator;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
*
*
* @author Haruaki TAMADA
*/
-public class KGramBasedBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{
+public class KGramBasedBirthmarkService implements BirthmarkService{
private BirthmarkComparator comparator = new LogicalAndBirthmarkComparator(this);
private BirthmarkExtractor extractor = new KGramBasedBirthmarkExtractor(this);
}
@Override
- public String getDefaultDescription(){
+ public String getDescription(){
return "k-gram based birthmark.";
}
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;
- }
+ @Override
+ public BirthmarkPreprocessor getPreprocessor(){
+ return null;
+ }
}
import jp.sourceforge.stigmata.Birthmark;
import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkElement;
import jp.sourceforge.stigmata.ExtractionUnit;
import jp.sourceforge.stigmata.birthmarks.ASMBirthmarkExtractor;
import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
import org.objectweb.asm.ClassWriter;
* @author Haruaki TAMADA
*/
public class SequentialMethodCallBirthmarkExtractor extends ASMBirthmarkExtractor{
- public SequentialMethodCallBirthmarkExtractor(BirthmarkSpi spi){
+ public SequentialMethodCallBirthmarkExtractor(BirthmarkService spi){
super(spi);
}
public ExtractionUnit[] getAcceptableUnits(){
return new ExtractionUnit[] { ExtractionUnit.CLASS, ExtractionUnit.ARCHIVE, ExtractionUnit.PACKAGE, };
}
+
+ @Override
+ public BirthmarkElement buildElement(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.sourceforge.stigmata.birthmarks.smc;
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.BirthmarkPreprocessor;
import jp.sourceforge.stigmata.birthmarks.comparators.PlainBirthmarkComparator;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
*
*
* @author Haruaki TAMADA
*/
-public class SequentialMethodCallBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{
+public class SequentialMethodCallBirthmarkService implements BirthmarkService{
private BirthmarkComparator comparator = new PlainBirthmarkComparator(this);
private BirthmarkExtractor extractor = new SequentialMethodCallBirthmarkExtractor(this);
}
@Override
- public String getDefaultDescription(){
+ public String getDescription(){
return "Sequence of method call which order is appeared in method definition.";
}
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);
- }
+ @Override
+ public BirthmarkPreprocessor getPreprocessor(){
+ return null;
+ }
}
import jp.sourceforge.stigmata.Birthmark;
import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkElement;
import jp.sourceforge.stigmata.ExtractionUnit;
import jp.sourceforge.stigmata.birthmarks.ASMBirthmarkExtractor;
import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
import org.objectweb.asm.ClassWriter;
* @author Haruaki TAMADA
*/
public class UsedClassesBirthmarkExtractor extends ASMBirthmarkExtractor{
- public UsedClassesBirthmarkExtractor(BirthmarkSpi spi){
+ public UsedClassesBirthmarkExtractor(BirthmarkService spi){
super(spi);
}
public Birthmark createBirthmark(){
return new UsedClassesBirthmark(getProvider().getType());
}
+
+ @Override
+ public BirthmarkElement buildElement(String value){
+ return new BirthmarkElement(value);
+ }
}
import jp.sourceforge.stigmata.BirthmarkComparator;
import jp.sourceforge.stigmata.BirthmarkExtractor;
-import jp.sourceforge.stigmata.birthmarks.AbstractBirthmarkService;
+import jp.sourceforge.stigmata.BirthmarkPreprocessor;
import jp.sourceforge.stigmata.birthmarks.comparators.LogicalAndBirthmarkComparator;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
*
*
* @author Haruaki TAMADA
*/
-public class UsedClassesBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{
+public class UsedClassesBirthmarkService implements BirthmarkService{
private BirthmarkComparator comparator = new LogicalAndBirthmarkComparator(this);
private BirthmarkExtractor extractor = new UsedClassesBirthmarkExtractor(this);
}
@Override
- public String getDefaultDescription(){
+ public String getDescription(){
return "Set of used classes in target class.";
}
public boolean isUserDefined(){
return false;
}
+
+ @Override
+ public BirthmarkPreprocessor getPreprocessor(){
+ return null;
+ }
}
import jp.sourceforge.stigmata.ComparisonPairFilter;
import jp.sourceforge.stigmata.ComparisonPairFilterSet;
import jp.sourceforge.stigmata.Stigmata;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
import jp.sourceforge.talisman.xmlcli.ResourceHelpFormatter;
import org.apache.commons.cli.HelpFormatter;
);
System.out.println();
System.out.println(helpResource.getString("cli.interface.birthmarks"));
- for(BirthmarkSpi service: env.getServices()){
+ for(BirthmarkService service: env.getServices()){
if(!service.isExperimental()){
System.out.printf(" %-5s (%s): %s%n", service.getType(),
- service.getDisplayType(), service.getDescription());
+ service.getType(), service.getDescription());
}
}
System.out.println();
import jp.sourceforge.stigmata.BirthmarkContext;
import jp.sourceforge.stigmata.Stigmata;
import jp.sourceforge.stigmata.printer.BirthmarkServicePrinter;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
import jp.sourceforge.stigmata.spi.ResultPrinterSpi;
/**
@Override
public void perform(Stigmata stigmata, BirthmarkContext context, String[] args){
- BirthmarkSpi[] spis = context.getEnvironment().findServices();
+ BirthmarkService[] spis = context.getEnvironment().findServices();
ResultPrinterSpi spi = stigmata.getPrinterManager().getService(context.getFormat());
BirthmarkServicePrinter formatter = spi.getBirthmarkServicePrinter();
import jp.sourceforge.stigmata.BirthmarkContext;
import jp.sourceforge.stigmata.BirthmarkEnvironment;
import jp.sourceforge.stigmata.Stigmata;
-import jp.sourceforge.stigmata.birthmarks.BirthmarkService;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
import jp.sourceforge.stigmata.utils.ConfigFileExporter;
/**
boolean removeServiceInConfigFile = false;
for(int i = 0; i < args.length; i++){
- BirthmarkSpi service = env.getService(args[i]);
+ BirthmarkService service = env.getService(args[i]);
if(service instanceof BirthmarkService){
env.removeService(args[i]);
removeServiceInConfigFile = true;
}
}
- private String getPluginFileNameOfService(BirthmarkContext context, BirthmarkSpi service){
+ private String getPluginFileNameOfService(BirthmarkContext context, BirthmarkService service){
Class<?> serviceClass = service.getClass();
URL location = serviceClass.getResource("/" + serviceClass.getName().replace('.', '/') + ".class");
import java.io.PrintWriter;
import java.io.StringWriter;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
*
*/
public abstract class AbstractBirthmarkServicePrinter implements BirthmarkServicePrinter, Printer{
@Override
- public abstract void printResult(PrintWriter out, BirthmarkSpi[] spilist);
+ public abstract void printResult(PrintWriter out, BirthmarkService[] spilist);
@Override
- public String getResult(BirthmarkSpi[] spilist){
+ public String getResult(BirthmarkService[] spilist){
StringWriter writer = new StringWriter();
PrintWriter out = new PrintWriter(writer);
import java.io.IOException;
import java.io.PrintWriter;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
*
* @author Haruaki TAMADA
*/
public interface BirthmarkServicePrinter{
- public void printResult(PrintWriter out, BirthmarkSpi[] spilist) throws IOException;
+ public void printResult(PrintWriter out, BirthmarkService[] spilist) throws IOException;
- public String getResult(BirthmarkSpi[] spilist);
+ public String getResult(BirthmarkService[] spilist);
}
import java.io.PrintWriter;
import jp.sourceforge.stigmata.printer.AbstractBirthmarkServicePrinter;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
*
*/
public class BirthmarkServiceCsvPrinter extends AbstractBirthmarkServicePrinter{
@Override
- public void printResult(PrintWriter out, BirthmarkSpi[] spilist){
+ public void printResult(PrintWriter out, BirthmarkService[] spilist){
printHeader(out);
- for(BirthmarkSpi spi: spilist){
+ for(BirthmarkService spi: spilist){
out.print(spi.getType());
out.print(",");
- out.print(spi.getDisplayType());
+ out.print(spi.getType());
out.print(",");
out.print(spi.getClass().getName());
out.print(",");
import java.io.PrintWriter;
import jp.sourceforge.stigmata.printer.AbstractBirthmarkServicePrinter;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
*
*/
public class BirthmarkServiceXmlPrinter extends AbstractBirthmarkServicePrinter{
@Override
- public void printResult(PrintWriter out, BirthmarkSpi[] spilist){
+ public void printResult(PrintWriter out, BirthmarkService[] spilist){
out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
out.println("<birthmark-result-set>");
out.println(" <birthmark-services>");
- for(BirthmarkSpi spi: spilist){
+ for(BirthmarkService 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>");
Birthmark birthmark = bs.getBirthmark(type);
if(birthmark == null){
- birthmark = env.getService(type).buildBirthmark();
+ birthmark = env.getService(type).getExtractor().createBirthmark();
bs.addBirthmark(birthmark);
}
String element = rs.getString("ELEMENT");
- birthmark.addElement(env.getService(type).buildBirthmarkElement(element));
+ birthmark.addElement(env.getService(type).getExtractor().buildElement(element));
} catch(MalformedURLException e){
}
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.spi.BirthmarkService;
import jp.sourceforge.stigmata.ui.swing.ExtensionFilter;
import jp.sourceforge.stigmata.utils.MultipleIterator;
String className = null;
BirthmarkSet bs = null;
Birthmark birthmark = null;
- BirthmarkSpi service = null;
+ BirthmarkService service = null;
while(reader.hasNext()){
// XMLEvent event = reader.peek();
}
else if(part.equals("element")){
if(service != null){
- BirthmarkElement be = service.buildBirthmarkElement(reader.getElementText());
+ BirthmarkElement be = service.getExtractor().buildElement(reader.getElementText());
birthmark.addElement(be);
}
}
String type = se.getAttributeByName(new QName("type")).getValue();
service = env.getService(type);
if(service != null){
- birthmark = service.buildBirthmark();
+ birthmark = service.getExtractor().createBirthmark();
bs.addBirthmark(birthmark);
}
else{
/**
* returns a extractor for the birthmark of this service.
*/
- public BirthmarkComparator getComparator(BirthmarkSpi service);
+ public BirthmarkComparator getComparator(BirthmarkService service);
}
/**
* returns a extractor for the birthmark of this service.
*/
- public BirthmarkExtractor getExtractor(BirthmarkSpi service);
+ public BirthmarkExtractor getExtractor(BirthmarkService service);
}
--- /dev/null
+package jp.sourceforge.stigmata.spi;
+
+import jp.sourceforge.stigmata.BirthmarkComparator;
+import jp.sourceforge.stigmata.BirthmarkExtractor;
+import jp.sourceforge.stigmata.BirthmarkPreprocessor;
+
+/**
+ * Birthmark service provider interface.
+ *
+ * @author Haruaki TAMADA
+ */
+public interface BirthmarkService{
+ /**
+ * returns a type of the birthmark this service provides.
+ */
+ public String getType();
+
+ /**
+ * returns a description of the birthmark this service provides.
+ */
+ public String getDescription();
+
+ public BirthmarkPreprocessor getPreprocessor();
+
+ /**
+ * returns a extractor for the birthmark of this service.
+ */
+ public BirthmarkExtractor getExtractor();
+
+ /**
+ * returns a comparator for the birthmark of this service.
+ */
+ public BirthmarkComparator getComparator();
+
+ public boolean isExperimental();
+
+ public boolean isUserDefined();
+}
+
+++ /dev/null
-package jp.sourceforge.stigmata.spi;
-
-import java.util.Locale;
-
-import jp.sourceforge.stigmata.Birthmark;
-import jp.sourceforge.stigmata.BirthmarkComparator;
-import jp.sourceforge.stigmata.BirthmarkElement;
-import jp.sourceforge.stigmata.BirthmarkExtractor;
-import jp.sourceforge.stigmata.BirthmarkPreprocessor;
-
-/**
- * Birthmark service provider interface.
- *
- * @author Haruaki TAMADA
- */
-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.
- */
- @Override
- public String getDescription(Locale locale);
-
- /**
- * returns a localized description of the birthmark in default locale.
- */
- @Override
- public String getDescription();
-
- public String getExtractorClassName();
-
- public Birthmark buildBirthmark();
-
- public BirthmarkElement buildBirthmarkElement(String elementValue);
-
- public BirthmarkPreprocessor getPreprocessor();
-
- public String getPreprocessorClassName();
-
- /**
- * 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 isExperimental();
-
- public boolean isUserDefined();
-
-}
-
--- /dev/null
+package jp.sourceforge.stigmata.spi;\r
+\r
+import java.io.Serializable;\r
+\r
+import jp.sourceforge.stigmata.BirthmarkComparator;\r
+import jp.sourceforge.stigmata.BirthmarkExtractor;\r
+import jp.sourceforge.stigmata.BirthmarkPreprocessor;\r
+\r
+public class ReflectedBirthmarkService implements BirthmarkService, Serializable{\r
+ private static final long serialVersionUID = 4090172591560046236L;\r
+\r
+ private String type;\r
+ private String description;\r
+ private String extractorClass;\r
+ private String comparatorClass;\r
+ private String preprocessorClass;\r
+\r
+ private transient BirthmarkExtractor extractor;\r
+ private transient BirthmarkComparator comparator;\r
+ private transient BirthmarkPreprocessor preprocessor;\r
+\r
+ public ReflectedBirthmarkService(String type, String description,\r
+ String extractorClass, String comparatorClass){\r
+ this(type, description, extractorClass, comparatorClass, null);\r
+ }\r
+\r
+ /**\r
+ * \r
+ * @param type\r
+ * @param description\r
+ * @param extractorClass\r
+ * @param comparatorClass\r
+ * @param preprocessorClass\r
+ * @throws NullPointerException one of type, extractorClass, and comparatorClass is null. \r
+ */\r
+ public ReflectedBirthmarkService(String type, String description,\r
+ String extractorClass, String comparatorClass, String preprocessorClass){\r
+ if(type == null || extractorClass == null || comparatorClass == null){\r
+ throw new NullPointerException();\r
+ }\r
+ this.type = type;\r
+ this.description = description;\r
+ this.extractorClass = extractorClass;\r
+ this.comparatorClass = comparatorClass;\r
+ this.preprocessorClass = preprocessorClass;\r
+ }\r
+\r
+ @Override\r
+ public String getType(){\r
+ return type;\r
+ }\r
+\r
+ @Override\r
+ public String getDescription(){\r
+ return description;\r
+ }\r
+\r
+ @Override\r
+ public synchronized BirthmarkPreprocessor getPreprocessor(){\r
+ if(preprocessor == null && preprocessorClass != null){\r
+ preprocessor = instantiateClass(preprocessorClass, BirthmarkPreprocessor.class);\r
+ }\r
+ return preprocessor;\r
+ }\r
+\r
+ private <T> T instantiateClass(String name, Class<T> type){\r
+ try{\r
+ Class<? extends T> targetClass = Class.forName(name).asSubclass(type);\r
+ return targetClass.newInstance();\r
+ } catch(Exception e){\r
+ }\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public BirthmarkExtractor getExtractor(){\r
+ if(extractor == null){\r
+ extractor = instantiateClass(extractorClass, BirthmarkExtractor.class);\r
+ }\r
+ return extractor;\r
+ }\r
+\r
+ @Override\r
+ public synchronized BirthmarkComparator getComparator(){\r
+ if(comparator == null){\r
+ comparator = instantiateClass(comparatorClass, BirthmarkComparator.class);\r
+ }\r
+ return comparator;\r
+ }\r
+\r
+ @Override\r
+ public boolean isExperimental(){\r
+ return true;\r
+ }\r
+\r
+ @Override\r
+ public boolean isUserDefined(){\r
+ return true;\r
+ }\r
+\r
+}\r
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.stigmata.spi.BirthmarkService;
+import jp.sourceforge.stigmata.spi.ReflectedBirthmarkService;
import jp.sourceforge.talisman.i18n.Messages;
/**
private JList serviceList;
private JButton newService;
private JButton removeService;
- private List<BirthmarkSpi> addedService = new ArrayList<BirthmarkSpi>();
+ private List<BirthmarkService> addedService = new ArrayList<BirthmarkService>();
private List<BirthmarkServiceListener> listeners = new ArrayList<BirthmarkServiceListener>();
public BirthmarkDefinitionPane(StigmataFrame stigmata){
}
public void reset(){
- for(BirthmarkSpi service: addedService){
+ for(BirthmarkService service: addedService){
model.removeElement(service);
}
}
public void updateEnvironment(BirthmarkEnvironment environment){
- for(BirthmarkSpi service: addedService){
+ for(BirthmarkService service: addedService){
if(environment.getService(service.getType()) == null){
- if(service instanceof BirthmarkService){
- ((BirthmarkService)service).setBirthmarkEnvironment(environment);
- }
environment.addService(service);
}
}
information.initData();
model.addElement(stigmata.getMessages().get("newservice.definition.label"));
- for(BirthmarkSpi service: stigmata.getEnvironment().findServices()){
+ for(BirthmarkService service: stigmata.getEnvironment().findServices()){
model.addElement(service);
}
}
private void removeService(){
int index = serviceList.getSelectedIndex();
if(index > 0){
- BirthmarkSpi service = (BirthmarkSpi)model.getElementAt(index);
+ BirthmarkService service = (BirthmarkService)model.getElementAt(index);
if(service != null && service.isUserDefined()){
model.remove(index);
for(BirthmarkServiceListener listener: listeners){
private void listValueChanged(ListSelectionEvent e){
int index = serviceList.getSelectedIndex();
if(index > 0){
- BirthmarkSpi service = (BirthmarkSpi)model.getElementAt(index);
+ BirthmarkService service = (BirthmarkService)model.getElementAt(index);
if(service != null){
information.setService(service);
}
private void updateView(){
int index = serviceList.getSelectedIndex();
ListModel model = serviceList.getModel();
- BirthmarkSpi service = null;
+ BirthmarkService service = null;
if(index > 0){
- service = (BirthmarkSpi)model.getElementAt(index);
+ service = (BirthmarkService)model.getElementAt(index);
}
newService.setEnabled(
(index <= 0 || service.isUserDefined()) &&
}
private boolean isAvailableServiceName(String name){
- for(BirthmarkSpi service: addedService){
+ for(BirthmarkService service: addedService){
if(service.getType().equals(name)){
return false;
}
private StigmataFrame stigmata;
private BirthmarkDefinitionPane thisPane;
private JTextField type;
- private JTextField displayType;
private JTextArea description;
private JComboBox extractor;
private JComboBox comparator;
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);
+ BirthmarkService service = new ReflectedBirthmarkService(
+ type.getText(), description.getText(),
+ extractor.getSelectedItem().toString(),
+ comparator.getSelectedItem().toString()
+ );
return service;
}
public void clear(){
type.setText("");
- displayType.setText("");
description.setText("");
extractor.getModel().setSelectedItem(null);
comparator.getModel().setSelectedItem(null);
BirthmarkEnvironment environment = stigmata.getEnvironment();
boolean flag = newType.length() > 0
- && displayType.getText().length() > 0
&& extractorClass.length() > 0
&& comparatorClass.length() > 0;
return flag;
}
- public void setService(BirthmarkSpi service){
+ public void setService(BirthmarkService service){
type.setText(service.getType());
- displayType.setText(service.getDisplayType());
- description.setText(service.getDefaultDescription());
- selectComboBoxItem(extractor, service.getExtractorClassName());
- selectComboBoxItem(comparator, service.getComparatorClassName());
+ description.setText(service.getDescription());
+ selectComboBoxItem(extractor, service.getExtractor().getClass().getName());
+ selectComboBoxItem(comparator, service.getComparator().getClass().getName());
userDefined.setSelected(service.isUserDefined());
experimental.setSelected(service.isExperimental());
private void initLayouts(){
Messages messages = stigmata.getMessages();
type = new JTextField();
- displayType = new JTextField();
extractor = new JComboBox();
comparator = new JComboBox();
experimental = new JCheckBox(messages.get("define.experimental.label"));
description = new JTextArea();
JScrollPane scroll = new JScrollPane(description);
type.setColumns(10);
- displayType.setColumns(20);
description.setColumns(40);
description.setRows(10);
JPanel typePane = new JPanel(new BorderLayout());
JPanel displayTypePane = new JPanel(new BorderLayout());
typePane.add(type, BorderLayout.CENTER);
- displayTypePane.add(displayType, BorderLayout.CENTER);
JPanel box1 = new JPanel(new BorderLayout());
box1.add(typePane, BorderLayout.WEST);
};
type.getDocument().addDocumentListener(listener);
- displayType.getDocument().addDocumentListener(listener);
description.getDocument().addDocumentListener(listener);
ItemListener itemListener = new ItemListener(){
@Override
import javax.swing.JPanel;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
import jp.sourceforge.talisman.i18n.Messages;
/**
return selectedServices.toArray(new String[selectedServices.size()]);
}
- public BirthmarkSpi getService(String type){
+ public BirthmarkService getService(String type){
BirthmarkSelection elem = services.get(type);
if(elem != null){
return elem.getService();
String[] serviceArray = new String[services.size()];
int index = 0;
for(String key: services.keySet()){
- BirthmarkSpi service = services.get(key).getService();
+ BirthmarkService service = services.get(key).getService();
serviceArray[index] = service.getType();
index++;
}
fireEvent();
}
- public void select(BirthmarkSpi service, boolean flag){
+ public void select(BirthmarkService service, boolean flag){
select(service.getType(), flag);
}
}
@Override
- public void serviceAdded(BirthmarkSpi service){
+ public void serviceAdded(BirthmarkService service){
if(services.get(service.getType()) == null){
BirthmarkSelection elem = new BirthmarkSelection(service);
selectedServices.add(service.getType());
}
@Override
- public void serviceRemoved(BirthmarkSpi service){
+ public void serviceRemoved(BirthmarkService service){
BirthmarkSelection elem = services.get(service);
if(elem != null){
selectedServices.remove(service);
}
private void initServices(){
- BirthmarkSpi[] serviceArray = stigmata.getEnvironment().getServices();
+ BirthmarkService[] serviceArray = stigmata.getEnvironment().getServices();
services = new LinkedHashMap<String, BirthmarkSelection>();
- for(BirthmarkSpi service: serviceArray){
+ for(BirthmarkService service: serviceArray){
BirthmarkSelection elem = new BirthmarkSelection(service);
services.put(service.getType(), elem);
}
import java.io.Serializable;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
* @author Haruaki TAMADA
class BirthmarkSelection implements Serializable{
private static final long serialVersionUID = -3244323970546344L;
- private BirthmarkSpi service;
+ private BirthmarkService service;
private boolean selected = true;
- public BirthmarkSelection(BirthmarkSpi service){
+ public BirthmarkSelection(BirthmarkService service){
this.service = service;
}
- public BirthmarkSpi getService(){
+ public BirthmarkService getService(){
return service;
}
for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){
final BirthmarkSelection elem = i.next();
if(elem.isVisible(isExperimentalMode())){
- JCheckBox check = new JCheckBox(elem.getService().getDisplayType());
+ JCheckBox check = new JCheckBox(elem.getService().getType());
check.setSelected(elem.isSelected());
check.addActionListener(new ActionListener(){
@Override
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
*
}
@Override
- public void serviceRemoved(BirthmarkSpi service){
+ public void serviceRemoved(BirthmarkService service){
BirthmarkSelection elem = getSelection(service.getType());
model.removeElement(elem);
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean forcus){
BirthmarkSelection elem = (BirthmarkSelection)value;
- setText(elem.getService().getDisplayType());
+ setText(elem.getService().getType());
setToolTipText(elem.getService().getDescription());
setSelected(elem.isSelected());
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
*
@Override
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());
+ if(value instanceof BirthmarkService){
+ BirthmarkService service = (BirthmarkService)value;
+ leftLabel.setText(service.getType());
rightLabel.setText("(" + service.getType() + ")");
}
else{
package jp.sourceforge.stigmata.ui.swing;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
/**
*
* @author Haruaki Tamada
*/
public interface BirthmarkServiceListener{
- public void serviceAdded(BirthmarkSpi service);
+ public void serviceAdded(BirthmarkService service);
- public void serviceRemoved(BirthmarkSpi service);
+ public void serviceRemoved(BirthmarkService service);
}
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.BirthmarkService;
import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
import jp.sourceforge.stigmata.ui.swing.BirthmarkServiceListCellRenderer;
import jp.sourceforge.stigmata.ui.swing.BirthmarkServiceListener;
}
@Override
- public void serviceAdded(BirthmarkSpi service){
+ public void serviceAdded(BirthmarkService service){
pane.serviceAdded(service);
}
@Override
- public void serviceRemoved(BirthmarkSpi service){
+ public void serviceRemoved(BirthmarkService service){
pane.serviceRemoved(service);
}
}
@Override
- public void serviceAdded(BirthmarkSpi service){
+ public void serviceAdded(BirthmarkService service){
birthmarks.addItem(service);
}
@Override
- public void serviceRemoved(BirthmarkSpi service){
+ public void serviceRemoved(BirthmarkService service){
birthmarks.removeItem(service);
}
}
private String getBirthmarkType(){
- BirthmarkSpi service = (BirthmarkSpi)birthmarks.getSelectedItem();
+ BirthmarkService service = (BirthmarkService)birthmarks.getSelectedItem();
if(service != null){
return service.getType();
}
import javax.swing.JPanel;
import jp.sourceforge.stigmata.ComparisonPairFilter;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
import jp.sourceforge.stigmata.ui.swing.BirthmarkServiceListener;
import jp.sourceforge.stigmata.ui.swing.GUIUtility;
ComparisonPairFilterPane pane = service.createComponent(stigmata, service.getComparisonPairFilterService());
if(pane instanceof BirthmarkServiceListener){
- for(BirthmarkSpi bs: stigmata.getEnvironment().getServices()){
+ for(BirthmarkService bs: stigmata.getEnvironment().getServices()){
((BirthmarkServiceListener)pane).serviceAdded(bs);
}
stigmata.addBirthmarkServiceListener((BirthmarkServiceListener)pane);
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 jp.sourceforge.stigmata.spi.BirthmarkService;
+import jp.sourceforge.stigmata.spi.ReflectedBirthmarkService;
import org.apache.commons.beanutils.BeanUtils;
private void exportServices(PrintWriter out) throws IOException{
out.println(" <birthmark-services>");
- for(BirthmarkSpi service: environment.getServices()){
+ for(BirthmarkService service: environment.getServices()){
if(service.isExperimental() && 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());
+ if(service instanceof ReflectedBirthmarkService){
+ out.printf(" <description>%s</description>%n", service.getDescription());
+ out.printf(" <extractor>%s</extractor>%n", service.getExtractor().getClass().getName());
+ out.printf(" <comparator>%s</comparator>%n", service.getComparator().getClass().getName());
+ }
out.println(" </birthmark-service>");
}
}
import jp.sourceforge.stigmata.ComparisonPairFilter;
import jp.sourceforge.stigmata.ComparisonPairFilterSet;
import jp.sourceforge.stigmata.Stigmata;
-import jp.sourceforge.stigmata.birthmarks.BirthmarkService;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
+import jp.sourceforge.stigmata.spi.ReflectedBirthmarkService;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
private static class Handler extends DefaultHandler{
private BirthmarkEnvironment environment;
private WellknownClassManager manager;
- private BirthmarkService service;
+ private Map<String, String> serviceMap;
private ComparisonPairFilterSet filter;
private Part part;
private boolean exclude;
}
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;
}
else if(part == Part.CLASSPATH && qname.equals("classpath")){
try{
- environment.getClasspathContext().addClasspath(
- new URL(value));
+ 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);
+ if(serviceMap == null){
+ serviceMap = new HashMap<String, String>();
+ }
+ serviceMap.put(qname, value);
}
else if(part == Part.FILTER_SET){
if(qname.equals("name")){
@Override
public void endElement(String uri, String localname, String qname){
if(part == Part.SERVICES && qname.equals("birthmark-service")){
+ BirthmarkService service = new ReflectedBirthmarkService(
+ serviceMap.get("type"),
+ serviceMap.get("description"),
+ serviceMap.get("extractor"),
+ serviceMap.get("comparator")
+ );
environment.addService(service);
- service = null;
}
else if(part == Part.FILTER_DEFINITION && qname.equals("filter")){
ComparisonPairFilter f = environment.getFilterManager().buildFilter(
package jp.sourceforge.stigmata;
-import jp.sourceforge.stigmata.spi.BirthmarkSpi;
+import jp.sourceforge.stigmata.spi.BirthmarkService;
import org.junit.Assert;
import org.junit.Before;
@Test
public void checkSmcBirthmarkService() throws Exception{
- BirthmarkSpi service = environment.getService("smc");
+ BirthmarkService service = environment.getService("smc");
Assert.assertNotNull(service.getComparator());
Assert.assertNotNull(service.getExtractor());
@Test
public void checkCvfvBirthmarkService() throws Exception{
- BirthmarkSpi service = environment.getService("cvfv");
+ BirthmarkService service = environment.getService("cvfv");
Assert.assertNotNull(service.getComparator());
Assert.assertNotNull(service.getExtractor());
@Test
public void checkIsBirthmarkService() throws Exception{
- BirthmarkSpi service = environment.getService("is");
+ BirthmarkService service = environment.getService("is");
Assert.assertNotNull(service.getComparator());
Assert.assertNotNull(service.getExtractor());
@Test
public void checkUcBirthmarkService() throws Exception{
- BirthmarkSpi service = environment.getService("uc");
+ BirthmarkService service = environment.getService("uc");
Assert.assertNotNull(service.getComparator());
Assert.assertNotNull(service.getExtractor());
@Test
public void checkKgramBirthmarkService() throws Exception{
- BirthmarkSpi service = environment.getService("kgram");
+ BirthmarkService service = environment.getService("kgram");
Assert.assertNotNull(service.getComparator());
Assert.assertNotNull(service.getExtractor());