})
@XmlRootElement(name = "OrderedTermBase")
@Entity
-public abstract class OrderedTermBase<T extends OrderedTermBase> extends DefinedTermBase implements Comparable<T> {
+public abstract class OrderedTermBase<T extends OrderedTermBase> extends DefinedTermBase<T> implements Comparable<T> {
static Logger logger = Logger.getLogger(OrderedTermBase.class);
//Order index, value < 1 means that this Term is not in order yet
package eu.etaxonomy.cdm.model.common;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Transient;
import javax.persistence.FetchType;
import javax.persistence.ManyToOne;
import javax.persistence.MappedSuperclass;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlIDREF;
import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
+import org.apache.log4j.Logger;
+
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;
+
import org.apache.log4j.Logger;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
* @author m.doering
*/
@XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "RelationshipBase", propOrder = {
- "relatedFrom",
- "relatedTo",
- "type"
-})
+@XmlType(name = "RelationshipBase", propOrder = { })
@XmlRootElement(name = "RelationshipBase")
@MappedSuperclass
public abstract class RelationshipBase<FROM extends IRelated, TO extends IRelated, TYPE extends RelationshipTermBase> extends ReferencedEntityBase {
private static final long serialVersionUID = -5030154633820061997L;
static Logger logger = Logger.getLogger(RelationshipBase.class);
-// FIXME: TaxonBase.class does not cover TaxonNameBase which also implements IRelated.
- @XmlElement(name = "RelatedFrom", type = TaxonBase.class)
- @XmlIDREF
- @XmlSchemaType(name = "IDREF")
- private FROM relatedFrom;
-
- @XmlElement(name = "RelatedTo", type = TaxonBase.class)
- @XmlIDREF
- @XmlSchemaType(name = "IDREF")
- private TO relatedTo;
-
- @XmlElement(name = "RelationshipType")
- @XmlIDREF
- @XmlSchemaType(name = "IDREF")
- private TYPE type;
-
protected RelationshipBase(){
super();
}
to.addRelationship(this);
}
- @ManyToOne
- public TYPE getType(){
- return this.type;
- }
- protected void setType(TYPE type){
- this.type = type;
- }
+ @Transient
+ public abstract TYPE getType();
+ protected abstract void setType(TYPE type);
- @ManyToOne(fetch=FetchType.EAGER)
- @Cascade({CascadeType.SAVE_UPDATE})
- protected FROM getRelatedFrom() {
- return relatedFrom;
- }
- protected void setRelatedFrom(FROM relatedFrom) {
- this.relatedFrom = relatedFrom;
- }
-
+ @Transient
+ protected abstract FROM getRelatedFrom();
- @ManyToOne(fetch=FetchType.EAGER)
- @Cascade({CascadeType.SAVE_UPDATE})
- protected TO getRelatedTo() {
- return relatedTo;
- }
- protected void setRelatedTo(TO relatedTo) {
- this.relatedTo = relatedTo;
- }
-
+ protected abstract void setRelatedFrom(FROM relatedFrom);
+
+ @Transient
+ protected abstract TO getRelatedTo();
+
+ protected abstract void setRelatedTo(TO relatedTo);
// TODO
// UUID toUuid;
import java.util.List;
import java.util.Set;
+import javax.persistence.Entity;
import javax.persistence.JoinTable;
import javax.persistence.MappedSuperclass;
import javax.persistence.OneToMany;
"inverseRepresentations"
})
@XmlRootElement(name = "RelationshipTermBase")
-@MappedSuperclass
+@Entity
public abstract class RelationshipTermBase<T extends RelationshipTermBase> extends OrderedTermBase<T> {
static Logger logger = Logger.getLogger(RelationshipTermBase.class);
this.terms = terms;
}
- @OneToMany(mappedBy="persistentVocabulary", fetch=FetchType.LAZY)
+ @OneToMany(mappedBy="persistentVocabulary", fetch=FetchType.LAZY, targetEntity = DefinedTermBase.class)
@Type(type="DefinedTermBase")
@Cascade({CascadeType.SAVE_UPDATE})
public Set<T> getPersistentTerms() {
import eu.etaxonomy.cdm.model.common.RelationshipBase;
import eu.etaxonomy.cdm.model.reference.ReferenceBase;
+
import org.apache.log4j.Logger;
+import org.hibernate.annotations.Cascade;
+import org.hibernate.annotations.CascadeType;
+
import javax.persistence.*;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlIDREF;
+import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
/**
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "HybridRelationship", propOrder = {
+ "relatedFrom",
+ "relatedTo",
+ "type",
"ruleConsidered"
})
@Entity
//the note property.
@XmlElement(name = "RuleConsidered")
private String ruleConsidered;
+
+ @XmlElement(name = "RelatedFrom")
+ @XmlIDREF
+ @XmlSchemaType(name = "IDREF")
+ private BotanicalName relatedFrom;
+
+ @XmlElement(name = "RelatedTo")
+ @XmlIDREF
+ @XmlSchemaType(name = "IDREF")
+ private BotanicalName relatedTo;
+
+ @XmlElement(name = "Type")
+ @XmlIDREF
+ @XmlSchemaType(name = "IDREF")
+ private HybridRelationshipType type;
//for hibernate use only, don't use
@Deprecated
*/
@Transient
public BotanicalName getParentName(){
- return super.getRelatedFrom();
+ return this.getRelatedFrom();
}
/**
* @see #getParentName()
*/
public void setParentName(BotanicalName parentName){
- super.setRelatedFrom(parentName);
+ this.setRelatedFrom(parentName);
}
/**
*/
@Transient
public BotanicalName getHybridName(){
- return super.getRelatedTo();
+ return this.getRelatedTo();
}
/**
* @see #getHybridName()
*/
public void setHybridName(BotanicalName hybridName){
- super.setRelatedTo(hybridName);
+ this.setRelatedTo(hybridName);
}
/**
this.ruleConsidered = ruleConsidered;
}
+ @ManyToOne(fetch=FetchType.EAGER)
+ @Cascade({CascadeType.SAVE_UPDATE})
+ protected BotanicalName getRelatedFrom() {
+ return relatedFrom;
+ }
+
+ @ManyToOne(fetch=FetchType.EAGER)
+ @Cascade({CascadeType.SAVE_UPDATE})
+ protected BotanicalName getRelatedTo() {
+ return relatedTo;
+ }
+
+ @ManyToOne
+ public HybridRelationshipType getType() {
+ return type;
+ }
+
+
+ protected void setRelatedFrom(BotanicalName relatedFrom) {
+ this.relatedFrom = relatedFrom;
+ }
+
+
+ protected void setRelatedTo(BotanicalName relatedTo) {
+ this.relatedTo = relatedTo;
+ }
+
+
+ protected void setType(HybridRelationshipType type) {
+ this.type = type;
+ }
+
}
\ No newline at end of file
import eu.etaxonomy.cdm.model.common.RelationshipBase;
import eu.etaxonomy.cdm.model.reference.ReferenceBase;
import org.apache.log4j.Logger;
+import org.hibernate.annotations.Cascade;
+import org.hibernate.annotations.CascadeType;
+
import javax.persistence.*;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlIDREF;
+import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
/**
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "NameRelationship", propOrder = {
- "ruleConsidered",
- "type"
+ "relatedFrom",
+ "relatedTo",
+ "type",
+ "ruleConsidered"
})
@Entity
public class NameRelationship extends RelationshipBase<TaxonNameBase, TaxonNameBase, NameRelationshipType> {
//the note property.
@XmlElement(name = "RuleConsidered")
private String ruleConsidered;
+
+ @XmlElement(name = "RelatedFrom")
+ @XmlIDREF
+ @XmlSchemaType(name = "IDREF")
+ private TaxonNameBase relatedFrom;
+
+ @XmlElement(name = "RelatedTo")
+ @XmlIDREF
+ @XmlSchemaType(name = "IDREF")
+ private TaxonNameBase relatedTo;
- @XmlElement(name = "NameRelationshipType")
+ @XmlElement(name = "Type")
private NameRelationshipType type;
//for hibernate, don't use
*/
@Transient
public TaxonNameBase getFromName(){
- return super.getRelatedFrom();
+ return this.getRelatedFrom();
}
/**
* @see #getFromName()
*/
void setFromName(TaxonNameBase fromName){
- super.setRelatedFrom(fromName);
+ this.setRelatedFrom(fromName);
}
/**
*/
@Transient
public TaxonNameBase getToName(){
- return super.getRelatedTo();
+ return this.getRelatedTo();
}
/**
* @see #getToName()
*/
void setToName(TaxonNameBase toName){
- super.setRelatedTo(toName);
+ this.setRelatedTo(toName);
}
/**
this.ruleConsidered = ruleConsidered;
}
+ @ManyToOne(fetch=FetchType.EAGER)
+ @Cascade({CascadeType.SAVE_UPDATE})
+ protected TaxonNameBase getRelatedFrom() {
+ return relatedFrom;
+ }
+
+ @ManyToOne(fetch=FetchType.EAGER)
+ @Cascade({CascadeType.SAVE_UPDATE})
+ protected TaxonNameBase getRelatedTo() {
+ return relatedTo;
+ }
+
+ @ManyToOne
+ public NameRelationshipType getType() {
+ return type;
+ }
+
+
+ protected void setRelatedFrom(TaxonNameBase relatedFrom) {
+ this.relatedFrom = relatedFrom;
+ }
+
+
+ protected void setRelatedTo(TaxonNameBase relatedTo) {
+ this.relatedTo = relatedTo;
+ }
+
+
+ protected void setType(NameRelationshipType type) {
+ this.type = type;
+ }
+
}
\ No newline at end of file
import eu.etaxonomy.cdm.model.reference.ReferenceBase;
import org.apache.log4j.Logger;
+import org.hibernate.annotations.Cascade;
+import org.hibernate.annotations.CascadeType;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlIDREF;
import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
/**
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "SynonymRelationship", propOrder = {
+ "relatedFrom",
+ "relatedTo",
+ "type",
"isProParte",
"isPartial"
})
@XmlElement(name = "IsPartial")
private boolean isPartial = false;
+ @XmlElement(name = "RelatedFrom")
+ @XmlIDREF
+ @XmlSchemaType(name = "IDREF")
+ private Synonym relatedFrom;
+
+ @XmlElement(name = "RelatedTo")
+ @XmlIDREF
+ @XmlSchemaType(name = "IDREF")
+ private Taxon relatedTo;
+
+ @XmlElement(name = "Type")
+ @XmlIDREF
+ @XmlSchemaType(name = "IDREF")
+ private SynonymRelationshipType type;
//for hibernate, don't use
@Deprecated
*/
@Transient
public Taxon getAcceptedTaxon(){
- return super.getRelatedTo();
+ return this.getRelatedTo();
}
/**
* @see Taxon#getSynonymRelations()
*/
protected void setAcceptedTaxon(Taxon acceptedTaxon){
- super.setRelatedTo(acceptedTaxon);
+ this.setRelatedTo(acceptedTaxon);
}
/**
*/
@Transient
public Synonym getSynonym(){
- return super.getRelatedFrom();
+ return this.getRelatedFrom();
}
/**
* Sets the given {@link Synonym synonym} to <i>this</i> synonym relationship.
* @see Synonym#getSynonymRelations()
*/
protected void setSynonym(Synonym synonym){
- super.setRelatedFrom(synonym);
+ this.setRelatedFrom(synonym);
+ }
+
+ @ManyToOne(fetch=FetchType.EAGER)
+ @Cascade({CascadeType.SAVE_UPDATE})
+ protected Synonym getRelatedFrom() {
+ return relatedFrom;
}
+ @ManyToOne(fetch=FetchType.EAGER)
+ @Cascade({CascadeType.SAVE_UPDATE})
+ protected Taxon getRelatedTo() {
+ return relatedTo;
+ }
+
+ @ManyToOne
+ public SynonymRelationshipType getType() {
+ return type;
+ }
+
+ protected void setRelatedFrom(Synonym relatedFrom) {
+ this.relatedFrom = relatedFrom;
+ }
+
+ protected void setRelatedTo(Taxon relatedTo) {
+ this.relatedTo = relatedTo;
+ }
+
+ protected void setType(SynonymRelationshipType type) {
+ this.type = type;
+ }
}
\ No newline at end of file
import eu.etaxonomy.cdm.model.reference.ReferenceBase;
import org.apache.log4j.Logger;
+import org.hibernate.annotations.Cascade;
+import org.hibernate.annotations.CascadeType;
+
import javax.persistence.*;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "TaxonRelationship", propOrder = {
- "type"
+ "relatedFrom",
+ "relatedTo",
+ "type",
})
@XmlRootElement(name = "TaxonRelationship")
@Entity
static private final Logger logger = Logger.getLogger(TaxonRelationship.class);
- @XmlElement(name = "TaxonRelationshipType")
+ @XmlElement(name = "RelatedFrom")
+ @XmlIDREF
+ @XmlSchemaType(name = "IDREF")
+ private Taxon relatedFrom;
+
+ @XmlElement(name = "RelatedTo")
+ @XmlIDREF
+ @XmlSchemaType(name = "IDREF")
+ private Taxon relatedTo;
+
+ @XmlElement(name = "Type")
@XmlIDREF
@XmlSchemaType(name = "IDREF")
private TaxonRelationshipType type;
setRelatedTo(toTaxon);
}
+ @ManyToOne(fetch=FetchType.EAGER)
+ @Cascade({CascadeType.SAVE_UPDATE})
+ protected Taxon getRelatedFrom() {
+ return relatedFrom;
+ }
+
+ @ManyToOne(fetch=FetchType.EAGER)
+ @Cascade({CascadeType.SAVE_UPDATE})
+ protected Taxon getRelatedTo() {
+ return relatedTo;
+ }
+
+ @ManyToOne
+ public TaxonRelationshipType getType() {
+ return type;
+ }
+
+ protected void setRelatedFrom(Taxon relatedFrom) {
+ this.relatedFrom = relatedFrom;
+ }
+
+ protected void setRelatedTo(Taxon relatedTo) {
+ this.relatedTo = relatedTo;
+ }
+
+ protected void setType(TaxonRelationshipType type) {
+ this.type = type;
+ }
+
}
\ No newline at end of file