From dffd2d5d36bbd3ce023c198eadb875284e38a91a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andreas=20M=C3=BCller?= Date: Thu, 22 Jun 2023 23:25:45 +0200 Subject: [PATCH] ref #9771 add handling for externally managed --- .../cdm/io/cdm2cdm/Cdm2CdmImportBase.java | 22 +++++++++++ .../io/cdm2cdm/Cdm2CdmImportConfigurator.java | 9 +++++ .../etaxonomy/cdm/hibernate/EnumUserType.java | 7 ++++ .../cdm/model/common/ExternallyManaged.java | 39 ++++++++++++++++++- .../cdm/model/term/DefinedTermBase.java | 4 -- .../eu/etaxonomy/cdm/model/term/TermBase.java | 15 ++++++- .../cdm/model/term/TermVocabulary.java | 6 +-- 7 files changed, 91 insertions(+), 11 deletions(-) diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmImportBase.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmImportBase.java index e980fcd17c..0976ced823 100644 --- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmImportBase.java +++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmImportBase.java @@ -22,10 +22,12 @@ import java.util.UUID; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.joda.time.DateTime; import eu.etaxonomy.cdm.api.application.CdmApplicationController; import eu.etaxonomy.cdm.api.application.ICdmApplication; import eu.etaxonomy.cdm.api.application.ICdmRepository; +import eu.etaxonomy.cdm.common.URI; import eu.etaxonomy.cdm.common.monitor.IProgressMonitor; import eu.etaxonomy.cdm.database.DbSchemaValidation; import eu.etaxonomy.cdm.database.ICdmDataSource; @@ -43,10 +45,13 @@ import eu.etaxonomy.cdm.model.agent.Team; import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase; import eu.etaxonomy.cdm.model.common.AnnotatableEntity; import eu.etaxonomy.cdm.model.common.Annotation; +import eu.etaxonomy.cdm.model.common.AuthorityType; import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.common.Credit; import eu.etaxonomy.cdm.model.common.Extension; import eu.etaxonomy.cdm.model.common.ExtensionType; +import eu.etaxonomy.cdm.model.common.ExternallyManaged; +import eu.etaxonomy.cdm.model.common.ExternallyManagedImport; import eu.etaxonomy.cdm.model.common.IIntextReferencable; import eu.etaxonomy.cdm.model.common.IIntextReferenceTarget; import eu.etaxonomy.cdm.model.common.IdentifiableEntity; @@ -839,6 +844,7 @@ public abstract class Cdm2CdmImportBase T result = handlePersisted((IdentifiableEntity)termBase, state); //complete handleCollection(result, TermBase.class, "representations", Representation.class, state); + handleExternallyManaged(result, state); return result; } @@ -964,6 +970,22 @@ public abstract class Cdm2CdmImportBase return result; } + private void handleExternallyManaged(TermBase result, Cdm2CdmImportState state) { + if (state.getConfig().isExternallyManaged()) { + ExternallyManaged externallyManaged = new ExternallyManaged(); + externallyManaged.setAuthorityType(AuthorityType.EXTERN); + externallyManaged.setExternalId(result.getUuid().toString()); + String subdomain = result.isInstanceOf(DefinedTermBase.class )? "term/": + result.isInstanceOf(TermVocabulary.class) ? "voc/" : + "list/"; + externallyManaged.setExternalLink(URI.create("https://terms.cybertaxonomy.org/"+ subdomain + result.getUuid() )); //TODO + externallyManaged.setImportMethod(ExternallyManagedImport.CDM_TERMS); + externallyManaged.setLastRetrieved(DateTime.now()); + result.setExternallyManaged(externallyManaged); + } + + } + //TODO for some reason the sources are still persisted, though not related to source holder //probably this is related to 1:1 relationship private void filterImportSources(Set sources) { diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmImportConfigurator.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmImportConfigurator.java index d333bef06c..bb883bd7f9 100644 --- a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmImportConfigurator.java +++ b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmImportConfigurator.java @@ -40,6 +40,8 @@ public class Cdm2CdmImportConfigurator private Collection graphFilter = new HashSet<>(); private boolean partialVocabulariesForGraphs = true; + private boolean isExternallyManaged = false; + private ITaxonNodeOutStreamPartitioner partitioner; private boolean concurrent = false; // @@ -185,4 +187,11 @@ public class Cdm2CdmImportConfigurator public void setPartialVocabulariesForGraphs(boolean partialVocabulariesForGraphs) { this.partialVocabulariesForGraphs = partialVocabulariesForGraphs; } + + public boolean isExternallyManaged() { + return isExternallyManaged; + } + public void setExternallyManaged(boolean isExternallyManaged) { + this.isExternallyManaged = isExternallyManaged; + } } diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/hibernate/EnumUserType.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/hibernate/EnumUserType.java index 5903a690a1..c3261d43e6 100644 --- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/hibernate/EnumUserType.java +++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/hibernate/EnumUserType.java @@ -27,6 +27,7 @@ import org.jadira.usertype.spi.shared.AbstractUserType; import eu.etaxonomy.cdm.model.common.AuthorityType; import eu.etaxonomy.cdm.model.common.CdmClass; +import eu.etaxonomy.cdm.model.common.ExternallyManagedImport; import eu.etaxonomy.cdm.model.description.DescriptionType; import eu.etaxonomy.cdm.model.media.ExternalLinkType; import eu.etaxonomy.cdm.model.metadata.CdmMetaDataPropertyName; @@ -177,6 +178,12 @@ public class EnumUserType> //TaxonomicOperation }else if (clazz.equals(TaxonomicOperationType.class)){ return TaxonomicOperationType.getByKey(val); + //Externally Managed + }else if (clazz.equals(ExternallyManagedImport.class)){ + return ExternallyManagedImport.getByKey(val); + //AuthorityType + }else if (clazz.equals(AuthorityType.class)){ + return AuthorityType.getByKey(val); }else{ throw new IllegalArgumentException(String.format("EnumType %s not supported by %s.", clazz.getSimpleName(), EnumUserType.class.getSimpleName())); } diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ExternallyManaged.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ExternallyManaged.java index aa3aafb36a..4bdf5d51f9 100644 --- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ExternallyManaged.java +++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ExternallyManaged.java @@ -104,7 +104,44 @@ public class ExternallyManaged implements Cloneable, Serializable, ICheckEmpty{ && externalLink == null && importMethod == null && lastRetrieved == null; } -// ************************ CLONE ***********************/ +// ************************ GETTER /SETTER ***********************/ + + public DateTime getLastRetrieved() { + return lastRetrieved; + } + public void setLastRetrieved(DateTime lastRetrieved) { + this.lastRetrieved = lastRetrieved; + } + + public String getExternalId() { + return externalId; + } + public void setExternalId(String externalId) { + this.externalId = externalId; + } + + public URI getExternalLink() { + return externalLink; + } + public void setExternalLink(URI externalLink) { + this.externalLink = externalLink; + } + + public AuthorityType getAuthorityType() { + return authorityType; + } + public void setAuthorityType(AuthorityType authorityType) { + this.authorityType = authorityType; + } + + public ExternallyManagedImport getImportMethod() { + return importMethod; + } + public void setImportMethod(ExternallyManagedImport importMethod) { + this.importMethod = importMethod; + } + +// ********************** CLONE ***********************************/ @Override protected Object clone() throws CloneNotSupportedException { diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/term/DefinedTermBase.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/term/DefinedTermBase.java index 047df8ea75..350896165c 100644 --- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/term/DefinedTermBase.java +++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/term/DefinedTermBase.java @@ -53,7 +53,6 @@ import eu.etaxonomy.cdm.model.ICdmUuidCacher; import eu.etaxonomy.cdm.model.common.AnnotationType; import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.common.ExtensionType; -import eu.etaxonomy.cdm.model.common.ExternallyManaged; import eu.etaxonomy.cdm.model.common.Language; import eu.etaxonomy.cdm.model.common.MarkerType; import eu.etaxonomy.cdm.model.common.RelationshipTermBase; @@ -91,7 +90,6 @@ import eu.etaxonomy.cdm.model.occurrence.PreservationMethod; "idInVocabulary", "symbol", "symbol2", - "externallyManaged", }) @XmlRootElement(name = "DefinedTermBase") @XmlSeeAlso({ @@ -214,8 +212,6 @@ public abstract class DefinedTermBase //empty string is explicitly allowed and should be distinguished from NULL! private String symbol2; - private ExternallyManaged externallyManaged; - //***************************** CONSTRUCTOR *******************************************/ diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/term/TermBase.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/term/TermBase.java index 0bab59584f..696b31e78a 100644 --- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/term/TermBase.java +++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/term/TermBase.java @@ -40,6 +40,7 @@ import org.hibernate.search.annotations.FieldBridge; import eu.etaxonomy.cdm.common.URI; import eu.etaxonomy.cdm.hibernate.search.UriBridge; +import eu.etaxonomy.cdm.model.common.ExternallyManaged; import eu.etaxonomy.cdm.model.common.IdentifiableEntity; import eu.etaxonomy.cdm.model.common.Language; import eu.etaxonomy.cdm.model.description.TextData; @@ -50,7 +51,8 @@ import eu.etaxonomy.cdm.strategy.cache.term.TermDefaultCacheStrategy; @XmlType(name = "TermBase", propOrder = { "uri", "termType", - "representations" + "representations", + "externallyManaged" }) @XmlSeeAlso({ DefinedTermBase.class, @@ -92,6 +94,8 @@ public abstract class TermBase // @IndexedEmbedded no need for embedding since we are using the DefinedTermBaseClassBridge private Set representations = new HashSet<>(); + private ExternallyManaged externallyManaged; + //******************* CONSTRUCTOR *************************************/ //for hibernate (and JAXB?) use only, *packet* private required by bytebuddy @@ -264,6 +268,15 @@ public abstract class TermBase return (repr == null) ? null :repr.getDescription(); } + @Transient + public ExternallyManaged getExternallyManaged() { + return externallyManaged; + } + public void setExternallyManaged(ExternallyManaged externallyManaged) { + this.externallyManaged = externallyManaged; + } + +//********************** TO STRING *****************************************************/ @Override public String toString() { diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/term/TermVocabulary.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/term/TermVocabulary.java index 42c06290d8..985333a9d4 100644 --- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/term/TermVocabulary.java +++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/term/TermVocabulary.java @@ -42,7 +42,6 @@ import eu.etaxonomy.cdm.common.CdmUtils; import eu.etaxonomy.cdm.common.URI; import eu.etaxonomy.cdm.compare.term.TermLanguageComparator; import eu.etaxonomy.cdm.hibernate.search.UriBridge; -import eu.etaxonomy.cdm.model.common.ExternallyManaged; import eu.etaxonomy.cdm.model.common.Language; /** @@ -54,8 +53,7 @@ import eu.etaxonomy.cdm.model.common.Language; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "TermVocabulary", propOrder = { "termSourceUri", - "terms", - "externallyManaged" + "terms" }) @XmlRootElement(name = "TermVocabulary") @Entity @@ -88,8 +86,6 @@ public class TermVocabulary @IndexedEmbedded(depth = 2) protected Set terms = newTermSet(); - private ExternallyManaged externallyManaged; - // ********************************* FACTORY METHODS *****************************************/ public static TermVocabulary NewInstance(TermType type){ -- 2.34.1