ref #9771 add handling for externally managed
authorAndreas Müller <a.mueller@bgbm.org>
Thu, 22 Jun 2023 21:25:45 +0000 (23:25 +0200)
committerAndreas Müller <a.mueller@bgbm.org>
Thu, 22 Jun 2023 21:27:09 +0000 (23:27 +0200)
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmImportBase.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdm2cdm/Cdm2CdmImportConfigurator.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/hibernate/EnumUserType.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ExternallyManaged.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/term/DefinedTermBase.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/term/TermBase.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/term/TermVocabulary.java

index e980fcd17c5c6b1e867cab60179d9360b769330d..0976ced8238907f827f6add828d6dcbf2e84dc5e 100644 (file)
@@ -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<? extends OriginalSourceBase> sources) {
index d333bef06c807fb2184f54c89bba14fe2f6ee510..bb883bd7f94f5659c1b8452707236f1474b0fb2b 100644 (file)
@@ -40,6 +40,8 @@ public  class Cdm2CdmImportConfigurator
     private Collection<UUID> 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;
+    }
 }
index 5903a690a100ac80843d22bdb4931c6d6fd5ce75..c3261d43e6b902537bc5419ac188ee092cc1a1c1 100644 (file)
@@ -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<E extends Enum<E>>
         //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()));
         }
index aa3aafb36ac6dc620b459ee40fe9480ffb013826..4bdf5d51f9a75ddb8a129755c01366a51b1e1397 100644 (file)
@@ -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 {
index 047df8ea756ec10db516227db828b3fd07df20b4..350896165ca3c08e7b3789ef6036765b0a95dc7e 100644 (file)
@@ -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<T extends DefinedTermBase>
     //empty string is explicitly allowed and should be distinguished from NULL!
     private String symbol2;
 
-    private ExternallyManaged externallyManaged;
-
 
 //***************************** CONSTRUCTOR *******************************************/
 
index 0bab59584f1be7f790ba12769d1da504f6990b70..696b31e78a5aa7c9d37f28e38388409c89b92adb 100644 (file)
@@ -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<Representation> 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() {
index 42c06290d80de044ebf76733c959129ba15eb6da..985333a9d4195c426e05516c6f44bf0ad1092d81 100644 (file)
@@ -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<T extends DefinedTermBase>
        @IndexedEmbedded(depth = 2)
        protected Set<T> terms = newTermSet();
 
-    private ExternallyManaged externallyManaged;
-
 // ********************************* FACTORY METHODS *****************************************/
 
        public static TermVocabulary NewInstance(TermType type){