View Javadoc

1   package net.sourceforge.pmd;
2   
3   import java.util.List;
4   import java.util.Map;
5   import java.util.Set;
6   
7   /**
8    * 
9    * @author Brian Remedios
10   */
11  public interface PropertySource {
12  
13      /**
14       * Define a new property via a PropertyDescriptor.
15       *
16       * @param propertyDescriptor The property descriptor.
17       * @throws IllegalArgumentException If there is already a property defined the same name.
18       */
19      void definePropertyDescriptor(PropertyDescriptor<?> propertyDescriptor) throws IllegalArgumentException;
20  
21      /**
22       * Get the PropertyDescriptor for the given property name.
23       *
24       * @param name The name of the property.
25       * @return The PropertyDescriptor for the named property, <code>null</code> if there is no such property defined.
26       */
27      PropertyDescriptor<?> getPropertyDescriptor(String name);
28  
29      /**
30       * Get the PropertyDescriptors for all defined properties.  The properties
31       * are returned sorted by UI order.
32       *
33       * @return The PropertyDescriptors in UI order.
34       */
35      List<PropertyDescriptor<?>> getPropertyDescriptors();
36  
37      /**
38       * Get the typed value for the given property.
39       *
40       * @param <T> The underlying type of the property descriptor.
41       * @param propertyDescriptor The property descriptor.
42       * @return The property value.
43       */
44      <T> T getProperty(PropertyDescriptor<T> propertyDescriptor);
45  
46      /**
47       * Set the property value specified (will be type-checked)
48       *
49       * @param <T> The underlying type of the property descriptor.
50       * @param propertyDescriptor The property descriptor.
51       * @param value The value to set.
52       */
53      <T> void setProperty(PropertyDescriptor<T> propertyDescriptor, T value);
54  
55      /**
56       * Returns all the current property values for the receiver or an
57       * immutable empty map if none are specified.
58       */
59      Map<PropertyDescriptor<?>, Object> getPropertiesByPropertyDescriptor();
60  
61      /**
62       * Returns whether this Rule has the specified PropertyDescriptor.
63       *
64       * @param descriptor The PropertyDescriptor for which to check.
65       * @return boolean <code>true</code> if the descriptor is present, <code>false</code> otherwise.
66       */
67      boolean hasDescriptor(PropertyDescriptor<?> descriptor);
68  
69      /**
70       * Returns whether this Rule uses default values for properties.
71       * @return boolean <code>true</code> if the properties all have default values, <code>false</code> otherwise.
72       */
73      boolean usesDefaultValues();
74  
75      /**
76       * Clears out any user-specified value for the property allowing it to use the default
77       * value in the descriptor.
78       * 
79       * @param desc
80       */
81      void useDefaultValueFor(PropertyDescriptor<?> desc);
82  	
83      /**
84       * Return the properties that are effectively ignored due to the configuration
85       * of the rule and values held by other properties. This can be used to disable
86       * corresponding widgets in a UI.
87       *
88       */
89      Set<PropertyDescriptor<?>> ignoredProperties();
90      
91      /**
92       * Returns a description of why the receiver may be dysfunctional. Usually due to missing property
93       * values or some kind of conflict between values. Returns null if the receiver is ok.
94       * 
95       * @return String
96       */
97      String dysfunctionReason();
98  }