View Javadoc

1   /**
2    * 2008, 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   
6   package pt.digitalis.dif.dem.objects.parameters.rules;
7   
8   import java.util.ArrayList;
9   import java.util.List;
10  
11  import pt.digitalis.dif.dem.interfaces.IStageInstance;
12  import pt.digitalis.dif.dem.objects.parameters.IParameter;
13  import pt.digitalis.dif.dem.objects.parameters.ParameterList;
14  import pt.digitalis.dif.dem.objects.parameters.types.AbstractParameter;
15  import pt.digitalis.dif.exception.objects.ParameterException;
16  
17  /**
18   * Exclusive parameter rule. Validates if the given parameter is not selected along with other exclusive fill parameter.
19   * Only one can have a filled value.
20   * 
21   * @author Pedro Viegas <a href="mailto:pviegas@digitalis.pt">pviegas@digitalis.pt</a><br/>
22   * @param <T>
23   *            the parameter base type
24   * @created Mar 31, 2009
25   */
26  public class ParameterRuleExclusive<T> extends AbstractParameterRule<T> {
27  
28      /**
29       * Gets the validation result for the present parameter
30       * 
31       * @param stage
32       *            the current stage
33       * @param value
34       *            the value to validate
35       * @param initializationInProgress
36       *            T if called within the dif parameter initialization
37       * @param parameter
38       *            the parameter for validation
39       * @return the validation rule validation result
40       * @throws ParameterException
41       *             if the parameter does not exist
42       */
43      public ParameterRuleResult getValidationResult(IStageInstance stage, T value, boolean initializationInProgress,
44              AbstractParameter<T> parameter) throws ParameterException
45      {
46          List<IParameter<?>> filledParameters = new ArrayList<IParameter<?>>();
47  
48          if (value == null || getParameters() == null || getParameters().isEmpty())
49              return new ParameterRuleResult(true);
50  
51          else
52          {
53              ParameterList list = stage.getParameters().getAllAvailableParameters();
54  
55              for (String parameterID: getParameters())
56              {
57                  IParameter<?> param = null;
58                  try
59                  {
60                      param = list.getParameter(parameterID);
61  
62                      if (param.getValue(stage.getContext()) != null)
63                          filledParameters.add(param);
64                  }
65                  catch (ParameterException e)
66                  {
67                      filledParameters.add(param);
68                  }
69  
70              }
71  
72              if (filledParameters.isEmpty())
73                  return new ParameterRuleResult(true);
74  
75              else
76              {
77                  StringBuffer buffer = new StringBuffer();
78  
79                  buffer.append(this.getMessages(stage).get("onlyOne") + ": ");
80                  buffer.append("\"" + getParameterName(stage, parameterID) + "\"");
81  
82                  for (IParameter<?> filledParam: filledParameters)
83                      buffer.append(", \"" + getParameterName(stage, filledParam.getId()) + "\"");
84  
85                  return new ParameterRuleResult(buffer.toString());
86  
87              }
88          }
89      }
90  }