From 511fa38149be11d9d309bec7e86ec3ab3b26367c Mon Sep 17 00:00:00 2001
From: gakin <gakin>
Date: Thu, 15 Dec 2016 11:06:21 +0000
Subject: [PATCH] SSDM-4389 : Retrieve property types and add to Resource List
 xml

SVN: 37506
---
 .../generic/server/EntityRetriever.java       | 119 ++++++++++++------
 1 file changed, 81 insertions(+), 38 deletions(-)

diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/EntityRetriever.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/EntityRetriever.java
index dee08ffbb67..0f6f736f7ae 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/EntityRetriever.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/EntityRetriever.java
@@ -422,35 +422,69 @@ public class EntityRetriever
         Document doc = docBuilder.newDocument();
         Element rootElement = doc.createElement("masterData");
         doc.appendChild(rootElement);
-        List<SampleType> sampleTypes = md.getSampleTypes();
-        if (sampleTypes.size() > 0)
+
+        // append property types
+        List<IPropertyTypeImmutable> propertyTypes = listPropertyTypes();
+        if (propertyTypes.size() > 0)
         {
-            Element sampleTypesElement = doc.createElement("sampleTypes");
-            rootElement.appendChild(sampleTypesElement);
-            for (SampleType sampleType : sampleTypes)
+            Element propertyTypesElement = doc.createElement("propertyTypes");
+            rootElement.appendChild(propertyTypesElement);
+            for (IPropertyTypeImmutable propertyTypeImmutable : propertyTypes)
             {
-                Element sampleTypeElement = getEntityTypeXML(doc, sampleType, "sampleType");
-                sampleTypesElement.appendChild(sampleTypeElement);
-                Element propertyAssignmentsElement = getPropertyAssignmentXML(doc, sampleType.getPropertyAssignments());
-                sampleTypeElement.appendChild(propertyAssignmentsElement);
+                Element propertyTypeElement = doc.createElement("propertyType");
+                propertyTypeElement.setAttribute("code", propertyTypeImmutable.getCode());
+                propertyTypeElement.setAttribute("label", propertyTypeImmutable.getLabel());
+                propertyTypeElement.setAttribute("dataType", propertyTypeImmutable.getDataType().name());
+                propertyTypeElement.setAttribute("internalNamespace", String.valueOf(propertyTypeImmutable.isInternalNamespace()));
+                propertyTypeElement.setAttribute("managedInternally", String.valueOf(propertyTypeImmutable.isManagedInternally()));
+                propertyTypeElement.setAttribute("description", propertyTypeImmutable.getDescription());
+                propertyTypesElement.appendChild(propertyTypeElement);
             }
         }
 
+        // append sample types
+        List<SampleType> sampleTypes = md.getSampleTypes();
+        appendSampleTypes(doc, rootElement, sampleTypes);
+
+        // append experiment types
         List<ExperimentType> experimentTypes = md.getExperimentTypes();
-        if (experimentTypes.size() > 0)
+        appendExperimentTypes(doc, rootElement, experimentTypes);
+
+        // append data set types
+        List<DataSetType> dataSetTypes = md.getDataSetTypes();
+        appendDataSetTypes(doc, rootElement, dataSetTypes);
+
+        List<MaterialType> materialTypes = md.getMaterialTypes();
+        appendMaterialTypes(doc, rootElement, materialTypes);
+
+        TransformerFactory transformerFactory = TransformerFactory.newInstance();
+        Transformer transformer = transformerFactory.newTransformer();
+        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
+        DOMSource source = new DOMSource(doc);
+        StringWriter writer = new StringWriter();
+        StreamResult result = new StreamResult(writer);
+        transformer.transform(source, result);
+        return writer.toString();
+    }
+
+    private void appendMaterialTypes(Document doc, Element rootElement, List<MaterialType> materialTypes)
+    {
+        if (materialTypes.size() > 0)
         {
-            Element expTypesElement = doc.createElement("experimentTypes");
-            rootElement.appendChild(expTypesElement);
-            for (ExperimentType expType : experimentTypes)
+            Element materialTypesElement = doc.createElement("materialTypes");
+            rootElement.appendChild(materialTypesElement);
+            for (MaterialType matType : materialTypes)
             {
-                Element experimentTypeElement = getEntityTypeXML(doc, expType, "experimentType");
-                expTypesElement.appendChild(experimentTypeElement);
-                Element propertyAssignmentsElement = getPropertyAssignmentXML(doc, expType.getPropertyAssignments());
-                experimentTypeElement.appendChild(propertyAssignmentsElement);
+                Element matTypeElement = getEntityTypeXML(doc, matType, "materialType");
+                materialTypesElement.appendChild(matTypeElement);
+                Element propertyAssignmentsElement = getPropertyAssignmentXML(doc, matType.getPropertyAssignments());
+                matTypeElement.appendChild(propertyAssignmentsElement);
             }
         }
+    }
 
-        List<DataSetType> dataSetTypes = md.getDataSetTypes();
+    private void appendDataSetTypes(Document doc, Element rootElement, List<DataSetType> dataSetTypes)
+    {
         if (dataSetTypes.size() > 0)
         {
             Element dataSetTypesElement = doc.createElement("dataSetTypes");
@@ -463,37 +497,46 @@ public class EntityRetriever
                 dsTypeElement.appendChild(propertyAssignmentsElement);
             }
         }
+    }
 
-        List<MaterialType> materialTypes = md.getMaterialTypes();
-        if (materialTypes.size() > 0)
+    private void appendExperimentTypes(Document doc, Element rootElement, List<ExperimentType> experimentTypes)
+    {
+        if (experimentTypes.size() > 0)
         {
-            Element materialTypesElement = doc.createElement("materialTypes");
-            rootElement.appendChild(materialTypesElement);
-            for (MaterialType matType : materialTypes)
+            Element expTypesElement = doc.createElement("experimentTypes");
+            rootElement.appendChild(expTypesElement);
+            for (ExperimentType expType : experimentTypes)
             {
-                Element matTypeElement = getEntityTypeXML(doc, matType, "materialType");
-                materialTypesElement.appendChild(matTypeElement);
-                Element propertyAssignmentsElement = getPropertyAssignmentXML(doc, matType.getPropertyAssignments());
-                matTypeElement.appendChild(propertyAssignmentsElement);
+                Element experimentTypeElement = getEntityTypeXML(doc, expType, "experimentType");
+                expTypesElement.appendChild(experimentTypeElement);
+                Element propertyAssignmentsElement = getPropertyAssignmentXML(doc, expType.getPropertyAssignments());
+                experimentTypeElement.appendChild(propertyAssignmentsElement);
             }
         }
+    }
 
-        TransformerFactory transformerFactory = TransformerFactory.newInstance();
-        Transformer transformer = transformerFactory.newTransformer();
-        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
-        DOMSource source = new DOMSource(doc);
-        StringWriter writer = new StringWriter();
-        StreamResult result = new StreamResult(writer);
-        transformer.transform(source, result);
-        return writer.toString();
+    private void appendSampleTypes(Document doc, Element rootElement, List<SampleType> sampleTypes)
+    {
+        if (sampleTypes.size() > 0)
+        {
+            Element sampleTypesElement = doc.createElement("sampleTypes");
+            rootElement.appendChild(sampleTypesElement);
+            for (SampleType sampleType : sampleTypes)
+            {
+                Element sampleTypeElement = getEntityTypeXML(doc, sampleType, "sampleType");
+                sampleTypesElement.appendChild(sampleTypeElement);
+                Element propertyAssignmentsElement = getPropertyAssignmentXML(doc, sampleType.getPropertyAssignments());
+                sampleTypeElement.appendChild(propertyAssignmentsElement);
+            }
+        }
     }
 
     private <E extends ICodeHolder> Element getEntityTypeXML(Document doc, E entityType,
             String elementName)
     {
-        Element sampleTypeElement = doc.createElement(elementName);
-        sampleTypeElement.setAttribute("code", entityType.getCode());
-        return sampleTypeElement;
+        Element typeElement = doc.createElement(elementName);
+        typeElement.setAttribute("code", entityType.getCode());
+        return typeElement;
     }
 
     private Element getPropertyAssignmentXML(Document doc, List<PropertyAssignment> propertyAssignments)
-- 
GitLab