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;
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;
T result = handlePersisted((IdentifiableEntity)termBase, state);
//complete
handleCollection(result, TermBase.class, "representations", Representation.class, state);
+ handleExternallyManaged(result, state);
return result;
}
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) {
private Collection<UUID> graphFilter = new HashSet<>();
private boolean partialVocabulariesForGraphs = true;
+ private boolean isExternallyManaged = false;
+
private ITaxonNodeOutStreamPartitioner partitioner;
private boolean concurrent = false; //
public void setPartialVocabulariesForGraphs(boolean partialVocabulariesForGraphs) {
this.partialVocabulariesForGraphs = partialVocabulariesForGraphs;
}
+
+ public boolean isExternallyManaged() {
+ return isExternallyManaged;
+ }
+ public void setExternallyManaged(boolean isExternallyManaged) {
+ this.isExternallyManaged = isExternallyManaged;
+ }
}
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;
//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()));
}
&& 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 {
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;
"idInVocabulary",
"symbol",
"symbol2",
- "externallyManaged",
})
@XmlRootElement(name = "DefinedTermBase")
@XmlSeeAlso({
//empty string is explicitly allowed and should be distinguished from NULL!
private String symbol2;
- private ExternallyManaged externallyManaged;
-
//***************************** CONSTRUCTOR *******************************************/
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;
@XmlType(name = "TermBase", propOrder = {
"uri",
"termType",
- "representations"
+ "representations",
+ "externallyManaged"
})
@XmlSeeAlso({
DefinedTermBase.class,
// @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
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() {
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;
/**
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "TermVocabulary", propOrder = {
"termSourceUri",
- "terms",
- "externallyManaged"
+ "terms"
})
@XmlRootElement(name = "TermVocabulary")
@Entity
@IndexedEmbedded(depth = 2)
protected Set<T> terms = newTermSet();
- private ExternallyManaged externallyManaged;
-
// ********************************* FACTORY METHODS *****************************************/
public static TermVocabulary NewInstance(TermType type){