View Javadoc

1   /*
2    * Copyright 2012-2013 smartics, Kronseder & Reiner GmbH
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package de.smartics.properties.api.core.domain;
17  
18  import java.io.Serializable;
19  import java.util.List;
20  import java.util.Set;
21  
22  /**
23   * A registry for a set of property descriptors.
24   * <p>
25   * The typical usage of this class is to fetch a {@link PropertyDescriptor} by
26   * its (string) key.
27   * </p>
28   */
29  public interface PropertyDescriptorRegistry extends Serializable,
30      Iterable<PropertyDescriptor>
31  {
32    // ********************************* Fields *********************************
33  
34    // --- constants ------------------------------------------------------------
35  
36    // ****************************** Initializer *******************************
37  
38    // ****************************** Inner Classes *****************************
39  
40    // ********************************* Methods ********************************
41  
42    // --- get&set --------------------------------------------------------------
43  
44    // --- business -------------------------------------------------------------
45  
46    /**
47     * Adds the descriptors to the given declaring type.
48     *
49     * @param propertySetType the type that declares the property
50     *          {@code descriptors}.
51     * @param descriptors the descriptors to the given {@code propertySetType}.
52     * @throws NullPointerException if {@code propertySetType} or
53     *           {@code descriptors} is <code>null</code>.
54     * @throws DuplicatePropertyDeclarationsException if any of the descriptors
55     *           declare the same property.
56     */
57    void addDescriptors(Class<?> propertySetType,
58        List<PropertyDescriptor> descriptors) throws NullPointerException,
59      DuplicatePropertyDeclarationsException;
60  
61    /**
62     * Returns the list of mandatory properties.
63     * <p>
64     * Returns a copy that can be edited.
65     * </p>
66     *
67     * @return the list of mandatory properties.
68     */
69    List<PropertyDescriptor> createMandatoryProperties();
70  
71    /**
72     * Adds the given descriptor.
73     *
74     * @param propertySetType the property set type to add.
75     * @throws DuplicatePropertyDeclarationsException if any of the descriptors
76     *           declare the same property.
77     */
78    void addDescriptors(Class<?> propertySetType)
79      throws DuplicatePropertyDeclarationsException;
80  
81    /**
82     * Adds the given descriptors.
83     *
84     * @param propertySetTypes the array of property set types to add.
85     * @throws DuplicatePropertyDeclarationsException if any of the descriptors
86     *           declare the same property.
87     */
88    void addDescriptors(Class<?>... propertySetTypes)
89      throws DuplicatePropertyDeclarationsException;
90  
91    /**
92     * Adds the given descriptors.
93     *
94     * @param propertySetTypes the array of property set types to add.
95     * @throws DuplicatePropertyDeclarationsException if any of the descriptors
96     *           declare the same property.
97     */
98    void addDescriptors(Set<Class<?>> propertySetTypes)
99      throws DuplicatePropertyDeclarationsException;
100 
101   /**
102    * Returns the descriptors for the given descriptor type.
103    *
104    * @param propertySet the type for descriptors to fetch.
105    * @return the list of descriptors registered. May be the empty list, but is
106    *         never <code>null</code>.
107    */
108   List<? extends PropertyDescriptor> get(Class<?> propertySet);
109 
110   /**
111    * Returns the descriptor for the given key or <code>null</code> if no
112    * descriptor is registered for the given key.
113    *
114    * @param key the key whose descriptor is requested.
115    * @return the descriptor to the key or <code>null</code>.
116    */
117   PropertyDescriptor get(String key);
118 
119   /**
120    * Returns the property context for the given property descriptor.
121    *
122    * @param descriptor the descriptor whose context is requested.
123    * @return the requested context.
124    * @throws ConfigException if the context for the descriptor cannot be found.
125    */
126   PropertiesContext getContext(PropertyDescriptor descriptor)
127     throws ConfigException;
128 
129   /**
130    * Returns the property context for the given property declaring type.
131    *
132    * @param declaringType the type whose context is requested.
133    * @return the requested context.
134    * @throws ConfigException if the context for the descriptor cannot be found.
135    */
136   PropertiesContext getContext(Class<?> declaringType) throws ConfigException;
137 
138   /**
139    * Returns the URL to the documentation report for the given property
140    * descriptor.
141    *
142    * @param descriptor the descriptor whose documentation is requested.
143    * @return the URL to the documentation.
144    * @throws ConfigException if the descriptors context cannot be found.
145    */
146   String getDocumentationUrl(PropertyDescriptor descriptor)
147     throws ConfigException;
148 
149   /**
150    * Returns the path to the context information for the given property
151    * descriptor.
152    *
153    * @param descriptor the descriptor whose context information is requested.
154    * @return the URL to the context information.
155    * @throws ConfigException if the descriptors context cannot be found.
156    */
157   String getMetaInfPath(PropertyDescriptor descriptor) throws ConfigException;
158 
159   /**
160    * Returns the property set types of all property descriptors that have been
161    * added.
162    *
163    * @return the property set types of all property descriptors that have been
164    *         added.
165    */
166   Set<Class<?>> getPropertySetTypes();
167 
168   // --- object basics --------------------------------------------------------
169 }