1 package fr.ifremer.tutti.service.validator;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 import com.opensymphony.xwork2.validator.ValidationException;
28 import fr.ifremer.tutti.persistence.entities.referential.Status;
29 import fr.ifremer.tutti.persistence.entities.referential.TuttiReferentialEntity;
30 import org.nuiton.validator.xwork2.field.NuitonFieldValidatorSupport;
31
32 import java.util.Collection;
33
34
35
36
37
38
39
40 public class TemporaryReferentialFieldValidator extends NuitonFieldValidatorSupport {
41
42 @Override
43 protected void validateWhenNotSkip(Object object) throws ValidationException {
44
45 String fieldName = getFieldName();
46
47 Object fieldValue = getFieldValue(fieldName, object);
48
49 boolean valid = true;
50
51 if (fieldValue != null) {
52
53 if (fieldValue instanceof TuttiReferentialEntity) {
54
55 valid = validateReference((TuttiReferentialEntity) fieldValue);
56
57 } else if (fieldValue instanceof Collection) {
58
59 Collection<TuttiReferentialEntity> value = (Collection<TuttiReferentialEntity>) fieldValue;
60
61 for (TuttiReferentialEntity referentialEntity : value) {
62 valid = validateReference(referentialEntity);
63 if (!valid) {
64 break;
65 }
66 }
67
68 } else {
69
70 throw new IllegalStateException(
71 "validator " + this +
72 " must be used on a referential or a collection of referential field, but was uses on " +
73 fieldValue);
74
75 }
76
77 }
78
79
80 if (!valid) {
81
82 addFieldError(fieldName, object);
83
84 }
85
86 }
87
88 protected boolean validateReference(TuttiReferentialEntity value) {
89 if (value == null) {
90
91 return true;
92 }
93
94 Status status = value.getStatus();
95
96 return status.getIdAsInt() != 2;
97 }
98
99 @Override
100 public String getValidatorType() {
101 return "temporaryReferential";
102 }
103
104 }