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  }