@XmlElement(name = "TitleCache", required = true)
@XmlJavaTypeAdapter(FormattedTextAdapter.class)
- @Column(length=255, name="titleCache")
+ @Column(name="titleCache")
@Match(value=MatchMode.CACHE, cacheReplaceMode=ReplaceMode.ALL)
@NotEmpty(groups = Level2.class) // implictly NotNull
@Size(max = 800) //see #1592
@Merge(MergeMode.ADD_CLONE)
@NotNull
private Set<Extension> extensions = new HashSet<Extension>();
+
+ @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<Identifier> identifiers = new HashSet<Identifier>();
@XmlElementWrapper(name = "Sources", nillable = true)
@XmlElement(name = "IdentifiableSource")
getCredits().remove(index);
}
+ @Override
+ public Set<Identifier> getIdentifiers(){
+ if(this.identifiers == null) {
+ this.identifiers = new HashSet<Identifier>();
+ }
+ return this.identifiers;
+ }
+ /**
+ * @param type
+ * @return a Set of extension value strings
+ */
+ public Set<String> getIdentifiers(DefinedTerm type){
+ return getIdentifiers(type.getUuid());
+ }
+ /**
+ * @param extensionTypeUuid
+ * @return a Set of extension value strings
+ */
+ public Set<String> getIdentifiers(UUID identifierTypeUuid){
+ Set<String> result = new HashSet<String>();
+ 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<Extension> getExtensions(){
if(extensions == null) {
--- /dev/null
+// $Id$\r
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+package eu.etaxonomy.cdm.model.common;\r
+\r
+import javax.persistence.Column;\r
+import javax.persistence.Entity;\r
+import javax.persistence.FetchType;\r
+import javax.persistence.JoinColumn;\r
+import javax.persistence.ManyToOne;\r
+import javax.xml.bind.annotation.XmlAccessType;\r
+import javax.xml.bind.annotation.XmlAccessorType;\r
+import javax.xml.bind.annotation.XmlElement;\r
+import javax.xml.bind.annotation.XmlIDREF;\r
+import javax.xml.bind.annotation.XmlSchemaType;\r
+import javax.xml.bind.annotation.XmlType;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.hibernate.annotations.Any;\r
+import org.hibernate.annotations.Index;\r
+import org.hibernate.annotations.Table;\r
+import org.hibernate.envers.Audited;\r
+import org.hibernate.envers.NotAudited;\r
+import org.hibernate.search.annotations.Field;\r
+\r
+import eu.etaxonomy.cdm.validation.annotation.NullOrNotEmpty;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @date 2014-06-30\r
+ */\r
+\r
+@XmlAccessorType(XmlAccessType.FIELD)\r
+@XmlType(name = "Identifier", propOrder = {\r
+ "identifier",\r
+ "identifierType"\r
+})\r
+@Entity\r
+@Audited\r
+@Table(appliesTo="Identifier", indexes = { @Index(name = "identifierIndex", columnNames = { "identifier" }) })\r
+public class Identifier<T extends IdentifiableEntity> extends VersionableEntity {\r
+ private static final long serialVersionUID = -798893563577142030L;\r
+ private static final Logger logger = Logger.getLogger(IdentifiableSource.class);\r
+\r
+ @XmlElement(name ="Identifier" )\r
+ @Column(length=800, name="identifier")\r
+ @Field\r
+ @NullOrNotEmpty\r
+ private String identifier;\r
+ \r
+ @XmlElement(name = "Type")\r
+ @XmlIDREF\r
+ @XmlSchemaType(name = "IDREF")\r
+ @ManyToOne(fetch = FetchType.LAZY)\r
+// @IndexedEmbedded(depth=1)\r
+ private DefinedTerm type;\r
+\r
+ @XmlElement(name = "IdentifiedObject")\r
+ @XmlIDREF\r
+ @XmlSchemaType(name = "IDREF")\r
+ @Any(metaDef = "CdmBase",\r
+ metaColumn=@Column(name = "identifiedObj_type"),\r
+ fetch = FetchType.LAZY,\r
+ optional = false)\r
+ @JoinColumn(name = "identifiedObj_id")\r
+ @NotAudited\r
+ private T identifiedObj;\r
+ \r
+// **************************** FACTORY ******************************/ \r
+ \r
+ public static Identifier NewInstance(IdentifiableEntity entity, String identifier, DefinedTerm type){\r
+ return new Identifier(entity, identifier, type);\r
+ }\r
+\r
+// ************************* CONSTRUCTOR ************************************ \r
+ \r
+ @Deprecated //for hibernate use only\r
+ protected Identifier(){};\r
+ \r
+ public Identifier (IdentifiableEntity<?> entity, String identifier, DefinedTerm type){\r
+ this.identifier = identifier;\r
+ this.type = type;\r
+ logger.warn("Identified object not yet implemented");\r
+// this.identifiedObj = entity;\r
+ }\r
+\r
+ \r
+// ****************** GETTER / SETTER **********************/ \r
+ \r
+ public String getIdentifier() {\r
+ return identifier;\r
+ }\r
+\r
+\r
+ public void setIdentifier(String identifier) {\r
+ this.identifier = identifier;\r
+ }\r
+\r
+\r
+ public DefinedTerm getType() {\r
+ return type;\r
+ }\r
+\r
+\r
+ public void setType(DefinedTerm identifierType) {\r
+ this.type = identifierType;\r
+ }\r
+ \r
+ public T getIdentifiedObj() {\r
+ return identifiedObj;\r
+ }\r
+ protected void setIdentifiedObj(T identifiedObj) {\r
+ this.identifiedObj = identifiedObj;\r
+ }\r
+ \r
+}\r