Browse Source

Merge pull request #3252 from GordonSmith/Issue_3240

gh-3240 Add result view for Source Files

Reviewed-By: Kevin Wang <kevin.wang@lexisnexis.com>
Reviewed-By: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 12 years ago
parent
commit
25100f2188

+ 2 - 0
esp/eclwatch/ws_XSLT/wuidcommon.xslt

@@ -445,6 +445,8 @@
                 <A href="javascript:void(0)" onclick="toggleElement('SourceFiles');" id="explinksourcefiles" class="wusectionexpand">
                   Files: (<xsl:value-of select="SourceFileCount"/>)
                 </A>
+                &nbsp;-&nbsp;
+                <a href="/esp/iframe?esp_iframe_title=Results - {$wuid}&amp;inner=/esp/files/ECLPlaygroundResults.htm%3fWuid%3d{$wuid}%26SourceFiles%3dtrue" >Show</a>
               </div>
             </div>
 

+ 8 - 2
esp/files/ECLPlaygroundResults.js

@@ -28,6 +28,7 @@ define([
     var initUi = function () {
         var wuid = "";
         var sequence = "";
+        var showSourceFiles = false;
 
         var urlWuid = ioQuery.queryToObject(dojo.doc.location.search.substr((dojo.doc.location.search.substr(0, 1) == "?" ? 1 : 0)))["Wuid"];
         if (urlWuid) {
@@ -35,11 +36,16 @@ define([
         }
         var urlSequence = ioQuery.queryToObject(dojo.doc.location.search.substr((dojo.doc.location.search.substr(0, 1) == "?" ? 1 : 0)))["Sequence"];
         if (urlSequence) {
-            sequence = urlSequence;
+                sequence = urlSequence;
+        }
+
+        var urlShowSourceFiles = ioQuery.queryToObject(dojo.doc.location.search.substr((dojo.doc.location.search.substr(0, 1) == "?" ? 1 : 0)))["SourceFiles"];
+        if (urlShowSourceFiles) {
+                showSourceFiles = urlShowSourceFiles;
         }
 
         var results = registry.byId("appLayout");
-        results.init(wuid, sequence);
+        results.init(wuid, sequence, showSourceFiles);
     },
 
 	startLoading = function (targetNode) {

+ 48 - 11
esp/files/scripts/ESPResult.js

@@ -15,27 +15,43 @@
 ############################################################################## */
 define([
 	"dojo/_base/declare",
+	"dojo/_base/Deferred",
 	"dojo/data/ObjectStore",
 	"hpcc/WsWorkunits",
 	"hpcc/ESPBase"
-], function (declare, ObjectStore, WsWorkunits, ESPBase) {
+], function (declare, Deferred, ObjectStore, WsWorkunits, ESPBase) {
 	return declare(ESPBase, {
 		store: null,
 		Total: "-1",
 
 		constructor: function (args) {
 			declare.safeMixin(this, args);
-			this.store = new WsWorkunits.WUResult({
-				wuid: this.wuid,
-				sequence: this.Sequence,
-				isComplete: this.isComplete()
-			});
+			if (this.Sequence != null) {
+				this.store = new WsWorkunits.WUResult({
+					wuid: this.wuid,
+					sequence: this.Sequence,
+					isComplete: this.isComplete()
+				});
+			} else {
+				this.store = new WsWorkunits.WUResult({
+					wuid: this.wuid,
+					name: this.Name,
+					isComplete: true
+				});
+			}
 		},
 
 		getName: function () {
 			return this.Name;
 		},
 
+		getID: function () {
+			if (this.Sequence != null) {
+				return this.Sequence;
+			}
+			return this.Name;
+		},
+
 		isComplete: function () {
 			return this.Total != "-1";
 		},
@@ -47,11 +63,32 @@ define([
 				field: this.store.idProperty,
 				width: "40px"
 			});
-			for (var i = 0; i < this.ECLSchemas.ECLSchemaItem.length; ++i) {
-				retVal.push({
-					name: this.ECLSchemas.ECLSchemaItem[i].ColumnName,
-					field: this.ECLSchemas.ECLSchemaItem[i].ColumnName,
-					width: this.extractWidth(this.ECLSchemas.ECLSchemaItem[i].ColumnType, this.ECLSchemas.ECLSchemaItem[i].ColumnName)
+			if (this.ECLSchemas) {
+				for (var i = 0; i < this.ECLSchemas.ECLSchemaItem.length; ++i) {
+					retVal.push({
+						name: this.ECLSchemas.ECLSchemaItem[i].ColumnName,
+						field: this.ECLSchemas.ECLSchemaItem[i].ColumnName,
+						width: this.extractWidth(this.ECLSchemas.ECLSchemaItem[i].ColumnType, this.ECLSchemas.ECLSchemaItem[i].ColumnName)
+					});
+				}
+			} else {
+				var context = this;
+				Deferred.when(this.store.query("*", {
+					start: 0,
+					count: 1,
+					sync: true
+				}), function (rows) {
+					if (rows.length) {
+						for (var key in rows[0]) {
+							if (key != "myInjectedRowNum") {
+								retVal.push({
+									name: key,
+									field: key,
+									width: context.extractWidth("string12", key)
+								});
+							}
+						}
+					}
 				});
 			}
 			return retVal;

+ 9 - 1
esp/files/scripts/ESPWorkunit.js

@@ -181,7 +181,7 @@ define([
 				TruncateEclTo64k: args.onGetText ? false : true,
 				IncludeExceptions: args.onGetExceptions ? true : false,
 				IncludeGraphs: args.onGetGraphs ? true : false,
-				IncludeSourceFiles: false,
+				IncludeSourceFiles: args.onGetSourceFiles ? true : false,
 				IncludeResults: args.onGetResults ? true : false,
 				IncludeResultsViewNames: false,
 				IncludeVariables: false,
@@ -226,6 +226,14 @@ define([
 						}
 						args.onGetResults(context.results);
 					}
+					if (args.onGetSourceFiles && workunit.SourceFiles && workunit.SourceFiles.ECLSourceFile) {
+						context.sourceFiles = [];
+						var sourceFiles = workunit.SourceFiles.ECLSourceFile;
+						for (var i = 0; i < sourceFiles.length; ++i) {
+							context.sourceFiles.push(new ESPResult(lang.mixin({ wuid: context.wuid }, sourceFiles[i])));
+						}
+						args.onGetSourceFiles(context.sourceFiles);
+					}
 					if (args.onGetTimers && workunit.Timers && workunit.Timers.ECLTimer) {
 						context.timers = workunit.Timers.ECLTimer;
 						args.onGetTimers(context.timers);

+ 32 - 24
esp/files/scripts/ResultsControl.js

@@ -33,9 +33,9 @@ define([
 		workunit: null,
 		paneNum: 0,
 		resultsSheetID: "",
-		resultSheet: {},
-		sequenceResultStoreMap: [],
-		sequenceResultGridMap: [],
+		dataGridSheet: {},
+		resultIdStoreMap: [],
+		resultIdGridMap: [],
 		delayLoad: [],
 
 		//  Callbacks
@@ -46,11 +46,11 @@ define([
 		constructor: function (args) {
 			declare.safeMixin(this, args);
 
-			this.resultSheet = registry.byId(this.resultsSheetID);
+			this.dataGridSheet = registry.byId(this.resultsSheetID);
 			var context = this;
-			this.resultSheet.watch("selectedChildWidget", function (name, oval, nval) {
+			this.dataGridSheet.watch("selectedChildWidget", function (name, oval, nval) {
 				if (nval.id in context.delayLoad) {
-					var result = context.workunit.results[context.delayLoad[nval.id].resultIndex];
+					var result = context.delayLoad[nval.id].result;
 					if (!result.isComplete()) {
 						context.delayLoad[nval.id].loadingMessage = context.getLoadingMessage();
 					}
@@ -64,11 +64,11 @@ define([
 
 		clear: function () {
 			this.delayLoad = [];
-			this.sequenceResultStoreMap = [];
-			this.sequenceResultGridMap = [];
-			var tabs = this.resultSheet.getChildren();
+			this.resultIdStoreMap = [];
+			this.resultIdGridMap = [];
+			var tabs = this.dataGridSheet.getChildren();
 			for (var i = 0; i < tabs.length; ++i) {
-				this.resultSheet.removeChild(tabs[i]);
+				this.dataGridSheet.removeChild(tabs[i]);
 			}
 		},
 
@@ -89,15 +89,14 @@ define([
 					padding: 0
 				}
 			});
-			this.resultSheet.addChild(pane);
+			this.dataGridSheet.addChild(pane);
 			return pane;
 		},
 
-		addResultTab: function (resultIndex) {
-			var result = this.workunit.results[resultIndex];
+		addResultTab: function (result) {
 			var paneID = this.getNextPaneID();
 			var grid = EnhancedGrid({
-				resultIndex: resultIndex,
+				result: result,
 				store: result.getObjectStore(),
 				query: { id: "*" },
 				structure: result.getStructure(),
@@ -105,7 +104,6 @@ define([
 					return false;
 				},
 				plugins: {
-					//					nestedSorting: true,
 					pagination: {
 						pageSizes: [25, 50, 100, "All"],
 						defaultPageSize: 50,
@@ -119,8 +117,8 @@ define([
 				}
 			});
 			this.delayLoad[paneID] = grid;
-			this.sequenceResultStoreMap[result.Sequence] = result.store;
-			this.sequenceResultGridMap[result.Sequence] = grid;
+			this.resultIdStoreMap[result.getID()] = result.store;
+			this.resultIdGridMap[result.getID()] = grid;
 			return this.addTab(result.getName(), paneID);
 		},
 
@@ -133,19 +131,29 @@ define([
 			this.addResultsTab(this.workunit.results);
 		},
 
+		refreshSourceFiles: function (wu) {
+			if (this.workunit != wu) {
+				this.clear();
+				this.workunit = wu;
+			}
+			this.addResultsTab(this.workunit.sourceFiles);
+		},
+
 		addResultsTab: function (results) {
 			for (var i = 0; i < results.length; ++i) {
 				var result = results[i];
-				if (result.Sequence in this.sequenceResultStoreMap) {
-					this.sequenceResultStoreMap[result.Sequence].isComplete = result.isComplete();
+				if (result.getID() in this.resultIdStoreMap) {
+					this.resultIdStoreMap[result.getID()].isComplete = result.isComplete();
 				} else {
-					pane = this.addResultTab(i);
-					if (this.sequence && this.sequence == result.Sequence) {
-						this.resultSheet.selectChild(pane);
-					}
+					pane = this.addResultTab(result);
+					if (this.sequence != null && this.sequence == result.getID()) {
+						this.dataGridSheet.selectChild(pane);
+					} else if (this.name != null && this.name == result.getID()) {
+						this.dataGridSheet.selectChild(pane);
+					} 
 				}
 				if (!result.isComplete()) {
-					this.sequenceResultGridMap[result.Sequence].showMessage(this.getLoadingMessage());
+					this.resultIdGridMap[result.getID()].showMessage(this.getLoadingMessage());
 				}
 			}
 		},

+ 26 - 14
esp/files/scripts/ResultsWidget.js

@@ -81,15 +81,7 @@ require([
             });
         },
 
-        clear: function () {
-            this.resultsControl.clear();
-        },
-
-        refresh: function (wu) {
-            this.resultsControl.refresh(wu);
-        },
-
-        init: function (wuid, sequence) {
+        init: function (wuid, sequence, showSourceFiles) {
             if (wuid) {
                 this.wu = new ESPWorkunit({
                     wuid: wuid
@@ -98,14 +90,34 @@ require([
                 var context = this;
                 this.wu.monitor(function () {
                     if (context.wu.isComplete() || ++monitorCount % 5 == 0) {
-                        context.wu.getInfo({
-                            onGetResults: function (results) {
-                                context.refresh(context.wu);
-                            }
-                        });
+                        if (showSourceFiles) {
+                            context.wu.getInfo({
+                                onGetSourceFiles: function (sourceFiles) {
+                                    context.refreshSourceFiles(context.wu);
+                                }
+                            });
+                        } else {
+                            context.wu.getInfo({
+                                onGetResults: function (results) {
+                                    context.refresh(context.wu);
+                                }
+                            });
+                        }
                     }
                 });
             }
+        },
+
+        clear: function () {
+            this.resultsControl.clear();
+        },
+
+        refresh: function (wu) {
+            this.resultsControl.refresh(wu);
+        },
+
+        refreshSourceFiles: function (wu) {
+            this.resultsControl.refreshSourceFiles(wu);
         }
     });
 });

+ 6 - 1
esp/files/scripts/WsWorkunits.js

@@ -87,7 +87,11 @@ define([
 			if (this.isComplete == true) {
 				var request = {};
 				request['Wuid'] = this.wuid;
-				request['Sequence'] = this.sequence;
+				if (this.sequence != null) {
+					request['Sequence'] = this.sequence;
+				} else {
+					request['LogicalName'] = this.name;
+				}
 				request['Start'] = options.start;
 				request['Count'] = options.count;
 				request['rawxml_'] = "1";
@@ -96,6 +100,7 @@ define([
 					url: this.getBaseURL("WsWorkunits") + "/WUResult",
 					handleAs: "xml",
 					content: request,
+					sync: options.sync != null ? options.sync : false,
 					load: function (domXml) {
 						var rows = context.getValues(domXml, "Row");
 						for (var i = 0; i < rows.length; ++i) {