KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sourceforge > pmd > properties > AbstractPMDProperty


1 package net.sourceforge.pmd.properties;
2
3 import net.sourceforge.pmd.PropertyDescriptor;
4 import net.sourceforge.pmd.Rule;
5
6
7 /**
8  *
9  * @author Brian Remedios
10  * @version $Revision$
11  */

12 public abstract class AbstractPMDProperty implements PropertyDescriptor {
13
14     private String JavaDoc name;
15     private String JavaDoc description;
16     private Object JavaDoc defaultValue;
17     private boolean isRequired = false;
18     private int maxValueCount = 1;
19     private float uiOrder;
20     
21     protected char multiValueDelimiter = '|';
22     
23     /**
24      * Constructor for AbstractPMDProperty.
25      * @param theName String
26      * @param theDescription String
27      * @param theDefault Object
28      * @param theUIOrder float
29      */

30     protected AbstractPMDProperty(String JavaDoc theName, String JavaDoc theDescription, Object JavaDoc theDefault, float theUIOrder) {
31         name = theName;
32         description = theDescription;
33         defaultValue = theDefault;
34         uiOrder = theUIOrder;
35     }
36     
37     /**
38      * Method multiValueDelimiter.
39      * @param aDelimiter char
40      */

41     protected void multiValueDelimiter(char aDelimiter) {
42         multiValueDelimiter = aDelimiter;
43     }
44     
45     /**
46      * Method multiValueDelimiter.
47      * @return char
48      * @see net.sourceforge.pmd.PropertyDescriptor#multiValueDelimiter()
49      */

50     public char multiValueDelimiter() {
51         return multiValueDelimiter;
52     }
53     
54     /**
55      * Method name.
56      * @return String
57      * @see net.sourceforge.pmd.PropertyDescriptor#name()
58      */

59     public String JavaDoc name() {
60         return name;
61     }
62
63     /**
64      * Method description.
65      * @return String
66      * @see net.sourceforge.pmd.PropertyDescriptor#description()
67      */

68     public String JavaDoc description() {
69         return description;
70     }
71
72     /**
73      *
74      * @return Object
75      * @see net.sourceforge.pmd.PropertyDescriptor#defaultValue()
76      */

77     public Object JavaDoc defaultValue() {
78         return defaultValue;
79     }
80     
81     /**
82      * Method maxValueCount.
83      * @return int
84      * @see net.sourceforge.pmd.PropertyDescriptor#maxValueCount()
85      */

86     public int maxValueCount() {
87         return maxValueCount;
88     }
89     
90     /**
91      * Method maxValueCount.
92      * @param theCount int
93      * @see net.sourceforge.pmd.PropertyDescriptor#maxValueCount()
94      */

95     protected void maxValueCount(int theCount) {
96         maxValueCount = theCount;
97     }
98     
99     /**
100      * Method isRequired.
101      * @return boolean
102      * @see net.sourceforge.pmd.PropertyDescriptor#isRequired()
103      */

104     public boolean isRequired() {
105         return isRequired;
106     }
107     
108     /**
109      * Method uiOrder.
110      * @return float
111      * @see net.sourceforge.pmd.PropertyDescriptor#uiOrder()
112      */

113     public float uiOrder() {
114         return uiOrder;
115     }
116     
117     /**
118      * Return the value as a string that can be easily recognized and parsed
119      * when we see it again.
120      *
121      * @param value Object
122      * @return String
123      */

124     protected String JavaDoc asString(Object JavaDoc value) {
125         return value == null ? "" : value.toString();
126     }
127     
128     
129     /**
130      * Method asDelimitedString.
131      * @param values Object
132      * @return String
133      * @see net.sourceforge.pmd.PropertyDescriptor#asDelimitedString(Object)
134      */

135     public String JavaDoc asDelimitedString(Object JavaDoc values) {
136         
137         if (values == null) return "";
138         
139         if (values instanceof Object JavaDoc[]) {
140             Object JavaDoc[] valueSet = (Object JavaDoc[])values;
141             if (valueSet.length == 0) return "";
142             if (valueSet.length == 1) return asString(valueSet[0]);
143             
144             StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
145             sb.append(asString(valueSet[0]));
146             for (int i=1; i<valueSet.length; i++) {
147                 sb.append(multiValueDelimiter);
148                 sb.append(asString(valueSet[i]));
149             }
150             return sb.toString();
151             }
152
153         return asString(values);
154     }
155     
156     /**
157      * Method compareTo.
158      * @param otherProperty Object
159      * @return int
160      * @see java.lang.Comparable#compareTo(Object)
161      */

162     public int compareTo(Object JavaDoc otherProperty) {
163         float otherOrder = ((PropertyDescriptor)otherProperty).uiOrder();
164         return (int) (otherOrder - uiOrder);
165     }
166     
167     /**
168      * Method errorFor.
169      * @param value Object
170      * @return String
171      * @see net.sourceforge.pmd.PropertyDescriptor#errorFor(Object)
172      */

173     public String JavaDoc errorFor(Object JavaDoc value) {
174         
175         String JavaDoc typeError = typeErrorFor(value);
176         if (typeError != null) return typeError;
177         return valueErrorFor(value);
178     }
179     
180     /**
181      * Method valueErrorFor.
182      * @param value Object
183      * @return String
184      */

185     protected String JavaDoc valueErrorFor(Object JavaDoc value) {
186         // override as required
187
return null;
188     }
189     
190     /**
191      * Method isArray.
192      * @param value Object
193      * @return boolean
194      */

195     protected boolean isArray(Object JavaDoc value) {
196         return value != null && value.getClass().getComponentType() != null;
197     }
198     
199     /**
200      * Method typeErrorFor.
201      * @param value Object
202      * @return String
203      */

204     protected String JavaDoc typeErrorFor(Object JavaDoc value) {
205         
206         if (value == null && !isRequired) return null;
207         
208         if (maxValueCount > 1) {
209             if (!isArray(value)) {
210                 return "Value is not an array of type: " + type();
211             }
212             
213             Class JavaDoc arrayType = value.getClass().getComponentType();
214             if (arrayType == null || !arrayType.isAssignableFrom(type())) {
215                 return "Value is not an array of type: " + type();
216             }
217             return null;
218         }
219         
220         if (!type().isAssignableFrom(value.getClass())) {
221             return "" + value + " is not an instance of " + type();
222         }
223
224         return null;
225     }
226     
227     /**
228      * Method propertyErrorFor.
229      * @param rule Rule
230      * @return String
231      * @see net.sourceforge.pmd.PropertyDescriptor#propertyErrorFor(Rule)
232      */

233     public String JavaDoc propertyErrorFor(Rule rule) {
234         String JavaDoc strValue = rule.getStringProperty(name());
235         if (strValue == null && !isRequired()) return null;
236         Object JavaDoc realValue = valueFrom(strValue);
237         return errorFor(realValue);
238     }
239     
240     /**
241      * Method choices.
242      * @return Object[][]
243      * @see net.sourceforge.pmd.PropertyDescriptor#choices()
244      */

245     public Object JavaDoc[][] choices() {
246         return null;
247     }
248     
249     /**
250      * Method preferredRowCount.
251      * @return int
252      * @see net.sourceforge.pmd.PropertyDescriptor#preferredRowCount()
253      */

254     public int preferredRowCount() {
255         return 1;
256     }
257     
258     /**
259      * Method areEqual.
260      * @param value Object
261      * @param otherValue Object
262      * @return boolean
263      */

264     public static final boolean areEqual(Object JavaDoc value, Object JavaDoc otherValue) {
265         if (value == otherValue) return true;
266         if (value == null) return false;
267         if (otherValue == null) return false;
268
269         return value.equals(otherValue);
270     }
271 }
272
Popular Tags