diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/MasterData.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/MasterData.java index fc7822dd1274b760bb7baf988700e6982b3c2914..3758d566d3d054c35226c85dcd7c9f3321b43d74 100644 --- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/MasterData.java +++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/MasterData.java @@ -22,6 +22,7 @@ import java.util.Map; import org.apache.commons.collections4.map.MultiKeyMap; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.externaldms.ExternalDms; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType; @@ -36,6 +37,8 @@ class MasterData { private Map<String, FileFormatType> fileFormatTypesToProcess = new HashMap<String, FileFormatType>(); + private Map<String, ExternalDms> externalDataManagementSystemsToProcess = new HashMap<>(); + private Map<String, Script> validationPluginsToProcess = new HashMap<String, Script>(); private Map<String, NewVocabulary> vocabulariesToProcess = new HashMap<String, NewVocabulary>(); @@ -107,6 +110,16 @@ class MasterData this.fileFormatTypesToProcess = fileFormatTypesToProcess; } + public Map<String, ExternalDms> getExternalDataManagementSystemsToProcess() + { + return externalDataManagementSystemsToProcess; + } + + public void setExternalDataManagementSystemsToProcess(Map<String, ExternalDms> edmsToProcess) + { + this.externalDataManagementSystemsToProcess = edmsToProcess; + } + public void setVocabulariesToProcess(Map<String, NewVocabulary> vocabulariesToProcess) { this.vocabulariesToProcess = vocabulariesToProcess; diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/MasterDataParser.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/MasterDataParser.java index 58dd1b31517b223581b2959ed845fe455d727324..457de8e9e01de6eb56079c10e56c84d46d7d4a8a 100644 --- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/MasterDataParser.java +++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/MasterDataParser.java @@ -35,6 +35,8 @@ import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.externaldms.ExternalDms; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.externaldms.ExternalDmsAddressType; import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.translator.DefaultNameTranslator; import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.translator.INameTranslator; import ch.systemsx.cisd.openbis.generic.shared.basic.CodeConverter; @@ -65,6 +67,7 @@ public class MasterDataParser private Map<String, Script> validationPlugins = new HashMap<String, Script>(); + private Map<String, ExternalDms> externalDataManagementSystems = new HashMap<>(); private Map<String, FileFormatType> fileFormatTypes = new HashMap<String, FileFormatType>(); private Map<String, PropertyType> propertyTypes = new HashMap<String, PropertyType>(); @@ -122,6 +125,7 @@ public class MasterDataParser parseSampleTypes(docElement.getElementsByTagName("xmd:objectTypes")); parseDataSetTypes(docElement.getElementsByTagName("xmd:dataSetTypes")); parseExperimentTypes(docElement.getElementsByTagName("xmd:collectionTypes")); + parseExternalDataManagementSystems(docElement.getElementsByTagName("xml:externalDataManagementSystems")); } @@ -170,6 +174,11 @@ public class MasterDataParser return materialTypes; } + public Map<String, ExternalDms> getExternalDataManagementSystems() + { + return externalDataManagementSystems; + } + private void parseValidationPlugins(NodeList validationPluginsNode) throws XPathExpressionException { if (validationPluginsNode.getLength() == 0) @@ -196,6 +205,29 @@ public class MasterDataParser } } + private void parseExternalDataManagementSystems(NodeList edmsNode) throws XPathExpressionException + { + if (edmsNode.getLength() == 0) + { + return; + } + validateElementNode(edmsNode, "externalDataManagementSystems"); + + NodeList edmsNodes = ((Element) edmsNode.item(0)).getElementsByTagName("xmd:externalDataManagementSystem"); + + for (int i = 0; i < edmsNodes.getLength(); i++) + { + Element element = (Element) edmsNodes.item(i); + ExternalDms edms = new ExternalDms(); + String code = getAttribute(element, "code"); + edms.setCode(code); + edms.setLabel(getAttribute(element, "label")); + edms.setAddressType(ExternalDmsAddressType.valueOf(getAttribute(element, "addressType"))); + edms.setAddress(getAttribute(element, "address")); + externalDataManagementSystems.put(code, edms); + } + } + private void parseFileFormatTypes(NodeList fileFormatTypesNode) throws XPathExpressionException { if (fileFormatTypesNode.getLength() == 0) @@ -203,14 +235,14 @@ public class MasterDataParser return; } validateElementNode(fileFormatTypesNode, "fileFormatTypes"); - + Element fileFormatTypesElement = (Element) fileFormatTypesNode.item(0); NodeList fileFormatTypeNodes = fileFormatTypesElement.getElementsByTagName("xmd:fileFormatType"); - + for (int i = 0; i < fileFormatTypeNodes.getLength(); i++) { Element typeElement = (Element) fileFormatTypeNodes.item(i); - + FileFormatType type = new FileFormatType(); String code = getAttribute(typeElement, "code"); type.setCode(code); @@ -219,7 +251,7 @@ public class MasterDataParser fileFormatTypes.put(code, type); } } - + private void validateElementNode(NodeList nodeList, String tagName) throws XPathExpressionException { if (nodeList.getLength() != 1) @@ -257,7 +289,7 @@ public class MasterDataParser private void parseVocabularyTerms(Element vocabElement, NewVocabulary newVocabulary) { - NodeList termNodes = vocabElement.getElementsByTagName("term"); + NodeList termNodes = vocabElement.getElementsByTagName("xmd:term"); for (int i = 0; i < termNodes.getLength(); i++) { Element termElement = (Element) termNodes.item(i); diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/MasterDataSynchronizer.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/MasterDataSynchronizer.java index 136c2475e356b0ea43dc555b5b9580ec9cef89d6..80b5b1c37d5d65c0dce72b213ec734104226c9e6 100644 --- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/MasterDataSynchronizer.java +++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/MasterDataSynchronizer.java @@ -25,6 +25,7 @@ import java.util.Map; import org.apache.commons.collections4.map.MultiKeyMap; import org.apache.log4j.Logger; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.externaldms.ExternalDms; import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.common.ServiceFinderUtils; import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.util.Monitor; import ch.systemsx.cisd.common.exceptions.UserFailureException; @@ -96,6 +97,8 @@ public class MasterDataSynchronizer processEntityTypes(masterData.getExperimentTypesToProcess(), propertyAssignmentsToProcess); monitor.log("process material type property assignments"); processDeferredMaterialTypePropertyAssignments(propertyAssignmentsToProcess); + monitor.log("process external data management systems"); + processExternalDataManagementSystems(masterData.getExternalDataManagementSystemsToProcess()); synchronizerFacade.printSummary(); } @@ -149,6 +152,11 @@ public class MasterDataSynchronizer } } + private void processExternalDataManagementSystems(Map<String, ExternalDms> externalDataManagementSystems) + { + // TODO + } + private void processFileFormatTypes(Map<String, FileFormatType> fileFormatTypesToProcess) { List<FileFormatType> fileFormatTypes = commonServer.listFileFormatTypes(sessionToken); diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/ResourceListParser.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/ResourceListParser.java index 4eeb57a876438b6d7574262dc3a48443103d03d8..afab0a07c088d7074e13c22e7528486805846bd2 100644 --- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/ResourceListParser.java +++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/ResourceListParser.java @@ -235,7 +235,7 @@ public class ResourceListParser masterData.setExperimentTypesToProcess(mdParser.getExperimentTypes()); masterData.setMaterialTypesToProcess(mdParser.getMaterialTypes()); masterData.setPropertyAssignmentsToProcess(mdParser.getEntityPropertyAssignments()); -// masterData.setExternalDataManagementSystemsToProcess(mdParser.getExternalDataManagementSystems()); + masterData.setExternalDataManagementSystemsToProcess(mdParser.getExternalDataManagementSystems()); } private void parseMetaData(String uri, Date lastModificationDate, Node xdNode) throws XPathExpressionException