2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.cdm
.model
.description
;
13 import java
.util
.HashSet
;
16 import javax
.persistence
.Entity
;
17 import javax
.persistence
.FetchType
;
18 import javax
.persistence
.ManyToOne
;
19 import javax
.persistence
.OneToMany
;
20 import javax
.validation
.constraints
.NotNull
;
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
.XmlIDREF
;
26 import javax
.xml
.bind
.annotation
.XmlRootElement
;
27 import javax
.xml
.bind
.annotation
.XmlSchemaType
;
28 import javax
.xml
.bind
.annotation
.XmlType
;
30 import org
.apache
.log4j
.Logger
;
31 import org
.hibernate
.envers
.Audited
;
32 import org
.hibernate
.search
.annotations
.Indexed
;
34 import eu
.etaxonomy
.cdm
.model
.common
.VersionableEntity
;
37 * This class represents the assignment of numerical values to {@link Feature features}
38 * corresponding to {@link QuantitativeData quantitative data}. A statistical measurement
39 * value instance constitutes an atomized part of an information piece
40 * (quantitative data) so that several statistical measurement value instances
41 * may belong to one quantitative data instance.
43 * This class corresponds to CharacterMeasureDataType according
48 * @created 08-Nov-2007 13:06:54
50 @XmlAccessorType(XmlAccessType
.FIELD
)
51 @XmlType(name
= "StatisticalMeasureValue")
52 @XmlRootElement(name
= "StatisticalMeasureValue")
54 @Indexed(index
= "eu.etaxonomy.cdm.model.description.DescriptionElementBase")
56 public class StatisticalMeasurementValue
extends VersionableEntity
implements IModifiable
, Cloneable
{
57 private static final long serialVersionUID
= -3576311887760351982L;
58 private static final Logger logger
= Logger
.getLogger(StatisticalMeasurementValue
.class);
60 @XmlElement(name
= "Value")
63 @XmlElementWrapper(name
= "Modifiers")
64 @XmlElement(name
= "Modifier")
66 @XmlSchemaType(name
= "IDREF")
67 @OneToMany(fetch
= FetchType
.LAZY
)
68 @NotNull // avoids creating a UNIQUE key for this field
69 private Set
<Modifier
> modifiers
= new HashSet
<Modifier
>();
71 @XmlElement(name
= "StatisticalMeasureType")
73 @XmlSchemaType(name
= "IDREF")
74 @ManyToOne(fetch
= FetchType
.LAZY
)
75 private StatisticalMeasure type
;
79 * Class constructor: creates a new empty statistical measurement value
82 protected StatisticalMeasurementValue(){
87 * Creates a new empty statistical measurement value instance.
89 public static StatisticalMeasurementValue
NewInstance(){
90 return new StatisticalMeasurementValue();
94 * Returns the type of {@link StatisticalMeasure statistical measure} used in
95 * <i>this</i> statistical measurement value.
97 public StatisticalMeasure
getType(){
103 public void setType(StatisticalMeasure type
){
109 * Returns the numerical value used to describe the {@link Feature feature}
110 * corresponding to the {@link QuantitativeData quantitative data} <i>this</i>
111 * statistical measurement value belongs to.
113 public float getValue(){
119 public void setValue(float value
){
125 * Returns the set of {@link Modifier modifiers} used to qualify the validity
126 * or probability of <i>this</i> statistical measurement value.
127 * This is only metainformation.
129 public Set
<Modifier
> getModifiers() {
134 * Adds a {@link Modifier modifier} to the set of {@link #getModifiers() modifiers}
135 * used to qualify the validity of <i>this</i> statistical measurement value.
137 * @param modifier the modifier to be added to <i>this</i> statistical measurement value
138 * @see #getModifiers()
140 public void addModifier(Modifier modifier
) {
141 this.modifiers
.add(modifier
);
144 * Removes one element from the set of {@link #getModifiers() modifiers}
145 * used to qualify the validity of <i>this</i> statistical measurement value.
147 * @param modifier the modifier which should be removed
148 * @see #getModifiers()
149 * @see #addModifier(Modifier)
151 public void removeModifier(Modifier modifier
) {
152 this.modifiers
.remove(modifier
);
156 //*********************************** CLONE *****************************************/
159 * Clones <i>this</i> statistical measurement value. This is a shortcut that enables to create
160 * a new instance that differs only slightly from <i>this</i> statistical measurement value by
161 * modifying only some of the attributes.
163 * @see eu.etaxonomy.cdm.model.common.VersionableEntity#clone()
164 * @see java.lang.Object#clone()
167 public Object
clone() {
170 StatisticalMeasurementValue result
= (StatisticalMeasurementValue
)super.clone();
173 result
.modifiers
= new HashSet
<Modifier
>();
174 for (Modifier modifier
: getModifiers()){
175 result
.modifiers
.add(modifier
);
179 //no changes to: value, type
180 } catch (CloneNotSupportedException e
) {
181 logger
.warn("Object does not implement cloneable");