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
21 public class BirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{
22 private Class<? extends BirthmarkExtractor> extractorClass;
23 private Class<? extends BirthmarkComparator> comparatorClass;
25 private String displayType;
26 private String description;
27 private BirthmarkExtractor extractorObject;
28 private BirthmarkComparator comparatorObject;
29 private boolean userDefined = true;
30 private BirthmarkEnvironment environment;
32 public BirthmarkService(BirthmarkEnvironment environment){
33 this.environment = environment;
36 public BirthmarkService(){
39 public void setBirthmarkEnvironment(BirthmarkEnvironment environment){
40 this.environment = environment;
43 public void setExtractorClassName(String extractor){
46 if(environment == null){
47 c = Class.forName(extractor);
50 c = environment.getClasspathContext().findClass(extractor);
52 extractorClass = c.asSubclass(BirthmarkExtractor.class);
53 extractorObject = null;
54 } catch(ClassNotFoundException e){
59 public void setComparatorClassName(String comparator){
62 if(environment == null){
63 c = Class.forName(comparator);
66 c = environment.getClasspathContext().findClass(comparator);
68 comparatorClass = c.asSubclass(BirthmarkComparator.class);
69 comparatorObject = null;
70 } catch(ClassNotFoundException e){
75 public void setType(String type){
80 * returns a type of the birthmark this service provides.
83 public String getType(){
87 public void setDisplayType(String displayType){
88 this.displayType = displayType;
92 public String getDisplayType(){
96 public void setDescription(String description){
97 this.description = description;
101 public String getDescription(){
102 String desc = description;
103 if(description == null){
110 * returns a description of the birthmark this service provides.
113 public String getDefaultDescription(){
118 public String getExtractorClassName(){
119 return extractorClass.getName();
123 * returns a extractor for the birthmark of this service.
126 public BirthmarkExtractor getExtractor(){
127 if(extractorObject == null){
129 Constructor<? extends BirthmarkExtractor> c = extractorClass.getConstructor(BirthmarkSpi.class);
130 extractorObject = c.newInstance(this);
131 } catch(Exception e){
135 return extractorObject;
139 public String getComparatorClassName(){
140 return comparatorClass.getName();
144 * returns a comparator for the birthmark of this service.
147 public BirthmarkComparator getComparator(){
148 if(comparatorObject == null){
150 Constructor<? extends BirthmarkComparator> c = comparatorClass.getConstructor(BirthmarkSpi.class);
151 comparatorObject = c.newInstance(this);
152 } catch(Exception e){
156 return comparatorObject;
160 public boolean isUserDefined(){
164 public void setUserDefined(boolean userDefined){
165 this.userDefined = userDefined;