View Javadoc

1   /**
2    * 2007, Digitalis Informatica. All rights reserved. Distribuicao e Gestao de Informatica, Lda. Estrada de Paco de Arcos
3    * num.9 - Piso -1 2780-666 Paco de Arcos Telefone: (351) 21 4408990 Fax: (351) 21 4408999 http://www.digitalis.pt
4    */
5   package pt.digitalis.dif.dem.objects.parameters;
6   
7   import java.math.BigDecimal;
8   import java.util.Date;
9   import java.util.List;
10  import java.util.Map;
11  
12  import pt.digitalis.dif.controller.interfaces.IDIFContext;
13  import pt.digitalis.dif.dem.Entity;
14  import pt.digitalis.dif.dem.interfaces.IStageInstance;
15  import pt.digitalis.dif.dem.objects.parameters.constraints.IParameterConstraint;
16  import pt.digitalis.dif.dem.objects.parameters.errors.ParameterErrorList;
17  import pt.digitalis.dif.dem.objects.parameters.rules.IParameterRule;
18  import pt.digitalis.dif.dem.objects.parameters.validators.IParameterValidator;
19  import pt.digitalis.dif.exception.objects.ParameterException;
20  import pt.digitalis.dif.utils.extensions.document.DocumentRepositoryEntry;
21  
22  /**
23   * This class will define a Parameter.
24   * <p>
25   * It will hold information relative to the Parameter value, ID key and validation constraints.
26   * 
27   * @param <T>
28   *            generic type of the parameter
29   * @author Pedro Viegas <a href="mailto:pviegas@digitalis.pt">pviegas@digitalis.pt</a>
30   * @created Nov 23, 2007
31   */
32  public interface IParameter<T> extends Cloneable {
33  
34      /**
35       * Creates a new instance of the current object
36       * 
37       * @return {@link IParameter} clone
38       * @throws CloneNotSupportedException
39       */
40      public IParameter<T> clone() throws CloneNotSupportedException;
41  
42      /**
43       * Parameter Initializer. Since IoC provides the construction this should be called after TODO: Refactor this
44       * method!! This is a bad coding practice! Methods should have between 3 and 7 arguments. Nine is too much. Use
45       * encapsulation.
46       * 
47       * @param id
48       *            the parameter id
49       * @param parentType
50       *            the parent entity type
51       * @param parentID
52       *            the id of the parent entity
53       * @param persistToRepository
54       *            if the parameter value should be persisted to the repository
55       * @param allowAnonymous
56       *            if a USER scoped parameter should allow anonymous access
57       * @param parameterScope
58       *            the scope of the parameter
59       * @param defaultValue
60       *            the parameter default value
61       * @param constraints
62       *            the string that defines the constraints to apply
63       * @param formLinked
64       *            the form name of null if not set
65       * @param readonly
66       * @param referencedInARuleFromAnotherParameter
67       *            the new referencedInARuleFromAnotherParameter value to set
68       * @param required
69       * @param formConfigurable
70       *            T if the form is configurable
71       * @param validators
72       *            a validator list to validate the parameter values
73       * @param rules
74       *            the parameter rules
75       * @param value
76       */
77      public void forceInitialize(boolean allowAnonymous, Map<String, IParameterConstraint> constraints, T defaultValue,
78              String formLinked, String id, ParameterScope parameterScope, String parentID, Entity parentType,
79              boolean persistToRepository, boolean readonly, boolean referencedInARuleFromAnotherParameter,
80              boolean required, boolean formConfigurable, List<IParameterRule<T>> rules,
81              Map<String, IParameterValidator> validators, T value);
82  
83      /**
84       * @return the constraints
85       */
86      public Map<String, IParameterConstraint> getConstraints();
87  
88      /**
89       * @return the form name of null if not set
90       */
91      public String getFormLinked();
92  
93      /**
94       * @return the id
95       */
96      public String getId();
97  
98      /**
99       * @return the persistScope
100      */
101     public ParameterScope getParameterScope();
102 
103     /**
104      * @return the parentID
105      */
106     public String getParentID();
107 
108     /**
109      * @return the parentType
110      */
111     public Entity getParentType();
112 
113     /**
114      * Inspector for the 'rules' attribute.
115      * 
116      * @return the rules value
117      */
118     public List<IParameterRule<T>> getRules();
119 
120     /**
121      * @return the list of supported class types for the parameter value
122      */
123     public List<String> getSupportedClasses();
124 
125     /**
126      * @return the validators
127      */
128     public Map<String, IParameterValidator> getValidators();
129 
130     /**
131      * Returns the parameter value. This method will check a number of possible sources for the value of the parameter
132      * depending on it's scope and attributes.
133      * 
134      * @param context
135      *            the DIF context to read if needed
136      * @return the value
137      * @throws ParameterException
138      *             if the parameter could not be read
139      */
140     public T getValue(IDIFContext context) throws ParameterException;
141 
142     /**
143      * @param context
144      *            the DIF context to read if needed
145      * @return the value of the parameter as a Double
146      * @throws ParameterException
147      *             if a conversion error occurs
148      */
149     public BigDecimal getValueAsBigDecimal(IDIFContext context) throws ParameterException;
150 
151     /**
152      * @param context
153      *            the DIF context to read if needed
154      * @return the value of the parameter as a boolean
155      * @throws ParameterException
156      *             if the parameter value cannot be read
157      */
158     public boolean getValueAsBoolean(IDIFContext context) throws ParameterException;
159 
160     /**
161      * @param context
162      *            the DIF context to read if needed
163      * @return the value of the parameter as a Date
164      * @throws ParameterException
165      *             if a conversion error occurs
166      */
167     public Date getValueAsDate(IDIFContext context) throws ParameterException;
168 
169     /**
170      * Returns the parameter value as a Document Note: Only Document types parameters will correctly respond to this
171      * method. All others will report an invalid usage {@link ParameterException}
172      * 
173      * @param context
174      *            the DIF context to read if needed
175      * @return the string representation of the parameter value
176      * @throws ParameterException
177      *             if the parameter value cannot be read
178      */
179     public DocumentRepositoryEntry getValueAsDocument(IDIFContext context) throws ParameterException;
180 
181     /**
182      * @param context
183      *            the DIF context to read if needed
184      * @return the value of the parameter as a Double
185      * @throws ParameterException
186      *             if a conversion error occurs
187      */
188     public Double getValueAsDouble(IDIFContext context) throws ParameterException;
189 
190     /**
191      * @param context
192      *            the DIF context to read if needed
193      * @return the value of the parameter as an Long
194      * @throws ParameterException
195      *             if a conversion error occurs
196      */
197     public Long getValueAsLong(IDIFContext context) throws ParameterException;
198 
199     /**
200      * Returns the parameter value as a String
201      * 
202      * @param context
203      *            the DIF context to read if needed
204      * @return the string representation of the parameter value
205      * @throws ParameterException
206      *             if the parameter value cannot be read
207      */
208     public String getValueAsString(IDIFContext context) throws ParameterException;
209 
210     /**
211      * Parameter Initializer. Since IoC provides the construction this should be called after TODO: Refactor this
212      * method!! This is a bad coding practice! Methods should have between 3 and 7 arguments. Nine is too much. Use
213      * encapsulation.
214      * 
215      * @param id
216      *            the parameter id
217      * @param parentType
218      *            the parent entity type
219      * @param parentID
220      *            the id of the parent entity
221      * @param formConfigurable
222      *            if the parameter can be configured for a given form
223      * @param persistToRepository
224      *            if the parameter value should be persisted to the repository
225      * @param allowAnonymousAccess
226      *            if a USER scoped parameter should allow anonymous access
227      * @param parameterScope
228      *            the scope of the parameter
229      * @param defaultValue
230      *            the parameter default value
231      * @param constraintDefinition
232      *            the string that defines the constraints to apply
233      * @param validators
234      *            a validator list to validate the parameter values
235      * @param rules
236      *            the parameter rules
237      * @throws ParameterException
238      *             if the default value can't be converted to the inner parameter type
239      */
240     public void initialize(String id, Entity parentType, String parentID, boolean formConfigurable,
241             boolean persistToRepository, boolean allowAnonymousAccess, ParameterScope parameterScope,
242             String defaultValue, String constraintDefinition, Map<String, IParameterValidator> validators,
243             List<IParameterRule<T>> rules) throws ParameterException;
244 
245     /**
246      * @return the allowAnonymous
247      */
248     public boolean isAllowAnonymous();
249 
250     /**
251      * Inspector for the 'formConfigurable' attribute.
252      * 
253      * @return the formConfigurable value
254      */
255     public boolean isFormConfigurable();
256 
257     /**
258      * @return T if the current parameter is of a numeric type
259      */
260     public boolean isNumeric();
261 
262     /**
263      * @return the persistToRepository
264      */
265     public boolean isPersistToRepository();
266 
267     /**
268      * @return the readonly
269      */
270     public boolean isReadonly();
271 
272     /**
273      * Inspector for the 'referencedInARuleFromAnotherParameter' attribute.
274      * 
275      * @return the referencedInARuleFromAnotherParameter value
276      */
277     public boolean isReferencedInARuleFromAnotherParameter();
278 
279     /**
280      * @return the required
281      */
282     public boolean isRequired();
283 
284     /**
285      * @return T if we can set the parameter with a String value representation
286      */
287     public boolean isStringSetterSupported();
288 
289     /**
290      * Updates the value of the parameter from the relevant sources. This method will check a number of possible sources
291      * for the value of the parameter depending on it's scope and attributes.
292      * 
293      * @param stageInstance
294      *            the DIF stage to read if needed
295      * @return return the error message if the validation fails
296      */
297     public ParameterErrorList refreshParameterValue(IStageInstance stageInstance);
298 
299     /**
300      * Sets the value of the parameter to its default and runs all constraints and validations
301      * 
302      * @param stageInstance
303      *            the requested stage
304      * @return return the error messages if the validation fails
305      */
306     public ParameterErrorList setDefaultValue(IStageInstance stageInstance);
307 
308     /**
309      * Sets the value of the parameter to its default and runs all constraints and validations
310      * 
311      * @param stageInstance
312      *            the requested stage
313      * @param initializationInProgress
314      *            T if called within the dif parameter initialization
315      * @return return the error messages if the validation fails
316      */
317     public ParameterErrorList setDefaultValue(IStageInstance stageInstance, boolean initializationInProgress);
318 
319     /**
320      * Modifier for the 'formConfigurable' attribute.
321      * 
322      * @param formConfigurable
323      *            the new formConfigurable value to set
324      */
325     public void setFormConfigurable(boolean formConfigurable);
326 
327     /**
328      * @param formLinked
329      */
330     public void setFormLinked(String formLinked);
331 
332     /**
333      * Modifier for the 'referencedInARuleFromAnotherParameter' attribute.
334      * 
335      * @param referencedInARuleFromAnotherParameter
336      *            the new referencedInARuleFromAnotherParameter value to set
337      */
338     public void setReferencedInARuleFromAnotherParameter(boolean referencedInARuleFromAnotherParameter);
339 
340     /**
341      * Sets the value of the parameter and runs all constraints and validations
342      * 
343      * @param value
344      *            the value to set
345      * @param stageInstance
346      *            the DIF stage to read if needed. WARNING: If null is interpreted like an initialization and no scope
347      *            repositories will be accessed/updated.
348      * @return return the error messages if the validation fails
349      */
350     public ParameterErrorList setValue(T value, IStageInstance stageInstance);
351 
352     /**
353      * Sets the value of the parameter and runs all constraints and validations
354      * 
355      * @param value
356      *            the value to set
357      * @param stageInstance
358      *            the DIF stage to read if needed. WARNING: If null is interpreted like an initialization and no scope
359      *            repositories will be accessed/updated.
360      * @param initializationInProgress
361      *            T if called within the dif parameter initialization
362      * @return return the error messages if the validation fails
363      */
364     public ParameterErrorList setValue(T value, IStageInstance stageInstance, boolean initializationInProgress);
365 
366     /**
367      * Sets the value of the parameter converting if from a string representation and runs all constraints and
368      * validations
369      * 
370      * @param value
371      *            the value to set
372      * @param stageInstance
373      *            the DIF stage to read if needed.
374      * @return return the error messages if the validation fails
375      */
376     public ParameterErrorList setValueFromString(String value, IStageInstance stageInstance);
377 
378     /**
379      * Sets the value of the parameter converting if from a string representation and runs all constraints and
380      * validations
381      * 
382      * @param value
383      *            the value to set
384      * @param stageInstance
385      *            the DIF stage to read if needed.
386      * @param initializationInProgress
387      *            T if called within the dif parameter initialization
388      * @return return the error messages if the validation fails
389      */
390     public ParameterErrorList setValueFromString(String value, IStageInstance stageInstance,
391             boolean initializationInProgress);
392 }