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.constraints;
6   
7   import java.util.ArrayList;
8   import java.util.HashMap;
9   import java.util.List;
10  import java.util.Map;
11  
12  import pt.digitalis.dif.dem.interfaces.IStageInstance;
13  import pt.digitalis.dif.dem.managers.IMessageManager;
14  import pt.digitalis.dif.dem.objects.messages.MessageList;
15  import pt.digitalis.dif.ioc.DIFIoCRegistry;
16  import pt.digitalis.utils.common.StringUtils;
17  
18  /**
19   * Base implementation for all parameter constraints. Will provide common features and resources.
20   * 
21   * @author Pedro Viegas <a href="mailto:pviegas@digitalis.pt">pviegas@digitalis.pt</a>
22   * @created Nov 16, 2007
23   */
24  public abstract class AbstractParameterConstraint implements IParameterConstraint {
25  
26      /** The message manager to get class messages */
27      static IMessageManager messageManager;
28  
29      /** Messages cache for all constraints */
30      static private MessageList messages;
31  
32      /**
33       * Get's the Message Manager from the IoC
34       * 
35       * @return the message manager instance
36       */
37      static private IMessageManager getMessageManager()
38      {
39          if (messageManager == null)
40              messageManager = DIFIoCRegistry.getRegistry().getImplementation(IMessageManager.class);
41  
42          return messageManager;
43      }
44  
45      /**
46       * Lazy loading getter of messages
47       * 
48       * @return the messages
49       */
50      protected static MessageList getMessages()
51      {
52          // If the messages have not yet been loaded do it now
53          if (messages == null)
54          {
55              messages = getMessageManager().collectEntityMessagesFromRepository(AbstractParameterConstraint.class);
56          }
57  
58          return messages;
59      }
60  
61      /**
62       * Get the error IDs
63       * 
64       * @return List of error IDs
65       */
66      protected List<String> getErrorIDs()
67      {
68          return new ArrayList<String>();
69      }
70  
71      /**
72       * Compiles all values to be parsed in the error message to be generated on request
73       * 
74       * @param parseValues
75       *            if T will replace the current parameter value in the message. Otherwise return the untouched message
76       *            for custom parsing
77       * @return the list of key/values to replace in the error message
78       */
79      abstract protected Map<String, String> getErrorMessageValues(boolean parseValues);
80  
81      /**
82       * @see pt.digitalis.dif.dem.objects.parameters.constraints.IParameterConstraint#getValidationResult(java.lang.Object,
83       *      pt.digitalis.dif.dem.interfaces.IStageInstance)
84       */
85      public ParameterConstraintResult getValidationResult(Object value, IStageInstance stageInstance)
86      {
87          Boolean constraintResult = validateConstraint(value, stageInstance);
88          String language = null;
89          if (stageInstance != null && stageInstance.getContext() != null)
90          {
91              language = stageInstance.getContext().getLanguage();
92          }
93  
94          return new ParameterConstraintResult(this, constraintResult, getErrorIDs(), language);
95      }
96  
97      /**
98       * @see pt.digitalis.dif.dem.objects.parameters.constraints.IParameterConstraint#validateConstraint(java.lang.Object,
99       *      pt.digitalis.dif.dem.interfaces.IStageInstance)
100      */
101     public boolean validateConstraint(Object value, IStageInstance stageInstance)
102     {
103         if (value == null)
104             return validateConstraint((String) null, stageInstance);
105         else
106             return validateConstraint(value.toString(), stageInstance);
107     }
108 
109     /**
110      * @see pt.digitalis.dif.dem.objects.parameters.constraints.IParameterConstraint#validationErrorMessage()
111      */
112     public String validationErrorMessage()
113     {
114         return this.validationErrorMessage(true);
115     }
116 
117     /**
118      * @see pt.digitalis.dif.dem.objects.parameters.constraints.IParameterConstraint#validationErrorMessage(boolean)
119      */
120     public String validationErrorMessage(boolean parseValues)
121     {
122         String message = getMessages().getMessages().get(this.getClass().getSimpleName() + ".message");
123         Map<String, String> substitutions = new HashMap<String, String>();
124         substitutions.putAll(getErrorMessageValues(parseValues));
125 
126         if (!parseValues)
127             substitutions.remove("value");
128 
129         message = StringUtils.parseMessage(message, substitutions);
130 
131         return message;
132     }
133 
134     /**
135      * @see pt.digitalis.dif.dem.objects.parameters.constraints.IParameterConstraint#validationErrorMessage(boolean,
136      *      java.lang.String)
137      */
138     public String validationErrorMessage(boolean parseValues, String language)
139     {
140         String message = getMessages().getMessages(language).get(this.getClass().getSimpleName() + ".message");
141         Map<String, String> substitutions = new HashMap<String, String>();
142         substitutions.putAll(getErrorMessageValues(parseValues));
143 
144         if (!parseValues)
145             substitutions.remove("value");
146 
147         message = StringUtils.parseMessage(message, substitutions);
148 
149         return message;
150     }
151 
152     /**
153      * @see pt.digitalis.dif.dem.objects.parameters.constraints.IParameterConstraint#validationErrorMessage(java.lang.String)
154      */
155     public String validationErrorMessage(String language)
156     {
157         return this.validationErrorMessage(true, language);
158     }
159 
160 }