From 73bcd32e435567618a993698731d4fd1a7dd7158 Mon Sep 17 00:00:00 2001
From: juanf <juanf>
Date: Wed, 15 Jun 2016 14:38:54 +0000
Subject: [PATCH] SSDM-3733 : TXT implementation, properties labels

SVN: 36691
---
 .../exports-api/exports-api.py                | 44 ++++++++++++++++---
 1 file changed, 39 insertions(+), 5 deletions(-)

diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/exports-api.py b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/exports-api.py
index 7b2bc2761b4..bc9060255e7 100644
--- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/exports-api.py
+++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/exports-api.py
@@ -39,6 +39,8 @@ from ch.systemsx.cisd.common.mail import EMailAddress;
 
 #To obtain the openBIS URL
 from ch.systemsx.cisd.openbis.dss.generic.server import DataStoreServer;
+from ch.systemsx.cisd.openbis.dss.generic.server import SessionTokenManager
+from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
 OPENBISURL = DataStoreServer.getConfigParameters().getServerURL() + "/openbis/openbis";
 V3_DSS_BEAN = "data-store-server_INTERNAL";
 
@@ -50,11 +52,21 @@ from ch.ethz.sis.openbis.generic.asapi.v3.dto.project.search import ProjectSearc
 from ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.search import ExperimentSearchCriteria;
 from ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search import SampleSearchCriteria;
 from ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.search import DataSetSearchCriteria;
+
 from ch.ethz.sis.openbis.generic.asapi.v3.dto.project.fetchoptions import ProjectFetchOptions;
 from ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.fetchoptions import ExperimentFetchOptions;
 from ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions import SampleFetchOptions;
 from ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.fetchoptions import DataSetFetchOptions;
 
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.search import ExperimentTypeSearchCriteria;
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.fetchoptions import ExperimentTypeFetchOptions;
+
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search import SampleTypeSearchCriteria;
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions import SampleTypeFetchOptions;
+
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.search import DataSetTypeSearchCriteria;
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.fetchoptions import DataSetTypeFetchOptions;
+
 #V3 API - Files
 from ch.ethz.sis.openbis.generic.dssapi.v3 import IDataStoreServerApi;
 from ch.ethz.sis.openbis.generic.dssapi.v3.dto.datasetfile.search import DataSetFileSearchCriteria;
@@ -323,7 +335,7 @@ def export(sessionToken, entities, includeRoot, userEmail, mailClient):
 			entityJson = String(objectMapper.writeValueAsString(entityObj));
 			addFile(tempDirPath, entityFilePath, "json", entityJson.getBytes(), zos);
 			#TEXT
- 			entityTXT = String(getTXT(entityObj));
+ 			entityTXT = String(getTXT(entityObj, v3, sessionToken));
  			addFile(tempDirPath, entityFilePath, "txt", entityTXT.getBytes(), zos);
 			
 			
@@ -342,20 +354,38 @@ def export(sessionToken, entities, includeRoot, userEmail, mailClient):
 	FileUtils.forceDelete(File(tempZipFilePath));
 	return True
 	
-def getTXT(entityObj):
+def getTXT(entityObj, v3, sessionToken):
 	txtBuilder = StringBuilder();
 	txtBuilder.append(entityObj.getCode()).append("\n");
 	txtBuilder.append("# Identification Info:").append("\n");
 	
+	typeObj = None
 	if isinstance(entityObj, Project):
 		txtBuilder.append("Kind: Project").append("\n");
 	if isinstance(entityObj, Experiment):
 		txtBuilder.append("Kind: Experiment").append("\n");
+		searchCriteria = ExperimentTypeSearchCriteria();
+		searchCriteria.withCode().thatEquals(entityObj.getType().getCode());
+		fetchOptions = ExperimentTypeFetchOptions();
+		fetchOptions.withPropertyAssignments();
+		results = v3.searchExperimentTypes(sessionToken, searchCriteria, fetchOptions);
+		typeObj = results.getObjects().get(0);
 	if isinstance(entityObj, Sample):
 		txtBuilder.append("Kind: Sample").append("\n");
+		searchCriteria = SampleTypeSearchCriteria();
+		searchCriteria.withCode().thatEquals(entityObj.getType().getCode());
+		fetchOptions = SampleTypeFetchOptions();
+		fetchOptions.withPropertyAssignments();
+		results = v3.searchSampleTypes(sessionToken, searchCriteria, fetchOptions);
+		typeObj = results.getObjects().get(0);
 	if isinstance(entityObj, DataSet):
 		txtBuilder.append("Kind: DataSet").append("\n");
-	
+		searchCriteria = DataSetTypeSearchCriteria();
+		searchCriteria.withCode().thatEquals(entityObj.getType().getCode());
+		fetchOptions = DataSetTypeFetchOptions();
+		fetchOptions.withPropertyAssignments();
+		results = v3.searchDataSetTypes(sessionToken, searchCriteria, fetchOptions);
+		typeObj = results.getObjects().get(0);
 	
 	if not isinstance(entityObj, Project):
 		txtBuilder.append("Type: " + entityObj.getType().getCode()).append("\n");
@@ -383,10 +413,14 @@ def getTXT(entityObj):
 	
 	if not isinstance(entityObj, Project):
 		txtBuilder.append("# Properties:").append("\n");
+		propertyAssigments = typeObj.getPropertyAssignments();
 		properties = entityObj.getProperties();
-		for propertyCode in properties:
-			txtBuilder.append(propertyCode).append(": ").append(properties[propertyCode]).append("\n");
+		for propertyAssigment in propertyAssigments:
+			propertyType = propertyAssigment.getPropertyType();
+			if propertyType.getCode() in properties:
+				txtBuilder.append(propertyType.getLabel()).append(": ").append(properties[propertyType.getCode()]).append("\n");
 	
+	print txtBuilder.toString();
 	return txtBuilder.toString();
 	
 def addFile(tempDirPath, entityFilePath, extension, fileContent, zos):
-- 
GitLab