1 package jp.sourceforge.stigmata.birthmarks;
7 import java.lang.reflect.Constructor;
9 import jp.sourceforge.stigmata.BirthmarkComparator;
10 import jp.sourceforge.stigmata.BirthmarkEnvironment;
11 import jp.sourceforge.stigmata.BirthmarkExtractor;
12 import jp.sourceforge.stigmata.spi.BirthmarkSpi;
15 * Service provider interface for birthmarks which are defined in
16 * configuration files.
18 * @author Haruaki TAMADA
20 public class BirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{
21 private Class<? extends BirthmarkExtractor> extractorClass;
22 private Class<? extends BirthmarkComparator> comparatorClass;
24 private String displayType;
25 private String description;
26 private BirthmarkExtractor extractorObject;
27 private BirthmarkComparator comparatorObject;
28 private boolean userDefined = true;
29 private BirthmarkEnvironment environment;
31 public BirthmarkService(BirthmarkEnvironment environment){
32 this.environment = environment;
35 public BirthmarkService(){
38 public void setBirthmarkEnvironment(BirthmarkEnvironment environment){
39 this.environment = environment;
42 public void setExtractorClassName(String extractor){
45 if(environment == null){
46 c = Class.forName(extractor);
49 c = environment.getClasspathContext().findClass(extractor);
51 extractorClass = c.asSubclass(BirthmarkExtractor.class);
52 extractorObject = null;
53 } catch(ClassNotFoundException e){
58 public void setComparatorClassName(String comparator){
61 if(environment == null){
62 c = Class.forName(comparator);
65 c = environment.getClasspathContext().findClass(comparator);
67 comparatorClass = c.asSubclass(BirthmarkComparator.class);
68 comparatorObject = null;
69 } catch(ClassNotFoundException e){
74 public void setType(String type){
79 * returns a type of the birthmark this service provides.
82 public String getType(){
86 public void setDisplayType(String displayType){
87 this.displayType = displayType;
91 public String getDisplayType(){
95 public void setDescription(String description){
96 this.description = description;
100 public String getDescription(){
101 String desc = description;
102 if(description == null){
109 * returns a description of the birthmark this service provides.
112 public String getDefaultDescription(){
117 public String getExtractorClassName(){
118 return extractorClass.getName();
122 * returns a extractor for the birthmark of this service.
125 public BirthmarkExtractor getExtractor(){
126 if(extractorObject == null){
128 Constructor<? extends BirthmarkExtractor> c = extractorClass.getConstructor(BirthmarkSpi.class);
129 extractorObject = c.newInstance(this);
130 } catch(Exception e){
134 return extractorObject;
138 public String getComparatorClassName(){
139 return comparatorClass.getName();
143 * returns a comparator for the birthmark of this service.
146 public BirthmarkComparator getComparator(){
147 if(comparatorObject == null){
149 Constructor<? extends BirthmarkComparator> c = comparatorClass.getConstructor(BirthmarkSpi.class);
150 comparatorObject = c.newInstance(this);
151 } catch(Exception e){
155 return comparatorObject;
159 public boolean isUserDefined(){
163 public void setUserDefined(boolean userDefined){
164 this.userDefined = userDefined;