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
.ManyToMany
;
19 import javax
.persistence
.ManyToOne
;
20 import javax
.persistence
.OneToMany
;
21 import javax
.validation
.constraints
.NotNull
;
22 import javax
.xml
.bind
.annotation
.XmlAccessType
;
23 import javax
.xml
.bind
.annotation
.XmlAccessorType
;
24 import javax
.xml
.bind
.annotation
.XmlElement
;
25 import javax
.xml
.bind
.annotation
.XmlElementWrapper
;
26 import javax
.xml
.bind
.annotation
.XmlIDREF
;
27 import javax
.xml
.bind
.annotation
.XmlRootElement
;
28 import javax
.xml
.bind
.annotation
.XmlSchemaType
;
29 import javax
.xml
.bind
.annotation
.XmlType
;
31 import org
.apache
.log4j
.Logger
;
32 import org
.hibernate
.envers
.Audited
;
33 import org
.hibernate
.search
.annotations
.Indexed
;
35 import eu
.etaxonomy
.cdm
.model
.common
.VersionableEntity
;
38 * This class represents the assignment of numerical values to {@link Feature features}
39 * corresponding to {@link QuantitativeData quantitative data}. A statistical measurement
40 * value instance constitutes an atomized part of an information piece
41 * (quantitative data) so that several statistical measurement value instances
42 * may belong to one quantitative data instance.
44 * This class corresponds to CharacterMeasureDataType according
49 * @created 08-Nov-2007 13:06:54
51 @XmlAccessorType(XmlAccessType
.FIELD
)
52 @XmlType(name
= "StatisticalMeasureValue")
53 @XmlRootElement(name
= "StatisticalMeasureValue")
55 @Indexed(index
= "eu.etaxonomy.cdm.model.description.DescriptionElementBase")
57 public class StatisticalMeasurementValue
extends VersionableEntity
implements IModifiable
, Cloneable
{
58 private static final long serialVersionUID
= -3576311887760351982L;
59 private static final Logger logger
= Logger
.getLogger(StatisticalMeasurementValue
.class);
61 @XmlElement(name
= "Value")
64 @XmlElementWrapper(name
= "Modifiers")
65 @XmlElement(name
= "Modifier")
67 @XmlSchemaType(name
= "IDREF")
68 @ManyToMany(fetch
= FetchType
.LAZY
)
69 // @NotNull // avoids creating a UNIQUE key for this field -> not needed for ManyToMany
70 private Set
<Modifier
> modifiers
= new HashSet
<Modifier
>();
72 @XmlElement(name
= "StatisticalMeasureType")
74 @XmlSchemaType(name
= "IDREF")
75 @ManyToOne(fetch
= FetchType
.LAZY
)
76 private StatisticalMeasure type
;
80 * Class constructor: creates a new empty statistical measurement value
83 protected StatisticalMeasurementValue(){
88 * Creates a new empty statistical measurement value instance.
90 public static StatisticalMeasurementValue
NewInstance(){
91 return new StatisticalMeasurementValue();
96 * Creates a new empty statistical measurement value instance.
98 public static StatisticalMeasurementValue
NewInstance(StatisticalMeasure type
, float value
){
99 StatisticalMeasurementValue result
= new StatisticalMeasurementValue();
100 result
.setValue(value
);
101 result
.setType(type
);
106 * Returns the type of {@link StatisticalMeasure statistical measure} used in
107 * <i>this</i> statistical measurement value.
109 public StatisticalMeasure
getType(){
115 public void setType(StatisticalMeasure type
){
121 * Returns the numerical value used to describe the {@link Feature feature}
122 * corresponding to the {@link QuantitativeData quantitative data} <i>this</i>
123 * statistical measurement value belongs to.
125 public float getValue(){
131 public void setValue(float value
){
137 * Returns the set of {@link Modifier modifiers} used to qualify the validity
138 * or probability of <i>this</i> statistical measurement value.
139 * This is only metainformation.
141 public Set
<Modifier
> getModifiers() {
146 * Adds a {@link Modifier modifier} to the set of {@link #getModifiers() modifiers}
147 * used to qualify the validity of <i>this</i> statistical measurement value.
149 * @param modifier the modifier to be added to <i>this</i> statistical measurement value
150 * @see #getModifiers()
152 public void addModifier(Modifier modifier
) {
153 this.modifiers
.add(modifier
);
156 * Removes one element from the set of {@link #getModifiers() modifiers}
157 * used to qualify the validity of <i>this</i> statistical measurement value.
159 * @param modifier the modifier which should be removed
160 * @see #getModifiers()
161 * @see #addModifier(Modifier)
163 public void removeModifier(Modifier modifier
) {
164 this.modifiers
.remove(modifier
);
168 //*********************************** CLONE *****************************************/
171 * Clones <i>this</i> statistical measurement value. This is a shortcut that enables to create
172 * a new instance that differs only slightly from <i>this</i> statistical measurement value by
173 * modifying only some of the attributes.
175 * @see eu.etaxonomy.cdm.model.common.VersionableEntity#clone()
176 * @see java.lang.Object#clone()
179 public Object
clone() {
182 StatisticalMeasurementValue result
= (StatisticalMeasurementValue
)super.clone();
185 result
.modifiers
= new HashSet
<Modifier
>();
186 for (Modifier modifier
: getModifiers()){
187 result
.modifiers
.add(modifier
);
191 //no changes to: value, type
192 } catch (CloneNotSupportedException e
) {
193 logger
.warn("Object does not implement cloneable");