LFDetailsWidget.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. /*##############################################################################
  2. # HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems.
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. ############################################################################## */
  16. define([
  17. "exports",
  18. "dojo/_base/declare",
  19. "dojo/_base/lang",
  20. "dojo/_base/array",
  21. "dojo/dom",
  22. "dojo/dom-attr",
  23. "dojo/dom-class",
  24. "dojo/dom-form",
  25. "dojo/query",
  26. "dijit/_TemplatedMixin",
  27. "dijit/_WidgetsInTemplateMixin",
  28. "dijit/layout/BorderContainer",
  29. "dijit/layout/TabContainer",
  30. "dijit/layout/ContentPane",
  31. "dijit/Toolbar",
  32. "dijit/TooltipDialog",
  33. "dijit/form/Form",
  34. "dijit/form/SimpleTextarea",
  35. "dijit/form/TextBox",
  36. "dijit/form/Button",
  37. "dijit/form/DropDownButton",
  38. "dijit/TitlePane",
  39. "dijit/registry",
  40. "hpcc/_TabContainerWidget",
  41. "hpcc/ResultWidget",
  42. "hpcc/ECLSourceWidget",
  43. "hpcc/FilePartsWidget",
  44. "hpcc/WUDetailsWidget",
  45. "hpcc/DFUWUDetailsWidget",
  46. "hpcc/TargetSelectWidget",
  47. "hpcc/ESPLogicalFile",
  48. "dojo/text!../templates/LFDetailsWidget.html",
  49. "dijit/TooltipDialog"
  50. ], function (exports, declare, lang, arrayUtil, dom, domAttr, domClass, domForm, query,
  51. _TemplatedMixin, _WidgetsInTemplateMixin, BorderContainer, TabContainer, ContentPane, Toolbar, TooltipDialog, Form, SimpleTextarea, TextBox, Button, DropDownButton, TitlePane, registry,
  52. _TabContainerWidget, ResultWidget, EclSourceWidget, FilePartsWidget, WUDetailsWidget, DFUWUDetailsWidget, TargetSelectWidget, ESPLogicalFile,
  53. template) {
  54. exports.fixCircularDependency = declare("LFDetailsWidget", [_TabContainerWidget, _TemplatedMixin, _WidgetsInTemplateMixin], {
  55. templateString: template,
  56. baseClass: "LFDetailsWidget",
  57. borderContainer: null,
  58. tabContainer: null,
  59. summaryWidget: null,
  60. contentWidget: null,
  61. contentWidgetLoaded: false,
  62. sourceWidget: null,
  63. sourceWidgetLoaded: false,
  64. defWidget: null,
  65. defWidgetLoaded: false,
  66. xmlWidget: null,
  67. xmlWidgetLoaded: false,
  68. filePartsWidget: null,
  69. filePartsWidgetLoaded: false,
  70. workunitWidget: null,
  71. workunitWidgetLoaded: false,
  72. dfuWorkunitWidget: null,
  73. dfuWorkunitWidgetLoaded: false,
  74. logicalFile: null,
  75. prevState: "",
  76. initalized: false,
  77. postCreate: function (args) {
  78. this.inherited(arguments);
  79. this.summaryWidget = registry.byId(this.id + "_Summary");
  80. this.contentWidget = registry.byId(this.id + "_Content");
  81. this.sourceWidget = registry.byId(this.id + "_Source");
  82. this.defWidget = registry.byId(this.id + "_DEF");
  83. this.xmlWidget = registry.byId(this.id + "_XML");
  84. this.filePartsWidget = registry.byId(this.id + "_FileParts");
  85. this.workunitWidget = registry.byId(this.id + "_Workunit");
  86. this.dfuWorkunitWidget = registry.byId(this.id + "_DFUWorkunit");
  87. this.copyTargetSelect = registry.byId(this.id + "CopyTargetSelect");
  88. this.desprayTargetSelect = registry.byId(this.id + "DesprayTargetSelect");
  89. },
  90. // Hitched actions ---
  91. _onRefresh: function (event) {
  92. this.logicalFile.refresh();
  93. },
  94. _onSave: function (event) {
  95. var context = this;
  96. this.logicalFile.save(dom.byId(context.id + "Description").value);
  97. },
  98. _onDelete: function (event) {
  99. this.logicalFile.doDelete({
  100. load: function (response) {
  101. }
  102. });
  103. },
  104. _onCopyOk: function (event) {
  105. this.logicalFile.copy({
  106. request: domForm.toObject(this.id + "CopyDialog")
  107. });
  108. registry.byId(this.id + "CopyDropDown").closeDropDown();
  109. },
  110. _onCopyCancel: function (event) {
  111. registry.byId(this.id + "CopyDropDown").closeDropDown();
  112. },
  113. _onDesprayOk: function (event) {
  114. this.logicalFile.despray({
  115. request: domForm.toObject(this.id + "DesprayDialog")
  116. });
  117. registry.byId(this.id + "DesprayDropDown").closeDropDown();
  118. },
  119. _onDesprayCancel: function (event) {
  120. registry.byId(this.id + "DesprayDropDown").closeDropDown();
  121. },
  122. _onRenameOk: function (event) {
  123. this.logicalFile.rename({
  124. request: domForm.toObject(this.id + "RenameDialog")
  125. });
  126. registry.byId(this.id + "RenameDropDown").closeDropDown();
  127. },
  128. _onRenameCancel: function (event) {
  129. registry.byId(this.id + "RenameDropDown").closeDropDown();
  130. },
  131. // Implementation ---
  132. init: function (params) {
  133. if (this.initalized)
  134. return;
  135. this.initalized = true;
  136. var context = this;
  137. if (params.Name) {
  138. this.logicalFile = ESPLogicalFile.Get(params.Name);
  139. var data = this.logicalFile.getData();
  140. for (key in data) {
  141. this.updateInput(key, null, data[key]);
  142. }
  143. this.logicalFile.watch(function (name, oldValue, newValue) {
  144. context.updateInput(name, oldValue, newValue);
  145. });
  146. this.logicalFile.refresh();
  147. }
  148. this.selectChild(this.summaryWidget, true);
  149. this.copyTargetSelect.init({
  150. Groups: true
  151. });
  152. this.desprayTargetSelect.init({
  153. DropZones: true,
  154. callback: function (value, item) {
  155. context.updateInput("DesprayTargetIPAddress", null, item.machine.Netaddress);
  156. context.updateInput("DesprayTargetPath", null, item.machine.Directory + "/" + context.logicalFile.Filename);
  157. }
  158. });
  159. },
  160. initTab: function() {
  161. var currSel = this.getSelectedChild();
  162. if (currSel.id == this.contentWidget.id && !this.contentWidgetLoaded) {
  163. this.contentWidgetLoaded = true;
  164. this.contentWidget.init({
  165. result: this.logicalFile.result
  166. });
  167. } else if (currSel.id == this.sourceWidget.id && !this.sourceWidgetLoaded) {
  168. this.sourceWidgetLoaded = true;
  169. this.sourceWidget.init({
  170. ECL: this.logicalFile.Ecl
  171. });
  172. } else if (currSel.id == this.defWidget.id && !this.defWidgetLoaded) {
  173. var context = this;
  174. this.logicalFile.fetchDEF(function (response) {
  175. context.defWidgetLoaded = true;
  176. context.defWidget.init({
  177. ECL: response
  178. });
  179. });
  180. } else if (currSel.id == this.xmlWidget.id && !this.xmlWidgetLoaded) {
  181. var context = this;
  182. this.logicalFile.fetchXML(function (response) {
  183. context.xmlWidgetLoaded = true;
  184. context.xmlWidget.init({
  185. ECL: response
  186. });
  187. });
  188. } else if (currSel.id == this.filePartsWidget.id && !this.filePartsWidgetLoaded) {
  189. this.filePartsWidgetLoaded = true;
  190. this.filePartsWidget.init({
  191. fileParts: lang.exists("logicalFile.DFUFileParts.DFUPart", this) ? this.logicalFile.DFUFileParts.DFUPart : []
  192. });
  193. } else if (this.workunitWidget && currSel.id == this.workunitWidget.id && !this.workunitWidgetLoaded) {
  194. this.workunitWidgetLoaded = true;
  195. this.workunitWidget.init({
  196. Wuid: this.logicalFile.Wuid
  197. });
  198. } else if (this.dfuWorkunitWidget && currSel.id == this.dfuWorkunitWidget.id && !this.workunitWidgetLoaded) {
  199. this.dfuWorkunitWidgetLoaded = true;
  200. this.dfuWorkunitWidget.init({
  201. Wuid: this.logicalFile.Wuid
  202. });
  203. }
  204. },
  205. showMessage: function (msg) {
  206. },
  207. /*isComplete: function () {
  208. return true;
  209. },*/
  210. updateInput: function (name, oldValue, newValue) {
  211. var registryNode = registry.byId(this.id + name);
  212. if (registryNode) {
  213. registryNode.set("value", newValue);
  214. } else {
  215. var domElem = dom.byId(this.id + name);
  216. if (domElem) {
  217. switch (domElem.tagName) {
  218. case "SPAN":
  219. case "DIV":
  220. domAttr.set(this.id + name, "innerHTML", newValue);
  221. break;
  222. case "INPUT":
  223. case "TEXTAREA":
  224. domAttr.set(this.id + name, "value", newValue);
  225. break;
  226. default:
  227. alert(domElem.tagName);
  228. }
  229. }
  230. }
  231. if (name === "Wuid") {
  232. if (!newValue) {
  233. this.removeChild(this.workunitWidget);
  234. this.workunitWidget = null;
  235. this.removeChild(this.dfuWorkunitWidget);
  236. this.dfuWorkunitWidget = null;
  237. } else if (this.workunitWidget && newValue[0] === "D") {
  238. this.removeChild(this.workunitWidget);
  239. this.workunitWidget = null;
  240. } else if (this.dfuWorkunitWidget) {
  241. this.removeChild(this.dfuWorkunitWidget);
  242. this.dfuWorkunitWidget = null;
  243. }
  244. }
  245. if (name === "Name") {
  246. this.updateInput("RenameSourceName", oldValue, newValue);
  247. this.updateInput("RenameTargetName", oldValue, newValue);
  248. this.updateInput("DespraySourceName", oldValue, newValue);
  249. this.updateInput("CopySourceName", oldValue, newValue);
  250. this.updateInput("CopyTargetName", oldValue, newValue);
  251. }
  252. /*
  253. var widget = registry.byId(this.id + name);
  254. if (widget) {
  255. if (widget.has("innerHTML")) {
  256. widget.set("innerHTML", newValue);
  257. } else {
  258. widget.set("value", newValue);
  259. }
  260. } else {
  261. var element = dom.byId(this.id + name);
  262. if (element) {
  263. if (element.innerHTML) {
  264. element.innerHTML = newValue;
  265. } else {
  266. element.value = newValue;
  267. }
  268. }
  269. }
  270. if (name === "Filename") {
  271. registry.byId(this.id + "_Summary").set("title", newValue);
  272. }
  273. */
  274. },
  275. refreshFileDetails: function (fileDetails) {
  276. /*
  277. if (fileDetails.Wuid && fileDetails.Wuid[0] == "D" && this.workunitWidget) {
  278. this.removeChild(this.workunitWidget);
  279. this.workunitWidget = null;
  280. } else if (this.dfuWorkunitWidget) {
  281. this.removeChild(this.dfuWorkunitWidget);
  282. this.dfuWorkunitWidget = null;
  283. }
  284. registry.byId(this.id + "_Summary").set("title", fileDetails.Filename);
  285. //registry.byId(this.id + "Summary").set("iconClass", "iconRefresh");
  286. //domClass.remove(this.id + "Test");
  287. //domClass.add(this.id + "Test", "iconRefresh");
  288. dom.byId(this.id + "Owner").innerHTML = fileDetails.Owner;
  289. dom.byId(this.id + "Description").value = fileDetails.Description;
  290. dom.byId(this.id + "JobName").innerHTML = fileDetails.JobName;
  291. dom.byId(this.id + "Wuid").innerHTML = fileDetails.Wuid;
  292. dom.byId(this.id + "Modification").innerHTML = fileDetails.Modified + " (UTC/GMT)";
  293. dom.byId(this.id + "Dir").innerHTML = fileDetails.Dir;
  294. dom.byId(this.id + "RecordSize").innerHTML = fileDetails.RecordSize;
  295. dom.byId(this.id + "Count").innerHTML = fileDetails.RecordCount;
  296. this.contentWidget.set("title", "Content " + "(" + fileDetails.RecordCount + ")");
  297. dom.byId(this.id + "Filesize").innerHTML = fileDetails.Filesize;
  298. dom.byId(this.id + "PathMask").innerHTML = fileDetails.PathMask;
  299. */
  300. }
  301. });
  302. });