dataset_controller.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. /**
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. App.MainMirroringDataSetController = Ember.Controller.extend({
  19. name: 'mainMirroringDataSetController',
  20. model: Ember.Object.create(
  21. {
  22. newDataSet: null,
  23. listOfTargetClusterNames: function () {
  24. var listOfClusterNames = [];
  25. var listOfTargetClusters = App.TargetCluster.find();
  26. if (listOfTargetClusters && listOfTargetClusters.content.length) {
  27. listOfTargetClusters.forEach(function (tcluster) {
  28. listOfClusterNames.push(tcluster.get('clusterName'));
  29. });
  30. }
  31. return listOfClusterNames;
  32. }.property('newDataSet.targetCluster'), // this property will be set when someone clicks the save button
  33. originalRecord: null,
  34. isNameError: function (key, value) {
  35. if (value) {
  36. return value;
  37. }
  38. var controller = App.router.get('mainMirroringDataSetController');
  39. var isNameError = controller.checkNameErrors();
  40. return isNameError;
  41. }.property('newDataSet.name', 'model.newDataSet.name'),
  42. isSourceDirError: function (key, value) {
  43. if (value) {
  44. return value;
  45. }
  46. var controller = App.router.get('mainMirroringDataSetController');
  47. var isSourceDirError = controller.checkSourceDirErrors();
  48. return isSourceDirError;
  49. }.property('newDataSet.sourceDir', 'model.newDataSet.sourceDir'),
  50. isTargetClusterError: function (key, value) {
  51. if (value) {
  52. return value;
  53. }
  54. var controller = App.router.get('mainMirroringDataSetController');
  55. var isTargetClusterError = controller.checkTargetClusterErrors();
  56. return isTargetClusterError;
  57. }.property('newDataSet.targetCluster', 'model.newDataSet.targetCluster'),
  58. isTargetDirError: function (key, value) {
  59. if (value) {
  60. return value;
  61. }
  62. var controller = App.router.get('mainMirroringDataSetController');
  63. var isTargetDirError = controller.checkTargetDirErrors();
  64. return isTargetDirError;
  65. }.property('newDataSet.targetDir', 'model.newDataSet.targetDir'),
  66. isStartDateError: function (key, value) {
  67. if (value) {
  68. return value;
  69. }
  70. var controller = App.router.get('mainMirroringDataSetController');
  71. var isStartDateError = controller.checkStartDateErrors();
  72. return isStartDateError;
  73. }.property('newDataSet.schedule.startDate', 'model.newDataSet.schedule.startDate'),
  74. isEndDateError: function (key, value) {
  75. if (value) {
  76. return value;
  77. }
  78. var controller = App.router.get('mainMirroringDataSetController');
  79. var isEndDateError = controller.checkEndDateErrors();
  80. return isEndDateError;
  81. }.property('newDataSet.schedule.endDate', 'model.newDataSet.schedule.endDate'),
  82. isFrequencyError: function (key, value) {
  83. if (value) {
  84. return value;
  85. }
  86. var controller = App.router.get('mainMirroringDataSetController');
  87. var isFrequencyError = controller.checkFrequencyErrors();
  88. return isFrequencyError;
  89. }.property('newDataSet.schedule.frequency', 'model.newDataSet.schedule.frequency')
  90. }
  91. ),
  92. isSubmitted: null,
  93. validate: function () {
  94. var isNameError = this.checkNameErrors();
  95. var isSourceDirError = this.checkSourceDirErrors();
  96. var isTargetClusterError = this.checkTargetClusterErrors();
  97. var isTargetDirError = this.checkTargetDirErrors();
  98. var isStartDateError = this.checkStartDateErrors();
  99. var isEndDateError = this.checkEndDateErrors();
  100. var isFrequencyError = this.checkFrequencyErrors();
  101. if (isNameError || isSourceDirError || isTargetClusterError || isTargetDirError || isStartDateError || isEndDateError || isFrequencyError) {
  102. return false;
  103. }
  104. return true;
  105. },
  106. checkNameErrors: function () {
  107. if (!this.get('isSubmitted')){
  108. this.set('nameErrorMessage', "");
  109. return false;
  110. }
  111. var name = this.get('model.newDataSet.name');
  112. if (!name || name.trim() === "") {
  113. this.set('model.isNameError', true);
  114. this.set('nameErrorMessage', Em.I18n.t('mirroring.required.error'));
  115. return true;
  116. }
  117. else {
  118. this.set('nameErrorMessage', "");
  119. return false;
  120. }
  121. },
  122. checkSourceDirErrors: function () {
  123. if (!this.get('isSubmitted')){
  124. this.set('sourceDirErrorMessage', "");
  125. return false;
  126. }
  127. var sourceDir = this.get('model.newDataSet.sourceDir');
  128. if (!sourceDir || sourceDir.trim() === "") {
  129. this.set('model.isSourceDirError', true);
  130. this.set('sourceDirErrorMessage', Em.I18n.t('mirroring.required.error'));
  131. return true;
  132. }
  133. else {
  134. this.set('sourceDirErrorMessage', "");
  135. return false;
  136. }
  137. },
  138. checkTargetClusterErrors: function () {
  139. if (!this.get('isSubmitted')){
  140. this.set('targetClusterErrorMessage', "");
  141. return false;
  142. }
  143. var targetCluster = this.get('model.newDataSet.targetCluster.clusterName');
  144. if (!targetCluster || targetCluster.trim() === "") {
  145. this.set('model.isTargetClusterError', true);
  146. this.set('targetClusterErrorMessage', Em.I18n.t('mirroring.required.error'));
  147. return true;
  148. }
  149. else {
  150. this.set('targetClusterErrorMessage', "");
  151. return false;
  152. }
  153. },
  154. checkTargetDirErrors: function () {
  155. if (!this.get('isSubmitted')){
  156. this.set('targetDirErrorMessage', "");
  157. return false;
  158. }
  159. var targetDir = this.get('model.newDataSet.targetDir');
  160. if (!targetDir || targetDir.trim() === "") {
  161. this.set('model.isTargetDirError', true);
  162. this.set('targetDirErrorMessage', Em.I18n.t('mirroring.required.error'));
  163. return true;
  164. }
  165. else {
  166. this.set('targetDirErrorMessage', "");
  167. return false;
  168. }
  169. },
  170. checkStartDateErrors: function () {
  171. if (!this.get('isSubmitted')){
  172. this.set('startDateErrorMessage', "");
  173. return false;
  174. }
  175. var startDate = this.get('model.newDataSet.schedule.startDate');
  176. if (!startDate || startDate.trim() === "") {
  177. this.set('model.isStartDateError', true);
  178. this.set('startDateErrorMessage', Em.I18n.t('mirroring.required.error'));
  179. return true;
  180. }
  181. else {
  182. this.set('startDateErrorMessage', "");
  183. return false;
  184. }
  185. },
  186. checkEndDateErrors: function () {
  187. if (!this.get('isSubmitted')){
  188. this.set('endDateErrorMessage', "");
  189. return false;
  190. }
  191. var startDate = this.get('model.newDataSet.schedule.startDate');
  192. var endDate = this.get('model.newDataSet.schedule.endDate');
  193. if (!endDate || endDate.trim() === "") {
  194. this.set('model.isEndDateError', true);
  195. this.set('endDateErrorMessage', Em.I18n.t('mirroring.required.error'));
  196. return true;
  197. }
  198. else {
  199. var sDate = new Date(this.get('model.newDataSet.schedule.startDate'));
  200. var eDate = new Date(this.get('model.newDataSet.schedule.endDate'));
  201. if(sDate > eDate){
  202. this.set('model.isEndDateError', true);
  203. this.set('endDateErrorMessage', Em.I18n.t('mirroring.dateOrder.error'));
  204. return true;
  205. }
  206. this.set('endDateErrorMessage', "");
  207. return false;
  208. }
  209. },
  210. checkFrequencyErrors: function () {
  211. if (!this.get('isSubmitted')){
  212. this.set('frequencyErrorMessage', "");
  213. return false;
  214. }
  215. var frequency = this.get('model.newDataSet.schedule.frequency');
  216. if (!frequency || frequency.trim() === "") {
  217. this.set('model.isFrequencyError', true);
  218. this.set('frequencyErrorMessage', Em.I18n.t('mirroring.required.error'));
  219. return true;
  220. }
  221. else {
  222. var startParenthesisindex = frequency.indexOf('(');
  223. var endParenthesisindex = frequency.indexOf(')');
  224. if (endParenthesisindex - startParenthesisindex == 1) {
  225. this.set('model.isFrequencyError', true);
  226. this.set('frequencyErrorMessage', Em.I18n.t('mirroring.required.error'));
  227. return true;
  228. }
  229. else {
  230. var frequencyNum = frequency.substring(startParenthesisindex + 1, endParenthesisindex);
  231. frequencyNum = parseInt(frequencyNum);
  232. if (isNaN(frequencyNum)) {
  233. this.set('model.isFrequencyError', true);
  234. this.set('frequencyErrorMessage', Em.I18n.t('mirroring.required.invalidNumberError'));
  235. return true;
  236. }
  237. }
  238. this.set('frequencyErrorMessage', "");
  239. return false;
  240. }
  241. },
  242. nameErrorMessage: null,
  243. sourceDirErrorMessage: null,
  244. targetClusterErrorMessage: null,
  245. targetDirErrorMessage: null,
  246. startDateErrorMessage: null,
  247. endDateErrorMessage: null,
  248. frequencyErrorMessage: null,
  249. /**
  250. * Popup with add/edit form
  251. */
  252. popup: null,
  253. /**
  254. * true - popup with edit form
  255. * false - popup with add form
  256. */
  257. isPopupForEdit: false,
  258. createNewDataSet: function () {
  259. var newDataSet = Ember.Object.create({
  260. name: null,
  261. sourceDir: null,
  262. targetCluster: Ember.Object.create(),
  263. targetDir: null,
  264. status : 'SCHEDULED',
  265. schedule: Ember.Object.create()
  266. });
  267. this.set('model.newDataSet', newDataSet);
  268. return newDataSet;
  269. },
  270. setDataSet: function (dataset) {
  271. var newDataSet = Ember.Object.create({
  272. name: dataset.get('name'),
  273. sourceDir: dataset.get('sourceDir'),
  274. targetCluster: dataset.get('targetCluster'),
  275. targetDir: dataset.get('targetDir'),
  276. schedule: dataset.get('schedule'),
  277. status: dataset.get('status')
  278. });
  279. this.set('model.newDataSet', newDataSet);
  280. },
  281. setOriginalDataSetRecord: function (datasetRecord) {
  282. this.set('model.originalRecord', datasetRecord);
  283. },
  284. getNewDataSet: function () {
  285. return this.get('model.newDataSet');
  286. },
  287. createTargetCluster: function () {
  288. var controller = App.router.get('mainMirroringTargetClusterController');
  289. controller.set('returnRoute', App.get('router.currentState.path'));
  290. App.router.transitionTo('addTargetClusterRoute');
  291. },
  292. /**
  293. * Set old values for all properties in the dataset
  294. */
  295. undoChanges: function () {
  296. this.set('model.newDataSet', this.get('rawDataSet'));
  297. },
  298. /**
  299. * Delete created dataset and its schedule
  300. */
  301. deleteNewDataSet: function () {
  302. var originalRecordSchedule = this.get('model.originalRecord.schedule');
  303. originalRecordSchedule.deleteRecord();
  304. originalRecordSchedule.get("transaction").commit();
  305. var originalRecord = this.get('model.originalRecord');
  306. originalRecord.deleteRecord();
  307. originalRecord.get("transaction").commit();
  308. },
  309. /**
  310. * "Delete" button handler
  311. */
  312. deleteDatasetClick: function () {
  313. var self = this;
  314. App.showConfirmationPopup(function () {
  315. self.deleteNewDataSet();
  316. self.get('popup').hide();
  317. App.router.transitionTo('main.mirroring.index');
  318. });
  319. }
  320. });