From: Andreas Müller Date: Tue, 19 Aug 2014 14:54:44 +0000 (+0000) Subject: first implementation of alternative identifier #4275 X-Git-Tag: cdmlib-parent-3.4.0~127^2~72 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/commitdiff_plain/6d5812d1bee7d9953180b0a99efd41a2e45f56e7 first implementation of alternative identifier #4275 --- diff --git a/.gitattributes b/.gitattributes index a891db533e..2942e80b8b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -744,6 +744,7 @@ cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ITreeNode.java -text cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IVersionableEntity.java -text svneol=unset#text/plain cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IdentifiableEntity.java -text cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IdentifiableSource.java -text +cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/Identifier.java -text cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/LSID.java -text cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/LSIDAuthority.java -text cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/LSIDWSDLLocator.java -text diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IIdentifiableEntity.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IIdentifiableEntity.java index 121c2445a7..3aae85856a 100644 --- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IIdentifiableEntity.java +++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IIdentifiableEntity.java @@ -80,6 +80,13 @@ public interface IIdentifiableEntity extends ISourceable, IA public void removeExtension(Extension extension); + public Set getIdentifiers(); + + public void addIdentifier(Identifier identifier); + + public void removeIdentifier(Identifier identifier); + + /** * Overrides {@link eu.etaxonomy.cdm.model.common.CdmBase#toString()}. * This returns an String that identifies the object well without beeing necessarily unique. diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IdentifiableEntity.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IdentifiableEntity.java index c628fb436e..63c99990aa 100644 --- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IdentifiableEntity.java +++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IdentifiableEntity.java @@ -105,7 +105,7 @@ public abstract class IdentifiableEntity extensions = new HashSet(); + + @XmlElementWrapper(name = "Identifiers", nillable = true) + @XmlElement(name = "Identifier") + @OneToMany(fetch = FetchType.LAZY, orphanRemoval=true) + @Cascade({CascadeType.SAVE_UPDATE, CascadeType.MERGE, CascadeType.DELETE}) + @Merge(MergeMode.ADD_CLONE) + @NotNull + private Set identifiers = new HashSet(); @XmlElementWrapper(name = "Sources", nillable = true) @XmlElement(name = "IdentifiableSource") @@ -305,6 +313,55 @@ public abstract class IdentifiableEntity getIdentifiers(){ + if(this.identifiers == null) { + this.identifiers = new HashSet(); + } + return this.identifiers; + } + /** + * @param type + * @return a Set of extension value strings + */ + public Set getIdentifiers(DefinedTerm type){ + return getIdentifiers(type.getUuid()); + } + /** + * @param extensionTypeUuid + * @return a Set of extension value strings + */ + public Set getIdentifiers(UUID identifierTypeUuid){ + Set result = new HashSet(); + for (Identifier identifier : getIdentifiers()){ + if (identifier.getType().getUuid().equals(identifierTypeUuid)){ + result.add(identifier.getIdentifier()); + } + } + return result; + } + + public Identifier addIdentifier(String identifier, DefinedTerm identifierType){ + Identifier result = Identifier.NewInstance(this, identifier, identifierType); + return result; + } + + @Override + public void addIdentifier(Identifier identifier){ + if (identifier != null){ + identifier.setIdentifiedObj(this); + getIdentifiers().add(identifier); + } + } + @Override + public void removeIdentifier(Identifier identifier){ + if (identifier != null){ + logger.warn("TODO"); +// identifier.setExtendedObj(null); + getIdentifiers().remove(identifier); + } + } + @Override public Set getExtensions(){ if(extensions == null) { diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/Identifier.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/Identifier.java new file mode 100644 index 0000000000..bb35ffe78c --- /dev/null +++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/Identifier.java @@ -0,0 +1,122 @@ +// $Id$ +/** +* Copyright (C) 2007 EDIT +* European Distributed Institute of Taxonomy +* http://www.e-taxonomy.eu +* +* The contents of this file are subject to the Mozilla Public License Version 1.1 +* See LICENSE.TXT at the top of this package for the full license terms. +*/ +package eu.etaxonomy.cdm.model.common; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +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; + +import org.apache.log4j.Logger; +import org.hibernate.annotations.Any; +import org.hibernate.annotations.Index; +import org.hibernate.annotations.Table; +import org.hibernate.envers.Audited; +import org.hibernate.envers.NotAudited; +import org.hibernate.search.annotations.Field; + +import eu.etaxonomy.cdm.validation.annotation.NullOrNotEmpty; + +/** + * @author a.mueller + * @date 2014-06-30 + */ + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "Identifier", propOrder = { + "identifier", + "identifierType" +}) +@Entity +@Audited +@Table(appliesTo="Identifier", indexes = { @Index(name = "identifierIndex", columnNames = { "identifier" }) }) +public class Identifier extends VersionableEntity { + private static final long serialVersionUID = -798893563577142030L; + private static final Logger logger = Logger.getLogger(IdentifiableSource.class); + + @XmlElement(name ="Identifier" ) + @Column(length=800, name="identifier") + @Field + @NullOrNotEmpty + private String identifier; + + @XmlElement(name = "Type") + @XmlIDREF + @XmlSchemaType(name = "IDREF") + @ManyToOne(fetch = FetchType.LAZY) +// @IndexedEmbedded(depth=1) + private DefinedTerm type; + + @XmlElement(name = "IdentifiedObject") + @XmlIDREF + @XmlSchemaType(name = "IDREF") + @Any(metaDef = "CdmBase", + metaColumn=@Column(name = "identifiedObj_type"), + fetch = FetchType.LAZY, + optional = false) + @JoinColumn(name = "identifiedObj_id") + @NotAudited + private T identifiedObj; + +// **************************** FACTORY ******************************/ + + public static Identifier NewInstance(IdentifiableEntity entity, String identifier, DefinedTerm type){ + return new Identifier(entity, identifier, type); + } + +// ************************* CONSTRUCTOR ************************************ + + @Deprecated //for hibernate use only + protected Identifier(){}; + + public Identifier (IdentifiableEntity entity, String identifier, DefinedTerm type){ + this.identifier = identifier; + this.type = type; + logger.warn("Identified object not yet implemented"); +// this.identifiedObj = entity; + } + + +// ****************** GETTER / SETTER **********************/ + + public String getIdentifier() { + return identifier; + } + + + public void setIdentifier(String identifier) { + this.identifier = identifier; + } + + + public DefinedTerm getType() { + return type; + } + + + public void setType(DefinedTerm identifierType) { + this.type = identifierType; + } + + public T getIdentifiedObj() { + return identifiedObj; + } + protected void setIdentifiedObj(T identifiedObj) { + this.identifiedObj = identifiedObj; + } + +}