OSDN Git Service

cabbbb33eac8dfc3916202f9c8cf97140e5f903e
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / birthmarks / BirthmarkService.java
1 package jp.sourceforge.stigmata.birthmarks;
2
3 /*
4  * $Id$
5  */
6
7 import java.lang.reflect.Constructor;
8
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;
13
14 /**
15  * Service provider interface for birthmarks which are defined in
16  * configuration files.
17  *
18  * @author Haruaki TAMADA
19  * @version $Revision$ 
20  */
21 public class BirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{
22     private Class<? extends BirthmarkExtractor> extractorClass;
23     private Class<? extends BirthmarkComparator> comparatorClass;
24     private String type;
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;
31
32     public BirthmarkService(BirthmarkEnvironment environment){
33         this.environment = environment;
34     }
35
36     public BirthmarkService(){
37     }
38
39     public void setBirthmarkEnvironment(BirthmarkEnvironment environment){
40         this.environment = environment;
41     }
42
43     public void setExtractorClassName(String extractor){
44         try{
45             Class<?> c;
46             if(environment == null){
47                 c = Class.forName(extractor);
48             }
49             else{
50                 c = environment.getClasspathContext().findClass(extractor);
51             }
52             extractorClass = c.asSubclass(BirthmarkExtractor.class);
53             extractorObject = null;
54         } catch(ClassNotFoundException e){
55             e.printStackTrace();
56         }
57     }
58
59     public void setComparatorClassName(String comparator){
60         try{
61             Class<?> c;
62             if(environment == null){
63                 c = Class.forName(comparator);
64             }
65             else{
66                 c = environment.getClasspathContext().findClass(comparator);
67             }
68             comparatorClass = c.asSubclass(BirthmarkComparator.class);
69             comparatorObject = null;
70         } catch(ClassNotFoundException e){
71             e.printStackTrace();
72         }
73     }
74
75     public void setType(String type){
76         this.type = type;
77     }
78
79     /**
80      * returns a type of the birthmark this service provides.
81      */
82     @Override
83     public String getType(){
84         return type;
85     }
86
87     public void setDisplayType(String displayType){
88         this.displayType = displayType;
89     }
90
91     @Override
92     public String getDisplayType(){
93         return displayType;
94     }
95
96     public void setDescription(String description){
97         this.description = description;
98     }
99
100     @Override
101     public String getDescription(){
102         String desc = description;
103         if(description == null){
104             desc = "";
105         }
106         return desc;
107     }
108
109     /**
110      * returns a description of the birthmark this service provides.
111      */
112     @Override
113     public String getDefaultDescription(){
114         return description;
115     }
116
117     @Override
118     public String getExtractorClassName(){
119         return extractorClass.getName();
120     }
121
122     /**
123      * returns a extractor for the birthmark of this service.
124      */
125     @Override
126     public BirthmarkExtractor getExtractor(){
127         if(extractorObject == null){
128             try{
129                 Constructor<? extends BirthmarkExtractor> c = extractorClass.getConstructor(BirthmarkSpi.class);
130                 extractorObject = c.newInstance(this);
131             } catch(Exception e){
132                 e.printStackTrace();
133             }
134         }
135         return extractorObject;
136     }
137
138     @Override
139     public String getComparatorClassName(){
140         return comparatorClass.getName();
141     }
142
143     /**
144      * returns a comparator for the birthmark of this service.
145      */
146     @Override
147     public BirthmarkComparator getComparator(){
148         if(comparatorObject == null){
149             try{
150                 Constructor<? extends BirthmarkComparator> c = comparatorClass.getConstructor(BirthmarkSpi.class);
151                 comparatorObject = c.newInstance(this);
152             } catch(Exception e){
153                 e.printStackTrace();
154             }
155         }
156         return comparatorObject;
157     }
158
159     @Override
160     public boolean isUserDefined(){
161         return userDefined;
162     }
163
164     public void setUserDefined(boolean userDefined){
165         this.userDefined = userDefined;
166     }
167 }
168