Browse Source

HUE-3687 [editor] Add dependency on workflow from editor

Romain Rigaux 9 years ago
parent
commit
e80f618

+ 4 - 1
apps/oozie/src/oozie/views/editor2.py

@@ -863,7 +863,7 @@ def schedule_document(request):
   notebook = Notebook(document=document)
   parameters = find_dollar_braced_variables(notebook.get_str())
 
-  name = 'Schedule of ' + document.name
+  name = _('Schedule of ') + document.name
 
   params = [{u'value': u'%s=${%s}' % (p, p)} for p in parameters]
 
@@ -875,6 +875,9 @@ def schedule_document(request):
   workflow_doc = Document2.objects.create(name=name, type='oozie-workflow2', owner=request.user, data=data)
   Document.objects.link(workflow_doc, owner=workflow_doc.owner, name=workflow_doc.name, description=workflow_doc.description, extra='workflow2')
 
+  workflow_doc.dependencies.add(document)
+  workflow_doc.save()
+
   response = {
     'status': 0,
     'url': reverse('oozie:new_coordinator') + '?workflow=' + workflow_doc.uuid

+ 2 - 2
desktop/core/src/desktop/api2.py

@@ -159,8 +159,8 @@ def get_document(request):
     response['data'] = data
 
   if with_dependencies:
-    response['dependencies'] = [dependency.uuid for dependency in document.dependencies.all()]
-    response['dependents'] = [dependent.uuid for dependent in document.dependents.all()]
+    response['dependencies'] = [dependency.to_dict() for dependency in document.dependencies.all()]
+    response['dependents'] = [dependent.to_dict() for dependent in document.dependents.all()]
 
   # Get children documents if this is a directory
   if document.is_directory:

+ 9 - 2
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -32,7 +32,8 @@
     ignore: [
       "ace", "autocompleter", "availableSnippets", "history", "images", "inFocus", "isResultSettingsVisible", "selectedStatement", "settingsVisible", "user",
       "availableDatabases", "hasProperties", "viewSettings", "aceMode", "snippetImage", "errorLoadingQueries",
-      "cleanedStringMeta", "cleanedDateTimeMeta", "cleanedMeta"
+      "cleanedStringMeta", "cleanedDateTimeMeta", "cleanedMeta",
+      "dependents"
     ]
   };
 
@@ -1030,6 +1031,10 @@
       }
     });
     self.directoryUuid = ko.observable(typeof notebook.directoryUuid != "undefined" && notebook.directoryUuid != null ? notebook.directoryUuid : null);
+    self.dependents = ko.mapping.fromJS(typeof notebook.dependents != "undefined" && notebook.dependents != null ? notebook.dependents : []);
+    self.dependentsWorkflows = ko.computed(function() {
+      return $.grep(self.dependents(), function(doc) { return doc.type() == 'oozie-workflow2' ;})
+    });
 
     self.loadingHistory = ko.observable(true);
     self.history = ko.observableArray(typeof notebook.fetchedHistory != "undefined" && notebook.fetchedHistory != null ? notebook.fetchedHistory : []);
@@ -1588,8 +1593,10 @@
     self.openNotebook = function (uuid) {
       $.get('/desktop/api2/doc/', {
         uuid: uuid,
-        data: true
+        data: true,
+        dependencies: true
       }, function (data) {
+    	data.data.dependents = data.dependents
         var notebook = data.data;
         notebook.fetchedHistory = self.selectedNotebook().history();
         self.loadNotebook(notebook);

+ 16 - 3
desktop/libs/notebook/src/notebook/templates/editor_components.mako

@@ -205,9 +205,22 @@ ${ hueIcons.symbols() }
         </a>
 
         % if mode == 'editor':
-        <a class="btn pointer" title="${ _('Schedule') }" rel="tooltip" data-placement="bottom" data-bind="click: function() { $root.selectedNotebook().schedule() }, css: {'disabled': ! $root.selectedNotebook() || ! $root.selectedNotebook().id() }">
-          <i class="fa fa-fw fa-calendar"></i>
-        </a>
+        <div class="btn-group">
+          <a class="btn" title="${ _('Schedule') }" rel="tooltip" data-placement="bottom" data-bind="click: function() { $root.selectedNotebook().schedule() }, css: {'disabled': ! $root.selectedNotebook() || ! $root.selectedNotebook().id() }">
+            <i class="fa fa-fw fa-calendar"></i>
+          </a>
+
+           <!-- ko if: $root.selectedNotebook() && $root.selectedNotebook().dependentsWorkflows().length > 0 -->
+            <a class="btn dropdown-toggle" data-toggle="dropdown" href="#"><span class="caret"></span></a>
+            <ul class="dropdown-menu" data-bind="foreach: $root.selectedNotebook().dependentsWorkflows">
+              <li>
+                <a class="pointer" data-bind="attr: { 'href': absoluteUrl }">
+                  <img src="${ static('oozie/art/icon_oozie_workflow_48.png') }" class="app-icon"/> <span data-bind="text: name"></span>
+                </a>
+              </li>
+            </ul>
+            <!-- /ko -->
+          </div>
         % endif
 
         % if mode != 'editor':