Browse Source

[oozie] Also get list of subworkflows at loading of the editor

Romain Rigaux 11 years ago
parent
commit
2552022ba7

+ 2 - 2
apps/oozie/src/oozie/models2.py

@@ -628,7 +628,7 @@ class SubWorkflowAction(Action):
           'label': _('Sub-workflow'),
           'label': _('Sub-workflow'),
           'value': None,
           'value': None,
           'help_text': _('The sub-workflow application to include. You must own all the sub-workflows'),
           'help_text': _('The sub-workflow application to include. You must own all the sub-workflows'),
-          'type': ''
+          'type': 'workflow'
      },
      },
      'propagate_configuration': { 
      'propagate_configuration': { 
           'name': 'propagate_configuration',
           'name': 'propagate_configuration',
@@ -648,7 +648,7 @@ class SubWorkflowAction(Action):
 
 
   @classmethod
   @classmethod
   def get_mandatory_fields(cls):
   def get_mandatory_fields(cls):
-    return []
+    return [cls.FIELDS['workflow']] 
 
 
 
 
 class SqoopAction(Action):
 class SqoopAction(Action):

+ 7 - 17
apps/oozie/src/oozie/templates/editor/workflow_editor.mako

@@ -392,15 +392,7 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user, "40px") | n,unicode }
       <a class="widget-icon"><i class="fa fa-files-o"></i></a>
       <a class="widget-icon"><i class="fa fa-files-o"></i></a>
       <!-- /ko -->
       <!-- /ko -->
 
 
-
-      <!-- ko if: $root.collection && $root.collection.getFacetById(id()) -->
-      <span data-bind="with: $root.collection.getFacetById(id())">
-        <span data-bind="editable: label, editableOptions: {enabled: $root.isEditing(), placement: 'right'}"></span>
-      </span>
-      <!-- /ko -->
-      <!-- ko if: typeof $root.collection == 'undefined' || $root.collection.getFacetById(id()) == null -->
-        <span data-bind="editable: name, editableOptions: {enabled: $root.isEditing(), placement: 'right'}"></span>
-      <!-- /ko -->
+      <span data-bind="editable: name, editableOptions: {enabled: $root.isEditing(), placement: 'right'}"></span>
 
 
       <!-- ko if: widgetType() == 'decision-widget' -->
       <!-- ko if: widgetType() == 'decision-widget' -->
         <div class="inline pull-right" data-bind="visible: $root.isEditing() && $root.workflow.getNodeById(id()) && $root.workflow.getNodeById(id()).children().length <= 1 && ! ooziePropertiesExpanded()">
         <div class="inline pull-right" data-bind="visible: $root.isEditing() && $root.workflow.getNodeById(id()) && $root.workflow.getNodeById(id()).children().length <= 1 && ! ooziePropertiesExpanded()">
@@ -973,7 +965,7 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user, "40px") | n,unicode }
   <div class="row-fluid" data-bind="with: $root.workflow.getNodeById(id())" style="padding: 10px">
   <div class="row-fluid" data-bind="with: $root.workflow.getNodeById(id())" style="padding: 10px">
     <div data-bind="visible: $root.isEditing">
     <div data-bind="visible: $root.isEditing">
       <div data-bind="visible: ! $parent.ooziePropertiesExpanded()">
       <div data-bind="visible: ! $parent.ooziePropertiesExpanded()">
-        <select data-bind="options: $root.addActionWorkflows, optionsText: 'name', value: properties.selectedSubWorkflow"></select>
+        <select data-bind="options: $root.addActionWorkflows, optionsText: 'name', optionsValue: 'value', value: properties.workflow"></select>
       </div>
       </div>
     </div>
     </div>
 
 
@@ -1494,8 +1486,7 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user, "40px") | n,unicode }
   <div class="modal-body">
   <div class="modal-body">
     <table data-bind="foreach: addActionProperties">
     <table data-bind="foreach: addActionProperties">
       <tr>
       <tr>
-        <td data-bind="text: label" style="width: 1%; padding-right: 10px" class="no-wrap"></td>
-        
+        <td data-bind="text: label" style="width: 1%; padding-right: 10px" class="no-wrap"></td>        
         <td>
         <td>
           <!-- ko if: type == '' -->
           <!-- ko if: type == '' -->
           <input type="text" data-bind="filechooser: value, attr: { placeholder: help_text }">
           <input type="text" data-bind="filechooser: value, attr: { placeholder: help_text }">
@@ -1506,14 +1497,13 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user, "40px") | n,unicode }
           <!-- ko if: type == 'textarea' -->
           <!-- ko if: type == 'textarea' -->
           <input data-bind="value: value" class="input-xxlarge"/>
           <input data-bind="value: value" class="input-xxlarge"/>
           <!-- /ko -->
           <!-- /ko -->
+          <!-- ko if: type == 'workflow' -->
+          <select data-bind="options: $root.addActionWorkflows, optionsText: 'name', value: $root.selectedSubWorkflow"></select>
+          <!-- /ko -->
         </td>
         </td>
       </tr>
       </tr>
     </table>
     </table>
 
 
-    <!-- ko if: addActionWorkflows().length > 0 -->
-      <select data-bind="options: addActionWorkflows, optionsText: 'name', value: selectedSubWorkflow"></select>
-    <!-- /ko -->
-
     <br/>
     <br/>
     <a class="btn btn-primary disable-feedback" data-bind="click: addActionDemiModalFieldPreview">
     <a class="btn btn-primary disable-feedback" data-bind="click: addActionDemiModalFieldPreview">
       ${ _('Add') }
       ${ _('Add') }
@@ -1617,7 +1607,7 @@ ${ dashboard.import_bindings() }
 <script type="text/javascript">
 <script type="text/javascript">
   ${ utils.slaGlobal() }
   ${ utils.slaGlobal() }
 
 
-  var viewModel = new WorkflowEditorViewModel(${ layout_json | n,unicode }, ${ workflow_json | n,unicode }, ${ credentials_json | n,unicode }, ${ workflow_properties_json | n,unicode });
+  var viewModel = new WorkflowEditorViewModel(${ layout_json | n,unicode }, ${ workflow_json | n,unicode }, ${ credentials_json | n,unicode }, ${ workflow_properties_json | n,unicode }, ${ subworkflows_json | n,unicode });
   ko.applyBindings(viewModel, $("#editor")[0]);
   ko.applyBindings(viewModel, $("#editor")[0]);
 
 
   var shareViewModel = setupSharing("#documentShareModal");
   var shareViewModel = setupSharing("#documentShareModal");

+ 13 - 9
apps/oozie/src/oozie/views/editor2.py

@@ -78,7 +78,8 @@ def edit_workflow(request):
       'workflow_json': json.dumps(workflow_data['workflow']),
       'workflow_json': json.dumps(workflow_data['workflow']),
       'credentials_json': json.dumps(credentials.credentials.keys()),
       'credentials_json': json.dumps(credentials.credentials.keys()),
       'workflow_properties_json': json.dumps(WORKFLOW_NODE_PROPERTIES),
       'workflow_properties_json': json.dumps(WORKFLOW_NODE_PROPERTIES),
-      'doc1_id': doc.doc.get().id if doc else -1
+      'doc1_id': doc.doc.get().id if doc else -1,
+      'subworkflows_json': json.dumps(_get_workflows(request.user)) # if has sub?
   })
   })
 
 
 
 
@@ -98,7 +99,7 @@ def save_workflow(request):
     workflow_doc = Document2.objects.create(name=workflow['name'], uuid=workflow['uuid'], type='oozie-workflow2', owner=request.user)
     workflow_doc = Document2.objects.create(name=workflow['name'], uuid=workflow['uuid'], type='oozie-workflow2', owner=request.user)
     Document.objects.link(workflow_doc, owner=workflow_doc.owner, name=workflow_doc.name, description=workflow_doc.description, extra='workflow2')
     Document.objects.link(workflow_doc, owner=workflow_doc.owner, name=workflow_doc.name, description=workflow_doc.description, extra='workflow2')
 
 
-  subworkflows = [node['properties']['subworkflow'] for node in workflow['nodes'] if node['type'] == 'subworkflow-widget']
+  subworkflows = [node['properties']['workflow'] for node in workflow['nodes'] if node['type'] == 'subworkflow-widget']
   if subworkflows:
   if subworkflows:
     dependencies = Document2.objects.filter(uuid__in=subworkflows)
     dependencies = Document2.objects.filter(uuid__in=subworkflows)
     workflow_doc.dependencies = dependencies
     workflow_doc.dependencies = dependencies
@@ -109,7 +110,6 @@ def save_workflow(request):
   workflow_doc.save()
   workflow_doc.save()
   
   
   workflow_instance = Workflow(document=workflow_doc)
   workflow_instance = Workflow(document=workflow_doc)
-  #workflow_instance.check_workspace(request.fs, request.user)
   
   
   response['status'] = 0
   response['status'] = 0
   response['id'] = workflow_doc.id
   response['id'] = workflow_doc.id
@@ -129,12 +129,7 @@ def new_node(request):
   workflows = []
   workflows = []
 
 
   if node['widgetType'] == 'subworkflow-widget':
   if node['widgetType'] == 'subworkflow-widget':
-    workflows = [{
-        'name': workflow.name,
-        'owner': workflow.owner.username,
-        'value': workflow.uuid
-      } for workflow in Document2.objects.filter(type='oozie-workflow2', owner=request.user)
-    ]
+    workflows = _get_workflows(request.user)
     
     
   response['status'] = 0
   response['status'] = 0
   response['properties'] = properties 
   response['properties'] = properties 
@@ -143,6 +138,15 @@ def new_node(request):
   return HttpResponse(json.dumps(response), mimetype="application/json")
   return HttpResponse(json.dumps(response), mimetype="application/json")
 
 
 
 
+def _get_workflows(user):
+  return [{
+        'name': workflow.name,
+        'owner': workflow.owner.username,
+        'value': workflow.uuid
+      } for workflow in Document2.objects.filter(type='oozie-workflow2', owner=user)
+    ]  
+
+
 def add_node(request):
 def add_node(request):
   response = {'status': -1}
   response = {'status': -1}
 
 

+ 2 - 2
apps/oozie/static/js/workflow-editor.ko.js

@@ -411,7 +411,7 @@ var Workflow = function (vm, workflow) {
   };
   };
 }
 }
 
 
-var WorkflowEditorViewModel = function (layout_json, workflow_json, credentials_json, workflow_properties_json) {
+var WorkflowEditorViewModel = function (layout_json, workflow_json, credentials_json, workflow_properties_json, subworkflows_json) {
   var self = this;
   var self = this;
 
 
   self.isNested = ko.observable(true);
   self.isNested = ko.observable(true);
@@ -454,7 +454,7 @@ var WorkflowEditorViewModel = function (layout_json, workflow_json, credentials_
   self.depen = ko.observableArray(workflow_json.dependencies);
   self.depen = ko.observableArray(workflow_json.dependencies);
 
 
   self.addActionProperties = ko.observableArray([]);
   self.addActionProperties = ko.observableArray([]);
-  self.addActionWorkflows = ko.observableArray([]);
+  self.addActionWorkflows = ko.observableArray(subworkflows_json);
   self.selectedSubWorkflow = ko.observable();
   self.selectedSubWorkflow = ko.observable();