Browse Source

HUE-938 [oozie] Fix order of operations in node editing from decision node and added EL help

Could not cancel editing before getting KO context when editing a node from a decision node.
Using http://archive.cloudera.com/cdh4/cdh/4/oozie/WorkflowFunctionalSpec.html#a4.2_Expression_Language_Functions
as the official reference of EL functions.
abec 13 years ago
parent
commit
9cadaff

+ 2 - 0
apps/oozie/src/oozie/templates/editor/control_utils.mako

@@ -81,6 +81,8 @@
                 ${"${"} fs:fileSize(secondjobOutputDir) gt 10 * GB }
                 <br/>
                 ${"${"} hadoop:counters('secondjob')[RECORDS][REDUCE_OUT] lt 1000000 }
+                <br/>
+                <a href="http://oozie.apache.org/docs/3.3.0/WorkflowFunctionalSpec.html#a4.2_Expression_Language_Functions">More on predicates</a>
               </div>
             </div>
           </div>

+ 21 - 48
apps/oozie/src/oozie/templates/editor/edit_workflow.mako

@@ -513,6 +513,7 @@ ${ controls.decision_form(link_form, default_link_form, 'decision', True) }
 <script type="text/javascript" src="/oozie/static/js/workflow.js"></script>
 
 <script type="text/javascript">
+// Save workflow function
 $.extend(Workflow.prototype, {
   save: function( options ) {
     var self = this;
@@ -581,22 +582,25 @@ var workflow = new Workflow({
   model: workflow_model,
   registry: registry
 });
-var modal = new Modal($('#node-modal'));
 workflow.load();
 
-$('#workflow').on('click', '.edit-node-link', function(e) {
-  modal.hide();
+/**
+ * Modal
+ */
+var modal = new Modal($('#node-modal'));
 
-  var node = ko.contextFor(this).$data;
+// open a modal window for editing a node
+function edit_node_modal(node, save, cancel) {
   var backup = ko.mapping.toJS(node);
   normalize_model_fields(backup);
 
+  modal.hide();
   modal.setTemplate(node.edit_template);
   modal.show(node);
   modal.recenter(280, 250);
   modal.addDecorations();
 
-  var cancel_edit = function(e) {
+  var cancel_edit = cancel || function() {
     ko.mapping.fromJS(backup, node);
     modal.hide();
 
@@ -604,7 +608,7 @@ $('#workflow').on('click', '.edit-node-link', function(e) {
     return false;
   };
 
-  var try_save = function(e) {
+  var try_save = save || function() {
     if (node.validate()) {
       workflow.is_dirty( true );
       modal.hide();
@@ -616,44 +620,31 @@ $('#workflow').on('click', '.edit-node-link', function(e) {
   modal.el.on('click', '.cancelButton', cancel_edit);
   modal.el.on('click', '.doneButton', try_save);
 
-  modal.el.on('click', '.edit-node-link', function(e) {
-    // Switch to clicked action
-    cancel_edit();
-
+  modal.el.on('click', '.edit-node-link', function() {
     var link = ko.contextFor(this).$data;
     var parent = ko.contextFor(this).$parent;
     var node = parent.registry.get(link.child());
-    var backup = ko.mapping.toJS(node);
-    normalize_model_fields(backup);
 
-    modal.setTemplate(node.edit_template);
-    modal.show(node);
-    modal.recenter(280, 250);
-    modal.addDecorations();
+    cancel_edit();
 
-    $('.modal-backdrop').on('click', cancel_edit);
-    modal.el.on('click', '.close', cancel_edit);
-    modal.el.on('click', '.cancelButton', cancel_edit);
-    modal.el.on('click', '.doneButton', try_save);
+    edit_node_modal(node);
   });
+}
+
+$('#workflow').on('click', '.edit-node-link', function(e) {
+  var node = ko.contextFor(this).$data;
+  edit_node_modal(node);
 });
 
 $('#workflow').on('click', '.new-node-link', function(e) {
   var node_type = $(this).attr('data-node-type');
-  var template = node_type + 'EditTemplate';
   var NodeModel = nodeModelChooser(node_type);
   var model = new NodeModel({
     id: IdGeneratorTable[node_type].nextId(),
     node_type: node_type
   });
   var node = new Node(workflow, model, registry);
-
-  self.registry.add(model.id, node);
-
-  modal.setTemplate(template);
-  modal.show(node);
-  modal.recenter(280, 250);
-  modal.addDecorations();
+  workflow.registry.add(model.id, node);
 
   var cancel_edit = function(e) {
     // Didn't save, erase node.
@@ -672,35 +663,20 @@ $('#workflow').on('click', '.new-node-link', function(e) {
     }
   };
 
-  $('.modal-backdrop').on('click', cancel_edit);
-  modal.el.on('click', '.close', cancel_edit);
-  modal.el.on('click', '.cancelButton', cancel_edit);
-  modal.el.on('click', '.doneButton', try_save);
+  edit_node_modal(node, try_save, cancel_edit);
 });
 
 $('#workflow').on('click', '.clone-node-btn', function(e) {
   var node = ko.contextFor(this).$data;
-
   var model_copy = $.extend(true, {}, node.model);
-  var template = model_copy.node_type + 'EditTemplate';
   var NodeModel = nodeModelChooser(node.node_type());
-
   model_copy.id = IdGeneratorTable[model_copy.node_type].nextId();
   model_copy.name += '-copy';
   model_copy.child_links = [];
-
   var model = new NodeModel(model_copy);
   var new_node = new Node(workflow, model, workflow.registry);
-
   workflow.registry.add(new_node.id(), new_node);
 
-  modal.setTemplate(template);
-  modal.show(new_node);
-  modal.recenter(280, 250);
-  modal.addDecorations();
-
-  // $(".propKey").each(addAutoComplete);
-
   var cancel_edit = function(e) {
     // Didn't save, erase node.
     new_node.erase();
@@ -718,10 +694,7 @@ $('#workflow').on('click', '.clone-node-btn', function(e) {
     }
   };
 
-  $('.modal-backdrop').on('click', cancel_edit);
-  modal.el.on('click', '.close', cancel_edit);
-  modal.el.on('click', '.cancelButton', cancel_edit);
-  modal.el.on('click', '.doneButton', try_save);
+  edit_node_modal(new_node, try_save, cancel_edit);
 });
 
 $('#workflow').on('click', '.delete-node-btn', function(e) {

+ 1 - 1
apps/oozie/static/js/workflow.js

@@ -124,7 +124,7 @@ var ModalModule = function($, ko) {
     self.modal.modal('show');
   };
 
-  module.prototype.hide = function(context) {
+  module.prototype.hide = function() {
     var self = this;
 
     self.el.modal('hide');