FileSpray.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  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. "dojo/_base/declare",
  18. "dojo/_base/lang",
  19. "dojo/_base/array",
  20. "dojo/_base/Deferred",
  21. "dojo/store/util/QueryResults",
  22. "dojo/store/JsonRest",
  23. "dojo/store/Memory",
  24. "dojo/store/Cache",
  25. "dojo/store/Observable",
  26. "dojox/xml/parser",
  27. "hpcc/ESPBase",
  28. "hpcc/ESPRequest"
  29. ], function (declare, lang, arrayUtil, Deferred, QueryResults, JsonRest, Memory, Cache, Observable,
  30. parser,
  31. ESPBase, ESPRequest) {
  32. var FileListStore = declare([ESPRequest.Store], {
  33. service: "FileSpray",
  34. action: "FileList",
  35. responseQualifier: "FileListResponse.files.PhysicalFileStruct",
  36. idProperty: "calculatedID",
  37. create: function (id) {
  38. var retVal = {
  39. lfEncode: function(path) {
  40. var retVal = "";
  41. for (var i = 0; i < path.length; ++i) {
  42. switch (path[i]) {
  43. case "/":
  44. case "\\":
  45. retVal += "::";
  46. break;
  47. case "A":
  48. case "B":
  49. case "C":
  50. case "D":
  51. case "E":
  52. case "F":
  53. case "G":
  54. case "H":
  55. case "I":
  56. case "J":
  57. case "K":
  58. case "L":
  59. case "M":
  60. case "N":
  61. case "O":
  62. case "P":
  63. case "Q":
  64. case "R":
  65. case "S":
  66. case "T":
  67. case "U":
  68. case "V":
  69. case "W":
  70. case "X":
  71. case "Y":
  72. case "Z":
  73. retVal += "^" + path[i];
  74. break;
  75. default:
  76. retVal += path[i];
  77. }
  78. }
  79. return retVal;
  80. },
  81. getLogicalFile: function () {
  82. //var filePath = this.DropZone.Path + "/" +
  83. return "~file::" + this.DropZone.NetAddress + this.lfEncode(this.fullPath);
  84. }
  85. };
  86. retVal[this.idProperty] = id;
  87. return retVal;
  88. },
  89. preProcessRow: function (row) {
  90. var partialPath = this.parent.partialPath + row.name + (row.isDir ? "/" : "");
  91. var fullPath = this.parent.fullPath + row.name + (row.isDir ? "/" : "");
  92. lang.mixin(row, {
  93. calculatedID: this.parent.DropZone.NetAddress + fullPath,
  94. partialPath: partialPath,
  95. fullPath: fullPath,
  96. DropZone: this.parent.DropZone,
  97. displayName: row.name,
  98. type: row.isDir ? "folder" : "file"
  99. });
  100. },
  101. postProcessResults: function (items) {
  102. items.sort(function (l, r) {
  103. if (l.isDir === r.isDir) {
  104. if (l.displayName === r.displayName)
  105. return 0;
  106. else if (l.displayName < r.displayName)
  107. return -1;
  108. return 1;
  109. } else if (l.isDir) {
  110. return -1;
  111. }
  112. return 1;
  113. });
  114. }
  115. });
  116. var LandingZonesStore = declare([ESPRequest.Store], {
  117. service: "FileSpray",
  118. action: "DropZoneFiles",
  119. responseQualifier: "DropZoneFilesResponse.DropZones.DropZone",
  120. idProperty: "calculatedID",
  121. constructor: function (options) {
  122. declare.safeMixin(this, options);
  123. },
  124. preProcessRow: function (row) {
  125. lang.mixin(row, {
  126. OS: row.Linux === "true" ? 2 : 0
  127. });
  128. lang.mixin(row, {
  129. calculatedID: row.NetAddress,
  130. displayName: row.Name,
  131. type: "dropzone",
  132. partialPath: "",
  133. fullPath: row.Path + "/",
  134. DropZone: row
  135. });
  136. },
  137. mayHaveChildren: function (item) {
  138. switch (item.type) {
  139. case "dropzone":
  140. case "folder":
  141. return true;
  142. }
  143. return false;
  144. },
  145. getChildren: function (parent, options) {
  146. var store = Observable(new FileListStore({
  147. parent: parent
  148. }));
  149. return store.query({
  150. Netaddr: parent.DropZone.NetAddress,
  151. Path: parent.fullPath,
  152. Mask: "",
  153. OS: parent.DropZone.OS
  154. });
  155. }
  156. });
  157. return {
  158. States: {
  159. 0: "unknown",
  160. 1: "scheduled",
  161. 2: "queued",
  162. 3: "started",
  163. 4: "aborted",
  164. 5: "failed",
  165. 6: "finished",
  166. 7: "monitoring",
  167. 8: "aborting"
  168. },
  169. isComplete: function (state) {
  170. switch (state) {
  171. case 4:
  172. case 5:
  173. case 6:
  174. return true;
  175. }
  176. return false;
  177. },
  178. OS_TYPE:
  179. {
  180. OS_WINDOWS: 0,
  181. OS_SOLARIS: 1,
  182. OS_LINUX: 2
  183. },
  184. CommandMessages: {
  185. 1: "Copy",
  186. 2: "Remove",
  187. 3: "Move",
  188. 4: "Rename",
  189. 5: "Replicate",
  190. 6: "Spray (Import)",
  191. 7: "Despray (Export)",
  192. 8: "Add",
  193. 9: "Transfer",
  194. 10: "Save Map",
  195. 11: "Add Group",
  196. 12: "Server",
  197. 13: "Monitor",
  198. 14: "Copy Merge",
  199. 15: "Super Copy"
  200. },
  201. FormatMessages: {
  202. 0: "fixed",
  203. 1: "csv",
  204. 2: "utf8",
  205. 3: "utf8n",
  206. 4: "utf16",
  207. 5: "utf16le",
  208. 6: "utf16be",
  209. 7: "utf32",
  210. 8: "utf32le",
  211. 9: "utf32be",
  212. 10: "variable",
  213. 11: "recfmvb",
  214. 12: "recfmv",
  215. 13: "variablebigendian"
  216. },
  217. CreateLandingZonesStore: function (options) {
  218. var store = new LandingZonesStore(options);
  219. return Observable(store);
  220. },
  221. CreateFileListStore: function (options) {
  222. var store = new FileListStore(options);
  223. return Observable(store);
  224. },
  225. GetDFUWorkunits: function (params) {
  226. return ESPRequest.send("FileSpray", "GetDFUWorkunits", params);
  227. },
  228. DFUWorkunitsAction: function (workunits, actionType, callback) {
  229. var request = {
  230. wuids: workunits,
  231. Type: actionType
  232. };
  233. ESPRequest.flattenArray(request, "wuids", "ID");
  234. return ESPRequest.send("FileSpray", "DFUWorkunitsAction", {
  235. request: request,
  236. load: function (response) {
  237. arrayUtil.forEach(workunits, function (item, index) {
  238. item.refresh();
  239. });
  240. /* TODO: Revisit after HPCC-9241 is fixed
  241. if (lang.exists("DFUWorkunitsActionResponse.ActionResults.WUActionResult", response)) {
  242. arrayUtil.forEach(response.WUActionResponse.ActionResults.WUActionResult, function (item, index) {
  243. if (item.Result.indexOf("Failed:") === 0) {
  244. dojo.publish("hpcc/brToaster", {
  245. message: "<h4>" + item.Action + " " + item.Wuid + "</h4>" + "<p>" + item.Result + "</p>",
  246. type: "error",
  247. duration: -1
  248. });
  249. } else {
  250. dojo.publish("hpcc/brToaster", {
  251. message: "<h4>" + item.Action + " " + item.Wuid + "</h4>" + "<p>" + item.Result + "</p>",
  252. type: "message"
  253. });
  254. }
  255. });
  256. }
  257. */
  258. if (callback && callback.load) {
  259. callback.load(response);
  260. }
  261. },
  262. error: function (err) {
  263. if (callback && callback.error) {
  264. callback.error(err);
  265. }
  266. }
  267. });
  268. },
  269. SprayFixed: function (params) {
  270. return ESPRequest.send("FileSpray", "SprayFixed", params);
  271. },
  272. SprayVariable: function (params) {
  273. return ESPRequest.send("FileSpray", "SprayVariable", params);
  274. },
  275. Despray: function (params) {
  276. return ESPRequest.send("FileSpray", "Despray", params);
  277. },
  278. Copy: function (params) {
  279. return ESPRequest.send("FileSpray", "Copy", params);
  280. },
  281. Rename: function (params) {
  282. return ESPRequest.send("FileSpray", "Rename", params);
  283. },
  284. GetDFUWorkunit: function (params) {
  285. return ESPRequest.send("FileSpray", "GetDFUWorkunit", params);
  286. },
  287. UpdateDFUWorkunit: function (params) {
  288. return ESPRequest.send("FileSpray", "UpdateDFUWorkunit", params);
  289. },
  290. DFUWUFile: function (params) {
  291. lang.mixin(params, {
  292. handleAs: "text"
  293. });
  294. return ESPRequest.send("FileSpray", "DFUWUFile", params);
  295. },
  296. FileList: function (params) {
  297. return ESPRequest.send("FileSpray", "FileList", params);
  298. },
  299. DropZoneFiles: function (params) {
  300. return ESPRequest.send("FileSpray", "DropZoneFiles", params);
  301. },
  302. DeleteDropZoneFile: function (params) {
  303. // Single File Only
  304. return ESPRequest.send("FileSpray", "DeleteDropZoneFiles", params).then(function (response) {
  305. if (lang.exists("DFUWorkunitsActionResponse.DFUActionResults.DFUActionResult", response)) {
  306. var resultID = response.DFUWorkunitsActionResponse.DFUActionResults.DFUActionResult[0].ID;
  307. var resultMessage = response.DFUWorkunitsActionResponse.DFUActionResults.DFUActionResult[0].Result;
  308. if (resultMessage.indexOf("Success") === 0) {
  309. dojo.publish("hpcc/brToaster", {
  310. message: "<h4>Delete " + resultID + "</h4>" + "<p>" + resultMessage + "</p>",
  311. type: "message"
  312. });
  313. } else {
  314. dojo.publish("hpcc/brToaster", {
  315. message: "<h4>Delete " + resultID + "</h4>" + "<p>" + resultMessage + "</p>",
  316. type: "error",
  317. duration: -1
  318. });
  319. }
  320. }
  321. return response;
  322. });
  323. }
  324. };
  325. });