JobMenuController.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. "use strict";
  2. /*
  3. *+------------------------------------------------------------------------+
  4. *| Licensed Materials - Property of IBM
  5. *| IBM Cognos Products: Content Explorer
  6. *| (C) Copyright IBM Corp. 2018
  7. *|
  8. *| US Government Users Restricted Rights - Use, duplication or disclosure
  9. *| restricted by GSA ADP Schedule Contract with IBM Corp.
  10. *+------------------------------------------------------------------------+
  11. */
  12. define(['underscore', 'ba-react-admin/ba-react-admin.min', 'bi/admin/job/JobPane', 'bi/commons/ui/core/Class'], function (_, AdminReact, JobPane, Class) {
  13. 'use strict';
  14. var JobMenuController = Class.extend({
  15. runnables: _.keys(AdminReact.JobStepObjects),
  16. _getSelectedObject: function _getSelectedObject(options) {
  17. return options.target.activeObject.aSelectedContext;
  18. },
  19. canExecute: function canExecute(options) {
  20. var selections = this._getSelectedObject(options);
  21. this.glassContext = options.glassContext;
  22. return this.isViewable(selections);
  23. },
  24. doAction: function doAction(opts) {
  25. this.executeEditJob(opts.target.activeObject.aSelectedContext[0].id);
  26. },
  27. isViewable: function isViewable(selections) {
  28. return selections.length === 1 && selections[0].type === 'jobDefinition' && selections[0].permissions.indexOf("traverse") !== -1;
  29. },
  30. _canAddToJob: function _canAddToJob(selections) {
  31. var hasRunnable = this.selectionHasAtLeastOneRunnable(selections);
  32. if (hasRunnable && selections.length === 1) {
  33. return selections[0].id !== AdminReact.JobObjectStore.id;
  34. }
  35. return selections.length > 0 && hasRunnable;
  36. },
  37. isItemVisible: function isItemVisible(options) {
  38. this.glassContext = options.glassContext;
  39. var selections = this._getSelectedObject(options);
  40. switch (options.target.itemId) {
  41. case 'com.ibm.bi.job.editJob':
  42. return this.isViewable(selections);
  43. break;
  44. case 'com.ibm.bi.job.createJobWith':
  45. return selections.length > 0 && this.selectionHasAtLeastOneRunnable(selections);
  46. break;
  47. case 'com.ibm.bi.job.addToJob':
  48. return this._canAddToJob(selections) && AdminReact.JobUIStore.isOpen && AdminReact.JobObjectStore.canWrite;
  49. break;
  50. default:
  51. return false;
  52. }
  53. },
  54. onSelectItem: function onSelectItem(options) {
  55. switch (options.target.itemId) {
  56. case "com.ibm.bi.job.editJob":
  57. this.executeEditJob(options.options[0].id);
  58. break;
  59. case "com.ibm.bi.job.createJobWith":
  60. this.executeCreateJob(options);
  61. break;
  62. case "com.ibm.bi.job.addToJob":
  63. this.executeAddToJob(options);
  64. break;
  65. default:
  66. return;
  67. }
  68. },
  69. executeCreateJob: function executeCreateJob(options) {
  70. var selections = this._getFilterSelectedList(options.options);
  71. var context = {
  72. selectedSteps: selections
  73. };
  74. JobPane.openJobPane(this.glassContext, context);
  75. },
  76. _getFilterSelectedList: function _getFilterSelectedList(list) {
  77. return _.reject(list, function (item) {
  78. return this.runnables.indexOf(item.type) === -1;
  79. }.bind(this));
  80. },
  81. executeAddToJob: function executeAddToJob(options) {
  82. var selections = this._getFilterSelectedList(options.options);
  83. AdminReact.JobObjectStore.addJobStepsFromGlass(this.glassContext, selections);
  84. var context = {
  85. setFocus: true,
  86. addToJob: true
  87. };
  88. JobPane.openJobPane(this.glassContext, context);
  89. },
  90. selectionHasAtLeastOneRunnable: function selectionHasAtLeastOneRunnable(selections) {
  91. for (var i = 0; i < selections.length; i++) {
  92. var currentItem = selections[i];
  93. if (this.runnables.indexOf(currentItem.type) !== -1) {
  94. return true;
  95. }
  96. }
  97. return false;
  98. },
  99. executeEditJob: function executeEditJob(id) {
  100. var context = {
  101. objectInfo: {
  102. id: id
  103. }
  104. };
  105. JobPane.openJobPane(this.glassContext, context);
  106. }
  107. });
  108. return JobMenuController;
  109. });