From f20cd35d924c20ca238fee95b8c477869ff44591 Mon Sep 17 00:00:00 2001
From: juanf <juanf>
Date: Thu, 2 Apr 2015 12:21:50 +0000
Subject: [PATCH] Fixing Non Parents found using the default transaction API

SVN: 33782
---
 .../reporting-plugins/newbrowserapi/script.py | 30 +++++++++++++++----
 1 file changed, 25 insertions(+), 5 deletions(-)

diff --git a/plasmid/source/core-plugins/newbrowser/1/dss/reporting-plugins/newbrowserapi/script.py b/plasmid/source/core-plugins/newbrowser/1/dss/reporting-plugins/newbrowserapi/script.py
index 720e0004284..4659107eed0 100644
--- a/plasmid/source/core-plugins/newbrowser/1/dss/reporting-plugins/newbrowserapi/script.py
+++ b/plasmid/source/core-plugins/newbrowser/1/dss/reporting-plugins/newbrowserapi/script.py
@@ -21,10 +21,30 @@ from java.io import File
 from java.io import FileOutputStream
 from java.lang import System
 from net.lingala.zip4j.core import ZipFile
+from ch.systemsx.cisd.common.exceptions import UserFailureException
+from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
+from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria import MatchClause, SearchOperator, MatchClauseAttribute
+
 import time
 import subprocess
 import os.path
 
+def getSampleByIdentifierForUpdate(tr, identifier):
+	space = identifier.split("/")[1];
+	code = identifier.split("/")[2];
+	
+	criteria = SearchCriteria();
+	criteria.addMatchClause(MatchClause.createAttributeMatch(MatchClauseAttribute.SPACE, space));
+	criteria.addMatchClause(MatchClause.createAttributeMatch(MatchClauseAttribute.CODE, code));
+	criteria.setOperator(SearchOperator.MATCH_ALL_CLAUSES);
+	
+   	searchService = tr.getSearchService();
+   	found = list(searchService.searchForSamples(criteria));
+   	if len(found) == 1:
+   		return tr.makeSampleMutable(found[0]);
+   	else:
+   		raise UserFailureException(identifier + " Not found by search service.");
+   	
 def process(tr, parameters, tableBuilder):
 	method = parameters.get("method");
 	
@@ -178,7 +198,7 @@ def insertDataSet(tr, parameters, tableBuilder):
 	metadata = parameters.get("metadata"); #java.util.LinkedHashMap<String, String> where the key is the name
 		
 	#Create Dataset
-	dataSetSample = tr.getSample(sampleIdentifier);
+	dataSetSample = getSampleByIdentifierForUpdate(tr, sampleIdentifier);
 	dataSet = tr.createNewDataSet(dataSetType);
 	dataSet.setSample(dataSetSample);
 	
@@ -248,7 +268,7 @@ def copySample(tr, parameters, tableBuilder):
 	#Copy children and attach to Sample
 	if sampleChildren != None:
 		for sampleChildIdentifier in sampleChildren:
-			child = tr.getSample(sampleChildIdentifier); #Retrieve Sample child to copy
+			child = getSampleByIdentifierForUpdate(tr, sampleChildIdentifier); #Retrieve Sample child to copy
 			
 			copyChildCode = None
 			try: #For autogenerated children that have the code as sufix
@@ -316,7 +336,7 @@ def insertUpdateSample(tr, parameters, tableBuilder):
 		sample = tr.createNewSample(sampleIdentifier, sampleType); #Create Sample given his id
 		
 	if method == "updateSample":
-		sample = tr.getSampleForUpdate(sampleIdentifier); #Retrieve Sample
+		sample = getSampleByIdentifierForUpdate(tr, sampleIdentifier); #Retrieve Sample
 	
 	#Obtain space
 	space = None;
@@ -362,7 +382,7 @@ def insertUpdateSample(tr, parameters, tableBuilder):
 	#Add sample children
 	if sampleChildren != None:
 		for sampleChildIdentifier in sampleChildren:
-			child = tr.getSampleForUpdate(sampleChildIdentifier); #Retrieve Sample
+			child = getSampleByIdentifierForUpdate(tr, sampleChildIdentifier); #Retrieve Sample
 			if child != None: #The new created ones will not be found
 				childParents = child.getParentSampleIdentifiers();
 				childParents.add(sampleIdentifier);
@@ -371,7 +391,7 @@ def insertUpdateSample(tr, parameters, tableBuilder):
 	#Remove sample children
 	if sampleChildrenRemoved != None:
 		for sampleChildIdentifier in sampleChildrenRemoved:
-			child = tr.getSampleForUpdate(sampleChildIdentifier); #Retrieve Sample
+			child = getSampleByIdentifierForUpdate(tr, sampleChildIdentifier); #Retrieve Sample
 			if child != None: #The new created ones will not be found
 				childParents = child.getParentSampleIdentifiers();
 				childParents.remove(sampleIdentifier);
-- 
GitLab