merge-update from trunk
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / validation / EntityValidationResult.java
1 /**
2 * Copyright (C) 2009 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9 package eu.etaxonomy.cdm.model.validation;
10
11 import java.util.HashSet;
12 import java.util.Set;
13 import java.util.UUID;
14
15 import javax.persistence.Column;
16 import javax.persistence.Entity;
17 import javax.persistence.EnumType;
18 import javax.persistence.Enumerated;
19 import javax.persistence.OneToMany;
20 import javax.validation.Validator;
21 import javax.xml.bind.annotation.XmlAccessType;
22 import javax.xml.bind.annotation.XmlAccessorType;
23 import javax.xml.bind.annotation.XmlElement;
24 import javax.xml.bind.annotation.XmlElementWrapper;
25 import javax.xml.bind.annotation.XmlRootElement;
26 import javax.xml.bind.annotation.XmlType;
27 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
28
29 import org.apache.log4j.Logger;
30 import org.hibernate.annotations.Cascade;
31 import org.hibernate.annotations.CascadeType;
32 import org.hibernate.annotations.Fetch;
33 import org.hibernate.annotations.FetchMode;
34 import org.hibernate.annotations.Type;
35 import org.hibernate.search.annotations.FieldBridge;
36
37 import eu.etaxonomy.cdm.hibernate.search.UuidBridge;
38 import eu.etaxonomy.cdm.jaxb.UUIDAdapter;
39 import eu.etaxonomy.cdm.model.common.CdmBase;
40 import eu.etaxonomy.cdm.validation.CRUDEventType;
41
42 /**
43 * An {@code EntityValidationResult} models the result of validating one entity, that is,
44 * the outcome of calling {@link Validator#validate(Object, Class...)}. More than one
45 * constraint {@link EntityConstraintViolation} may be violated while validating the
46 * entity.
47 *
48 * @see EntityValidationResult
49 *
50 * @author ayco_holleman
51 *
52 */
53
54 @XmlAccessorType(XmlAccessType.FIELD)
55 //@formatter:off
56 @XmlType(name = "EntityValidationResult", propOrder = {
57 "ValidatedEntityId",
58 "ValidatedEntityUuid",
59 "ValidatedEntityClass",
60 "UserFriendlyDescription",
61 "UserFriendlyTypeName",
62 "CrudEventType",
63 "ConstraintViolations"
64 })
65 //@formatter:on
66 @XmlRootElement(name = "EntityValidationResult")
67 @Entity
68 public class EntityValidationResult extends CdmBase {
69
70 private static final long serialVersionUID = 9120571815593117363L;
71
72 @SuppressWarnings("unused")
73 private static final Logger logger = Logger.getLogger(EntityValidationResult.class);
74
75
76 public static EntityValidationResult newInstance(){
77 return new EntityValidationResult();
78 }
79
80 @XmlElement(name = "ValidatedEntityId")
81 private int validatedEntityId;
82
83 @XmlElement(name = "ValidatedEntityUuid")
84 @XmlJavaTypeAdapter(UUIDAdapter.class)
85 @Type(type = "uuidUserType")
86 @Column(length=36) //TODO needed? Type UUID will always assure that is exactly 36
87 @FieldBridge(impl = UuidBridge.class) //TODO required?
88 private UUID validatedEntityUuid;
89
90 @XmlElement(name = "ValidatedEntityClass")
91 private String validatedEntityClass;
92
93 @XmlElement(name = "UserFriendlyDescription")
94 private String userFriendlyDescription;
95
96 @XmlElement(name = "UserFriendlyTypeName")
97 private String userFriendlyTypeName;
98
99 @XmlElement(name = "CrudEventType")
100 @Enumerated(EnumType.STRING)
101 private CRUDEventType crudEventType;
102
103 @XmlElementWrapper(name = "EntityConstraintViolations")
104 @OneToMany(mappedBy = "entityValidationResult")
105 @Cascade({ CascadeType.ALL })
106 @Fetch(value = FetchMode.JOIN)
107 private Set<EntityConstraintViolation> entityConstraintViolations;
108
109
110 protected EntityValidationResult(){
111 super();
112 }
113
114
115 public int getValidatedEntityId(){
116 return validatedEntityId;
117 }
118
119
120 public void setValidatedEntityId(int validatedEntityId){
121 this.validatedEntityId = validatedEntityId;
122 }
123
124
125 public UUID getValidatedEntityUuid(){
126 return validatedEntityUuid;
127 }
128
129
130 public void setValidatedEntityUuid(UUID validatedEntityUuid){
131 this.validatedEntityUuid = validatedEntityUuid;
132 }
133
134
135 public String getValidatedEntityClass(){
136 return validatedEntityClass;
137 }
138
139
140 public void setValidatedEntityClass(String validatedEntityClass){
141 this.validatedEntityClass = validatedEntityClass;
142 }
143
144
145 public String getUserFriendlyTypeName(){
146 return userFriendlyTypeName;
147 }
148
149
150 public void setUserFriendlyTypeName(String userFriendlyTypeName){
151 this.userFriendlyTypeName = userFriendlyTypeName;
152 }
153
154
155 public CRUDEventType getCrudEventType(){
156 return crudEventType;
157 }
158
159
160 public void setCrudEventType(CRUDEventType crudEventType){
161 this.crudEventType = crudEventType;
162 }
163
164
165 public String getUserFriendlyDescription(){
166 return userFriendlyDescription;
167 }
168
169
170 public void setUserFriendlyDescription(String userFriendlyDescription){
171 this.userFriendlyDescription = userFriendlyDescription;
172 }
173
174
175 public Set<EntityConstraintViolation> getEntityConstraintViolations(){
176 if (entityConstraintViolations == null) {
177 entityConstraintViolations = new HashSet<EntityConstraintViolation>();
178 }
179 return entityConstraintViolations;
180 }
181
182
183 public void addEntityConstraintViolation(EntityConstraintViolation ecv){
184 if (ecv != null) {
185 getEntityConstraintViolations().add(ecv);
186 }
187 }
188
189
190 public void removeEntityConstraintViolation(EntityConstraintViolation ecv){
191 if (ecv != null) {
192 getEntityConstraintViolations().remove(ecv);
193 }
194 }
195 }