AbstractPMDProperty xref

View Javadoc
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	name;
15 	private String	description;
16 	private Object 	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 theName, String theDescription, Object 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 name() {
60 		return name;
61 	}
62 
63 	/**
64 	 * Method description.
65 	 * @return String
66 	 * @see net.sourceforge.pmd.PropertyDescriptor#description()
67 	 */
68 	public String description() {
69 		return description;
70 	}
71 
72 	/**
73 	 * 
74 	 * @return Object
75 	 * @see net.sourceforge.pmd.PropertyDescriptor#defaultValue()
76 	 */
77 	public Object 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 asString(Object 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 asDelimitedString(Object values) {
136 		
137 		if (values == null) return "";
138 		
139 		if (values instanceof Object[]) {
140 			Object[] valueSet = (Object[])values;
141 			if (valueSet.length == 0) return "";
142 			if (valueSet.length == 1) return asString(valueSet[0]);
143 			
144 			StringBuffer sb = new StringBuffer();
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(PropertyDescriptor otherProperty) {
163 		float otherOrder = 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 errorFor(Object value) {
174 		
175 		String 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 valueErrorFor(Object 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 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 typeErrorFor(Object 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<?> 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 propertyErrorFor(Rule rule) {
234 		String strValue = rule.getStringProperty(name());
235 		if (strValue == null && !isRequired()) return null;
236 		Object 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[][] 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 value, Object 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 }

AltStyle によって変換されたページ (->オリジナル) /