瀏覽代碼

[oozie] Fix clone

Abraham Elmahrek 12 年之前
父節點
當前提交
a72b2aec5e

+ 4 - 6
apps/oozie/src/oozie/templates/editor/edit_workflow.mako

@@ -624,12 +624,10 @@ $('#workflow').on('click', '.convert-node-link', function(e) {
 // Modal for cloning a node
 $('#workflow').on('click', '.clone-node-btn', function(e) {
   var node = ko.contextFor(this).$data;
-  var model_copy = $.extend(true, {}, node.model);
-  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 model = node.model.copy();
+  model.id = IdGeneratorTable[model.node_type].nextId();
+  model.name += '-copy';
+  model.child_links = [];
   var new_node = new Node(workflow, model, workflow.registry);
   workflow.registry.add(new_node.id(), new_node);
 

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

@@ -361,7 +361,7 @@ var WorkflowModule = function($, NodeModelChooser, Node, ForkNode, DecisionNode,
 
     // @see http://knockoutjs.com/documentation/plugins-mapping.html
     var mapping = ko.mapping.fromJS(options.model, {
-      ignore: ['initialize', 'toString'],
+      ignore: ['initialize', 'toString', 'copy'],
       job_properties: {
         create: function(options) {
           var parent = options.parent;

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

@@ -47,7 +47,7 @@ var map_params = function(options, subscribe) {
 
 // Maps JSON strings to fields in the view model.
 var MAPPING_OPTIONS = {
-  ignore: ['initialize', 'toString'],
+  ignore: ['initialize', 'toString', 'copy'],
   job_properties: {
     create: function(options) {
       var parent = options.parent;
@@ -235,6 +235,17 @@ var ModelModule = function($) {
     toString: function() {
       var self = this;
       return JSON.stringify(self, null, '\t');
+    },
+
+    copy: function() {
+      var self = this;
+      var model = $.extend(true, {}, self);
+      $.each(MODEL_FIELDS_JSON, function(i, field) {
+        if (field in model && $.type(model[field]) != "string") {
+          model[field] = JSON.stringify(model[field]);
+        }
+      });
+      return model;
     }
   });