From 2e539492fad7d9bfda98f81a59547ef6f77b45b1 Mon Sep 17 00:00:00 2001
From: juanf <juanf>
Date: Tue, 15 Apr 2014 10:00:31 +0000
Subject: [PATCH] SSDM-109 : Ability to show images on the ELN UI

SVN: 31363
---
 .../newbrowser/1/as/initialize-master-data.py |   5 +-
 .../newbrowser/html/img/image_loading.gif     | Bin 0 -> 3504 bytes
 .../newbrowser/html/img/image_unavailable.png | Bin 0 -> 9168 bytes
 .../newbrowser/html/js/server/ServerFacade.js |  41 ++++++++++++
 .../newbrowser/html/js/views/SampleTable.js   |  59 +++++++++++++++---
 5 files changed, 97 insertions(+), 8 deletions(-)
 create mode 100644 plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/img/image_loading.gif
 create mode 100644 plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/img/image_unavailable.png

diff --git a/plasmid/source/core-plugins/newbrowser/1/as/initialize-master-data.py b/plasmid/source/core-plugins/newbrowser/1/as/initialize-master-data.py
index 90d740da575..84c12bedda6 100644
--- a/plasmid/source/core-plugins/newbrowser/1/as/initialize-master-data.py
+++ b/plasmid/source/core-plugins/newbrowser/1/as/initialize-master-data.py
@@ -30,4 +30,7 @@ elnExperimentTypeS.setGeneratedCodePrefix('C')
 
 # The default experiment used by the UI, assigned automatically to new samples
 folderType = tr.getOrCreateNewExperimentType("ELN_FOLDER")
-folderType.setDescription("Folder")
\ No newline at end of file
+folderType.setDescription("Folder")
+
+# Preview Image
+tr.getOrCreateNewDataSetType("ELN_PREVIEW")
diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/img/image_loading.gif b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/img/image_loading.gif
new file mode 100644
index 0000000000000000000000000000000000000000..cf370f3bab7181e92f1ba61b2ada3a7776494f33
GIT binary patch
literal 3504
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

literal 0
HcmV?d00001

diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/img/image_unavailable.png b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/img/image_unavailable.png
new file mode 100644
index 0000000000000000000000000000000000000000..937697162b18c8f81191e773e418e02c7e6d5cda
GIT binary patch
literal 9168
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
Tz>6ys6iWBi<n!<S`SRZYFYGW1

literal 0
HcmV?d00001

diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/server/ServerFacade.js b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/server/ServerFacade.js
index c1df34659eb..22d54e9f84b 100644
--- a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/server/ServerFacade.js
+++ b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/server/ServerFacade.js
@@ -248,6 +248,47 @@ function ServerFacade(openbisServer) {
 		return result;
 	}
 	
+	this.searchDataSetsWithTypeForSamples = function(dataSetTypeCode, samplesPermIds, callbackFunction)
+	{
+		var sampleMatchClauses = []
+		
+		samplesPermIds.forEach(function(samplesPermId){
+			sampleMatchClauses.push({
+				"@type":"AttributeMatchClause",
+				fieldType : "ATTRIBUTE",			
+				attribute : "PERM_ID",
+				desiredValue : samplesPermId
+			});
+		});
+		
+		var sampleCriteria = {
+				matchClauses : sampleMatchClauses,
+				operator : "MATCH_ANY_CLAUSES"
+		}
+		
+		var sampleSubCriteria = {
+				"@type" : "SearchSubCriteria",
+				"targetEntityKind" : "SAMPLE",	
+				"criteria" : sampleCriteria
+		}
+		
+		var dataSetMatchClauses = [{
+    			"@type":"AttributeMatchClause",
+    			fieldType : "ATTRIBUTE",			
+    			attribute : "TYPE",
+    			desiredValue : dataSetTypeCode
+		}]
+
+		var dataSetCriteria = 
+		{
+			matchClauses : dataSetMatchClauses,
+			subCriterias : [ sampleSubCriteria ],
+			operator : "MATCH_ALL_CLAUSES"
+		};
+		
+		this.openbisServer.searchForDataSets(dataSetCriteria, callbackFunction)
+	}
+	
 	this.searchWithUniqueId = function(sampleIdentifier, callbackFunction)
 	{	
 		var matchClauses = [
diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleTable.js b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleTable.js
index 9bf3a077438..40ec3d6a0df 100644
--- a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleTable.js
+++ b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleTable.js
@@ -145,7 +145,7 @@ function SampleTable(serverFacade, sampleTableId, profile, sampleTypeCode, inspe
 		Util.blockUI();
 		var localReference = this;
 		this.serverFacade.searchWithType(this.sampleTypeCode, null, function(data) {
-			localReference.reloadWithSamples(data);
+			localReference.reloadWithSamples(data);			
 			Util.unblockUI();
 		});
 	}
@@ -205,7 +205,7 @@ function SampleTable(serverFacade, sampleTableId, profile, sampleTypeCode, inspe
 		$("#tableContainer").append("<div class='wrapper' style='clear: both; padding-top: 10px;'>");
 		
 		var tableTemplate = "<table style='width:100%;' class='table table-hover' id=\"sample-table\"><thead>";
-		tableTemplate += "<tr class=\"sample-table-header interactive\"><th sort-attribute='code'>Code</th>";
+		tableTemplate += "<tr class=\"sample-table-header interactive\"><th sort-attribute='code'>Code</th><th sort-attribute=''>Preview</th>";
 		for (var i = 0; i < sampleTypePropertiesDisplayNames.length; i++) {
 			tableTemplate += "<th sort-property='" + sampleTypeProperties[i] + "'>" + sampleTypePropertiesDisplayNames[i]+ "</th>";
 		}
@@ -371,11 +371,10 @@ function SampleTable(serverFacade, sampleTableId, profile, sampleTypeCode, inspe
 			.on("click", onClickFunction)
 			.selectAll("td").data(function(sample) {
 				var tableFields = null;
-			
 				if(localReference.isSearch) {
-					tableFields = [sample.code, sample.sampleTypeCode, sample.properties, sample.properties ];
+					tableFields = [sample.code, "<img data-preview-loaded='false' id='preview"+sample.identifier.replace(/\//g,'-')+"' src='./img/image_loading.gif' style='height:80px;'></img>", sample.sampleTypeCode, sample.properties, sample.properties ];
 				} else {
-					tableFields = [sample.code];
+					tableFields = [sample.code, "<img data-preview-loaded='false' id='preview"+sample.identifier.replace(/\//g,'-')+"' src='./img/image_loading.gif' style='height:80px;'></img>"];
 					for(var i=0; i<sampleTypeProperties.length; i++) {
 						var tableFieldValue = sample.properties[sampleTypeProperties[i]];
 						if(!tableFieldValue) {
@@ -450,7 +449,7 @@ function SampleTable(serverFacade, sampleTableId, profile, sampleTypeCode, inspe
 				.attr("class", "sample-table-data-cell")
 				.html(
 					function(d, index) {
-						if (localReference.isSearch && index == 2) {
+						if (localReference.isSearch && index == 3) {
 							if (searchText && searchText.length > 0 && d) {
 								for (propertyName in d) {
 									var propertyValue = d[propertyName];
@@ -473,7 +472,7 @@ function SampleTable(serverFacade, sampleTableId, profile, sampleTypeCode, inspe
 									}
 								}
 							}
-						} else if (localReference.isSearch && index == 3) {
+						} else if (localReference.isSearch && index == 4) {
 							if (searchText && searchText.length > 0 && d) {
 							
 								for (propertyName in d) {
@@ -745,5 +744,51 @@ function SampleTable(serverFacade, sampleTableId, profile, sampleTypeCode, inspe
 		this._start = start;
 		this._samplesToPaint = this._filteredSamples.slice(this._start, this._start + this._limit);
 		this.repaint();
+		this._reloadPreviewImages();
+	}
+	
+	this._updateLoadingToNotAvailableImage = function() {
+		var notLoadedImages = $("[data-preview-loaded='false']");
+		notLoadedImages.attr('src', "./img/image_unavailable.png");
+	}
+	
+	this._reloadPreviewImages = function() {
+		var _this = this;
+		var previewCallback = function(data) {
+			var requestChain = [];
+			data.result.forEach(function(dataset) { requestChain.push(
+					function() {
+						var listFilesForDataSetCallback = function(dataFiles) {
+							var elementId = 'preview'+dataset.sampleIdentifierOrNull.replace(/\//g,'-');
+							var downloadUrl = _this.profile.allDataStores[0].downloadUrl + '/' + dataset.code + "/" + dataFiles.result[1].pathInDataSet + "?sessionID=" + _this.serverFacade.getSession();
+							
+							var img = $("#" + elementId);
+							img.attr('src', downloadUrl);
+							img.attr('data-preview-loaded', 'true');
+							
+							//Run next
+						    var next = requestChain.pop();
+							if (next) {
+								next();
+							} else {
+								_this._updateLoadingToNotAvailableImage();
+							}
+						};
+						_this.serverFacade.listFilesForDataSet(dataset.code, "/", true, listFilesForDataSetCallback);
+					}
+			);});
+			//Run first
+		    var next = requestChain.pop();
+			if (next) {
+				next();
+			} else {
+				_this._updateLoadingToNotAvailableImage();
+			}
+		};
+		
+		var samplePermIds = [];
+		this._samplesToPaint.forEach(function(sample) {samplePermIds.push(sample.permId);});
+		
+		this.serverFacade.searchDataSetsWithTypeForSamples("ELN_PREVIEW", samplePermIds, previewCallback);
 	}
 }
-- 
GitLab