1
2
3
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
19
20
21
22
23
24
25
26 public class ParameterRuleExclusive<T> extends AbstractParameterRule<T> {
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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 }