Эх сурвалжийг харах

[oozie] Adding links to selected subworkflows

Romain Rigaux 11 жил өмнө
parent
commit
a370310

+ 28 - 14
apps/oozie/src/oozie/templates/editor/workflow_editor.mako

@@ -143,7 +143,7 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user, "40px") | n,unicode }
 <div class="search-bar">
   <div class="pull-right" style="padding-right:50px">
 
-    <a title="${ _('Submit') }" rel="tooltip" data-placement="bottom" data-bind="click: showSubmitPopup, css: {'btn': true}">
+    <a title="${ _('Submit') }" rel="tooltip" data-placement="bottom" data-bind="click: showSubmitPopup, css: {'btn': true}, visible: workflow.id() != null">
       <i class="fa fa-fw fa-play"></i>
     </a>
     <a title="${ _('Edit') }" rel="tooltip" data-placement="bottom" data-bind="click: toggleEditing, css: {'btn': true, 'btn-inverse': isEditing}">
@@ -604,16 +604,16 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user, "40px") | n,unicode }
   <!-- ko if: children().length == 2 -->
   OK -->
   <select data-bind="options: $root.workflow.nodeIds,
-                     optionsText: function(item) {return $root.workflow.nodeNamesMapping()[item]; },
-                     value: children()[0]['to']
-                     ">
+      optionsText: function(item) {return $root.workflow.nodeNamesMapping()[item]; },
+      value: children()[0]['to']
+      ">
   </select>
   <br/>
   KO -->
   <select data-bind="options: $root.workflow.nodeIds,
-                     optionsText: function(item) {return $root.workflow.nodeNamesMapping()[item]; },
-                     value: children()[1]['error']
-                     ">
+     optionsText: function(item) {return $root.workflow.nodeNamesMapping()[item]; },
+	 value: children()[1]['error']
+     ">
   </select>
   <!-- /ko -->
 </script>
@@ -626,9 +626,8 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user, "40px") | n,unicode }
 
 
 <script type="text/html" id="common-action-sla">
-    <div data-bind="with: properties">
-      ${ utils.slaForm() }
-    </div>
+  <div data-bind="with: properties">
+     ${ utils.slaForm() }
   </div>
 </script>
 
@@ -750,11 +749,11 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user, "40px") | n,unicode }
   <div class="row-fluid" data-bind="with: $root.workflow.getNodeById(id())" style="padding: 10px">
 
     <div data-bind="visible: ! $root.isEditing()">
-      <span data-bind="text: $root.workflow_properties.script_path.label"></span>
       <a data-bind="attr: {href: '/filebrowser/view' + properties.script_path() }" target="_blank" title="${ _('Open script') }">
         <strong data-bind="text: properties.script_path"></strong>
       </a>
     </div>
+
     <div data-bind="visible: $root.isEditing">
       <div data-bind="visible: ! $parent.ooziePropertiesExpanded()">
         <span data-bind="text: $root.workflow_properties.script_path.label"></span>
@@ -957,9 +956,24 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user, "40px") | n,unicode }
   <div class="row-fluid" data-bind="with: $root.workflow.getNodeById(id())" style="padding: 10px">
     <div data-bind="visible: $root.isEditing">
       <div data-bind="visible: ! $parent.ooziePropertiesExpanded()">
-        <select data-bind="options: $root.addActionWorkflows, optionsText: 'name', optionsValue: 'value', value: properties.workflow"></select>
+        <select data-bind="options: $root.subworfklows, optionsText: 'name', optionsValue: 'value', value: properties.workflow"></select>
       </div>
+      <span data-bind="visible: properties.workflow().length > 0">
+        <a href="#" data-bind="attr: { href: '${ url('oozie:edit_workflow') }' + '?workflow=' + properties.workflow() }" target="_blank">
+          <i class="fa fa-external-link-square"></i>
+        </a>
+      </span>
     </div>
+    
+    <div data-bind="visible: ! $root.isEditing()">
+      <!-- ko if: $root.getSubWorkflow(properties.workflow()) -->
+        <span data-bind="with: $root.getSubWorkflow(properties.workflow())">
+          <a href="#" data-bind="attr: { href: '${ url('oozie:edit_workflow') }' + '?workflow=' + $data.value() }" target="_blank">
+            <span data-bind="text: $data.name"></span>
+          </a>
+        </span>
+      <!-- /ko -->
+    </div>    
 
     <div data-bind="visible: $parent.ooziePropertiesExpanded">
       <ul class="nav nav-tabs">
@@ -1490,7 +1504,7 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user, "40px") | n,unicode }
           <input data-bind="value: value" class="input-xlarge"/>
           <!-- /ko -->
           <!-- ko if: type == 'workflow' -->
-          <select data-bind="options: $root.addActionWorkflows, optionsText: 'name', value: $root.selectedSubWorkflow"></select>
+          <select data-bind="options: $root.subworfklows, optionsText: 'name', optionsValue: 'value', value: value"></select>
           <!-- /ko -->
         </td>
       </tr>
@@ -1528,7 +1542,7 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user, "40px") | n,unicode }
       <h4>${_("Workspace")}</h4>
       <input type="text" class="input-xlarge filechooser-input" data-bind="filechooser: {value: $root.workflow.properties.deployment_dir, displayJustLastBit: true}" rel="tooltip"/>
 
-	    <h4>${ _('Hadoop Properties') }</h4>
+	  <h4>${ _('Hadoop Properties') }</h4>
       <ul data-bind="foreach: $root.workflow.properties.properties" class="unstyled">
         <li>
           <input data-bind="value: name"/>

+ 8 - 8
apps/oozie/src/oozie/views/editor2.py

@@ -55,7 +55,12 @@ def edit_workflow(request):
   workflow_id = request.GET.get('workflow')
   
   if workflow_id:
-    doc = Document2.objects.get(type='oozie-workflow2', id=workflow_id)
+    wid = {}
+    if workflow_id.isdigit():
+      wid['id'] = workflow_id
+    else:
+      wid['uuid'] =workflow_id
+    doc = Document2.objects.get(type='oozie-workflow2', **wid)
     workflow = Workflow(document=doc) # Todo perms
   else:
     doc = None
@@ -142,7 +147,8 @@ def _get_workflows(user):
   return [{
         'name': workflow.name,
         'owner': workflow.owner.username,
-        'value': workflow.uuid
+        'value': workflow.uuid,
+        'id': workflow.id
       } for workflow in Document2.objects.filter(type='oozie-workflow2', owner=user)
     ]  
 
@@ -153,16 +159,10 @@ def add_node(request):
   workflow = json.loads(request.POST.get('workflow', '{}')) # TODO perms
   node = json.loads(request.POST.get('node', '{}'))
   properties = json.loads(request.POST.get('properties', '{}'))
-  subworkflow = json.loads(request.POST.get('subworkflow', '{}'))
 
   _properties = dict(NODES[node['widgetType']].get_fields())
   _properties.update(dict([(_property['name'], _property['value']) for _property in properties]))
 
-  if subworkflow:
-    _properties.update({
-       'workflow': subworkflow['value']
-    })
-
   response['status'] = 0
   response['properties'] = _properties
   response['name'] = '%s-%s' % (node['widgetType'].split('-')[0], node['id'][:4])

+ 11 - 8
apps/oozie/static/js/workflow-editor.ko.js

@@ -219,7 +219,7 @@ var Workflow = function (vm, workflow) {
         if (data.status == 0) {
           viewModel.addActionProperties(data.properties);
           if (data.workflows.length > 0) {
-            viewModel.addActionWorkflows(data.workflows);
+            viewModel.subworfklows(data.workflows);
           }
           if (callback) {
             callback(widget);
@@ -235,7 +235,6 @@ var Workflow = function (vm, workflow) {
       "workflow": ko.mapping.toJSON(workflow),
       "node": ko.mapping.toJSON(widget),
       "properties": ko.mapping.toJSON(viewModel.addActionProperties()),
-      "subworkflow": viewModel.selectedSubWorkflow() ? ko.mapping.toJSON(viewModel.selectedSubWorkflow()) : '{}'
     }, function (data) {
       if (data.status == 0) {
         var _node = ko.mapping.toJS(widget);
@@ -454,14 +453,18 @@ var WorkflowEditorViewModel = function (layout_json, workflow_json, credentials_
     self.workflow_properties = ko.mapping.fromJS(workflow_properties_json);
     loadLayout(self, layout_json);
     self.workflow.loadNodes(workflow_json);
-  }
-
-  self.depen = ko.observableArray(workflow_json.dependencies);
+  };
 
   self.addActionProperties = ko.observableArray([]);
-  self.addActionWorkflows = ko.observableArray(subworkflows_json);
-  self.selectedSubWorkflow = ko.observable();
-
+  self.subworfklows = ko.observableArray(subworkflows_json);
+  self.getSubWorkflow = function(uuid) {
+    var wf = $.grep(self.subworfklows(), function(wf, i) {
+        return wf.value == uuid;
+    });
+    if (wf[0]) {
+      return ko.mapping.fromJS(wf[0]);
+    }
+  };
 
   self.currentlyDraggedWidget = ko.observable(null);
   self.currentlyDraggedOp = ko.observable("move");