From dda1eb9d7ee2c1867b1f4d59a18c30d4759d351d Mon Sep 17 00:00:00 2001
From: parkera <parkera>
Date: Fri, 11 Mar 2016 09:24:07 +0000
Subject: [PATCH] SSDM-3024 : Search call for samples (ongoing work)

SVN: 35878
---
 .../eln-lims/html/js/server/ServerFacade.js   | 147 ++++++++++++++++++
 .../AdvancedSearchController.js               |   8 +-
 2 files changed, 154 insertions(+), 1 deletion(-)

diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/server/ServerFacade.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/server/ServerFacade.js
index 3c57a3d7038..053feb60793 100644
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/server/ServerFacade.js
+++ b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/server/ServerFacade.js
@@ -596,6 +596,153 @@ function ServerFacade(openbisServer) {
 		this.openbisServer.getDataSetMetaDataWithFetchOptions(dataSetCodes, [ 'SAMPLE' ], callback);
 	}
 	
+	//
+	// New Advanced Search
+	//
+	this.searchForSamplesAdvanced = function(advancedSearchCriteria, callback) {
+		require(['openbis', 
+		         'as/dto/sample/search/SampleSearchCriteria',
+		         'as/dto/sample/fetchoptions/SampleFetchOptions'], function(openbis, SampleSearchCriteria, SampleFetchOptions) {
+			
+			//Boilerplate
+			var testProtocol = window.location.protocol;
+			var testHost = window.location.hostname;
+			var testPort = window.location.port;
+			
+			var testUrl = testProtocol + "//" + testHost + ":" + testPort;
+			var testApiUrl = testUrl + "/openbis/openbis/rmi-application-server-v3.json";
+			
+			var v3Api = new openbis(testApiUrl);
+			v3Api._private.sessionToken = mainController.serverFacade.getSession();
+			
+			//SearchResult<Sample> searchSamples(String sessionToken, SampleSearchCriteria searchCriteria, SampleFetchOptions fetchOptions);
+			//TO-DO Setting the searchCriteria given the advancedSearchCriteria model
+			var searchCriteria = new SampleSearchCriteria();
+			
+			/*var operator = advancedSearchCriteria.logicalOperator;
+			searchCriteria.withOperator(operator);
+			
+			var fieldType = null;
+			var fieldName = null;
+			var fieldValue = null;
+
+			var ruleKeys = Object.keys(advancedSearchCriteria.rules);
+			for (var idx = 0; idx < ruleKeys.length; idx++)
+			{
+
+				fieldType = advancedSearchCriteria.rules[ruleKeys[idx]].type;
+				fieldName = advancedSearchCriteria.rules[ruleKeys[idx]].name;
+				if (fieldName.indexOf(".") > 0)
+					fieldName = fieldName.substring(fieldName.indexOf(".")+1,fieldName.length);
+				fieldValue = advancedSearchCriteria.rules[ruleKeys[idx]].value;
+				
+				//Case 1: fieldType = all
+				if(fieldType === "All") {
+					searchCriteria.withAnyField().thatEquals(fieldValue);
+					//alert("All! type is " + fieldType + " name is " + fieldName + " val is " + fieldValue);
+				}
+
+				//Case 2: fieldType = property
+				else if(fieldType === "Property") {
+					searchCriteria.withProperty(fieldName).thatEquals(fieldValue);
+				}
+
+				//Case 3: fieldType = attribute
+				else if(fieldType === "Attribute"){
+					switch(fieldName) {
+						case "CODE":
+							searchCriteria.withCode().thatEquals(fieldValue);
+							break;	
+						case "SAMPLE_TYPE":
+							searchCriteria.withType().withCode().thatEquals(fieldValue);
+							break;
+						case "PERM_ID":
+							searchCriteria.withPermId().thatEquals(fieldValue);
+							break;
+						case "SPACE":
+							searchCriteria.withSpace().withCode().thatEquals(fieldValue);
+							break;
+						case "PROJECT":
+							searchCriteria.withProject().withCode().thatEquals(fieldValue);
+							break;
+						case "PROJECT_PERM_ID":
+							searchCriteria.withProject().withPermId().thatEquals(fieldValue);
+							break;
+						case "METAPROJECT":
+							//???
+							break;
+						case "REGISTRATION_DATE": //must be format 2009-08-18
+							searchCriteria.withRegistrationDate().thatEquals(fieldValue);
+							break;
+						case "MODIFICATION_DATE": //must be format 2009-08-18
+							searchCriteria.withModificationDate().thatEquals(fieldValue);
+							break;
+						default:
+							//Do Nothing
+					}
+				}
+				
+				//case 4 = Parents
+				else if (fieldType == "Parent"){
+					if(fieldValue.indexOf("ATTR.") > 0){
+						switch(fieldName) {
+							case "CODE":
+								searchCriteria.withParents().withCode().thatEquals(fieldValue);
+								break;	
+							case "SAMPLE_TYPE":
+								searchCriteria.withParents().withType().withCode().thatEquals(fieldValue);
+								break;
+							case "PERM_ID":
+								searchCriteria.withParents().withPermId().thatEquals(fieldValue);
+								break;
+							case "SPACE":
+								searchCriteria.withParents().withSpace().withCode().thatEquals(fieldValue);
+								break;
+							case "PROJECT":
+								searchCriteria.withParents().withProject().withCode().thatEquals(fieldValue);
+								break;
+							case "PROJECT_PERM_ID":
+								searchCriteria.withParents().withProject().withPermId().thatEquals(fieldValue);
+								break;
+							case "METAPROJECT":
+								//???
+								break;
+							case "REGISTRATION_DATE": //must be format 2009-08-18
+								searchCriteria.withParents().withRegistrationDate().thatEquals(fieldValue);
+								break;
+							case "MODIFICATION_DATE": //must be format 2009-08-18
+								searchCriteria.withParents().withModificationDate().thatEquals(fieldValue);
+								break;
+							default:
+								//Do Nothing
+						}	
+					}else if(fieldValue.indexOf("PROP.") > 0){
+						searchCriteria.withParents().withProperty(fieldName).thatEquals(fieldValue);
+					}
+				}//end parent
+				
+				
+				//case 5 = CHildren
+				else if (fieldType == "Children"){
+					//copy & paste the code above.				
+				}						
+			
+			}*/
+			
+			//TO-DO Setting the fetchOptions given standard settings
+			var fetchOptions = new SampleFetchOptions();
+			
+			v3Api.searchSamples(searchCriteria, fetchOptions)
+			.done(function(result) {
+				callback(result);  //this will call the method defined in the AdvancedSearchController which will display the table
+			})
+			.fail(function(result) {
+				Util.showError("Call failed to server: " + JSON.stringify(result));
+				Util.unblockUI();
+			});
+		});
+	}
+	
 	//
 	// Search Samples
 	//
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchController.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchController.js
index 1730abe30be..f6a114596b4 100644
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchController.js
+++ b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchController.js
@@ -26,6 +26,12 @@ function AdvancedSearchController(mainController) {
 	
 	this.search = function() {
 		var model = this._advancedSearchModel.criteria;
-		Util.showInfo(JSON.stringify(model));
+//		Util.showInfo(JSON.stringify(model));
+		
+		var callbackFunction = function(result) {
+			Util.showInfo("Call Succeeded: " + JSON.stringify(result).length);
+			//TO-DO Render table with results
+		};
+		mainController.serverFacade.searchForSamplesAdvanced(model, callbackFunction);
 	}
 }
\ No newline at end of file
-- 
GitLab