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

[oozie] Integrate document sharing in workflow editor

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

+ 47 - 27
apps/oozie/src/oozie/templates/editor/workflow_editor.mako

@@ -14,7 +14,7 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 <%!
-from desktop.views import commonheader, commonfooter
+from desktop.views import commonheader, commonfooter, commonshare
 from django.utils.translation import ugettext as _
 %>
 
@@ -32,6 +32,8 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user, "40px") | n,unicode }
 </script>
 
 
+<div id="editor">
+
 <%dashboard:layout_toolbar>
   <%def name="skipLayout()"></%def>
   <%def name="widgetSectionName()">${ _('ACTIONS') }</%def>
@@ -137,6 +139,7 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user, "40px") | n,unicode }
 </%dashboard:layout_toolbar>
 
 
+
 <div class="search-bar">
   <div class="pull-right" style="padding-right:50px">
     [
@@ -150,38 +153,50 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user, "40px") | n,unicode }
       <i class="fa fa-fw fa-long-arrow-down"></i>
     </a>
     ]
+
     &nbsp;&nbsp;&nbsp;
+    
     <a title="${ _('Submit') }" rel="tooltip" data-placement="bottom" data-bind="click: showSubmitPopup, css: {'btn': true}">
       <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}">
       <i class="fa fa-fw fa-pencil"></i>
     </a>
+
     &nbsp;&nbsp;&nbsp;
-    % if user.is_superuser:
-      <button type="button" title="${ _('Settings') }" rel="tooltip" data-placement="bottom" data-toggle="modal" data-target="#settingsModal" data-bind="css: {'btn': true}">
-        <i class="fa fa-fw fa-cog"></i>
-      </button>
-      <a title="${ _('Workspace') }" target="_blank" rel="tooltip" data-placement="right"
-          data-original-title="${ _('Go upload additional files and libraries to the deployment directory on HDFS') }"
-          data-bind="css: {'btn': true}, attr: {href: '/filebrowser/view' + $root.workflow.properties.deployment_dir() }">
-        <i class="fa fa-fw fa-folder-open"></i>
-      </a>
-      <a title="${ _('Share') }" rel="tooltip" data-placement="bottom" data-bind="css: {'btn': true}">
-        <i class="fa fa-fw fa-users"></i>
-      </a>
-      &nbsp;&nbsp;&nbsp;
-      <button type="button" title="${ _('Save') }" rel="tooltip" data-placement="bottom" data-loading-text="${ _("Saving...") }" data-bind="click: $root.save, css: {'btn': true}">
-        <i class="fa fa-fw fa-save"></i>
-      </button>
-      &nbsp;&nbsp;&nbsp;
-      <a class="btn" href="${ url('oozie:new_workflow') }" title="${ _('New') }" rel="tooltip" data-placement="bottom" data-bind="css: {'btn': true}">
-        <i class="fa fa-fw fa-file-o"></i>
-      </a>
-      <a class="btn" href="${ url('oozie:list_editor_workflows') }" title="${ _('Workflows') }" rel="tooltip" data-placement="bottom" data-bind="css: {'btn': true}">
-        <i class="fa fa-fw fa-tags"></i>
-      </a>
-    % endif
+    
+    <button type="button" title="${ _('Settings') }" rel="tooltip" data-placement="bottom" data-toggle="modal" data-target="#settingsModal" data-bind="css: {'btn': true}">
+      <i class="fa fa-fw fa-cog"></i>
+    </button>
+    
+    <a title="${ _('Workspace') }" target="_blank" rel="tooltip" data-placement="right"
+        data-original-title="${ _('Go upload additional files and libraries to the deployment directory on HDFS') }"
+        data-bind="css: {'btn': true}, attr: {href: '/filebrowser/view' + $root.workflow.properties.deployment_dir() }">
+      <i class="fa fa-fw fa-folder-open"></i>
+    </a>
+
+    &nbsp;&nbsp;&nbsp;
+
+    <button type="button" title="${ _('Save') }" rel="tooltip" data-placement="bottom" data-loading-text="${ _("Saving...") }" data-bind="click: $root.save, css: {'btn': true}">
+      <i class="fa fa-fw fa-save"></i>
+    </button>
+
+    <a class="share-link btn" rel="tooltip" data-placement="bottom" data-bind="click: openShareModal,
+        attr: {'data-original-title': '${ _("Share") } ' + name},
+        css: {'isShared': isShared(), 'btn': true},
+        visible: workflow.id() != null">
+      <i class="fa fa-users"></i>
+    </a>
+
+    &nbsp;&nbsp;&nbsp;
+
+    <a class="btn" href="${ url('oozie:new_workflow') }" title="${ _('New') }" rel="tooltip" data-placement="bottom" data-bind="css: {'btn': true}">
+      <i class="fa fa-fw fa-file-o"></i>
+    </a>
+
+    <a class="btn" href="${ url('oozie:list_editor_workflows') }" title="${ _('Workflows') }" rel="tooltip" data-placement="bottom" data-bind="css: {'btn': true}">
+      <i class="fa fa-fw fa-tags"></i>
+    </a>
   </div>
 
   <form class="form-search">
@@ -215,6 +230,7 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user, "40px") | n,unicode }
   </div>
 </div>
 
+</div>
 
 <script type="text/html" id="column-template">
   <div data-bind="css: klass()" style="min-height: 50px !important;">
@@ -324,7 +340,6 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user, "40px") | n,unicode }
         &nbsp;
       </span>
 
-
       <!-- ko if: widgetType() == 'hive-widget' -->
       <img src="/oozie/static/art/icon_beeswax_48.png" class="widget-icon">
       <!-- /ko -->
@@ -1553,11 +1568,13 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user, "40px") | n,unicode }
 
 ${ dashboard.import_layout() }
 
+${ commonshare() | n,unicode }
 
 <script src="/static/ext/js/bootstrap-editable.min.js" type="text/javascript" charset="utf-8"></script>
 <script src="/static/js/hue.utils.js"></script>
 <script src="/static/js/ko.editable.js" type="text/javascript" charset="utf-8"></script>
 <script src="/static/ext/chosen/chosen.jquery.min.js" type="text/javascript" charset="utf-8"></script>
+<script src="/static/js/share.vm.js"></script>
 
 ${ dashboard.import_bindings() }
 
@@ -1569,7 +1586,10 @@ ${ dashboard.import_bindings() }
   ${ utils.slaGlobal() }
 
   var viewModel = new WorkflowEditorViewModel(${ layout_json | n,unicode }, ${ workflow_json | n,unicode }, ${ credentials_json | n,unicode }, ${ workflow_properties_json | n,unicode });
-  ko.applyBindings(viewModel);
+  ko.applyBindings(viewModel, $("#editor")[0]);
+
+  var shareViewModel = setupSharing("#documentShareModal");
+  shareViewModel.setDocId(${ doc1_id });
 
   viewModel.init();
   fullLayout(viewModel);

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

@@ -55,8 +55,10 @@ def edit_workflow(request):
   workflow_id = request.GET.get('workflow')
   
   if workflow_id:
-    workflow = Workflow(document=Document2.objects.get(type='oozie-workflow2', id=workflow_id)) # Todo perms
+    doc = Document2.objects.get(type='oozie-workflow2', id=workflow_id)
+    workflow = Workflow(document=doc) # Todo perms
   else:
+    doc = None
     workflow = Workflow()
     workflow.set_workspace(request.user)
     workflow.check_workspace(request.fs, request.user)
@@ -76,6 +78,7 @@ def edit_workflow(request):
       'workflow_json': json.dumps(workflow_data['workflow']),
       'credentials_json': json.dumps(credentials.credentials.keys()),
       'workflow_properties_json': json.dumps(WORKFLOW_NODE_PROPERTIES),
+      'doc1_id': doc.doc.get().id if doc else -1
   })
 
 
@@ -110,6 +113,7 @@ def save_workflow(request):
   
   response['status'] = 0
   response['id'] = workflow_doc.id
+  response['doc1_id'] = workflow_doc.doc.get().id
   response['message'] = _('Page saved !')
 
   return HttpResponse(json.dumps(response), mimetype="application/json")

+ 4 - 3
apps/oozie/static/js/workflow-editor.ko.js

@@ -228,7 +228,6 @@ var Workflow = function (vm, workflow) {
   };
 
   self.addNode = function (widget) {
-    // Todo get parent cell, link nodes... when we have the new layout
     $.post("/oozie/editor/workflow/add_node/", {
       "workflow": ko.mapping.toJSON(workflow),
       "node": ko.mapping.toJSON(widget),
@@ -248,8 +247,8 @@ var Workflow = function (vm, workflow) {
 
         self.nodes.push(node);
 
+        // If added to the side
         if (vm.currentlyCreatingFork) {
-          // Added to the side ?
           var parentWidget = vm.getWidgetPredecessor(node.id());
           var parent = self.getNodeById(parentWidget.id());
 
@@ -413,7 +412,6 @@ var Workflow = function (vm, workflow) {
 }
 
 var WorkflowEditorViewModel = function (layout_json, workflow_json, credentials_json, workflow_properties_json) {
-
   var self = this;
 
   self.isNested = ko.observable(true);
@@ -960,6 +958,9 @@ var WorkflowEditorViewModel = function (layout_json, workflow_json, credentials_
       "workflow": ko.mapping.toJSON(self.workflow)
     }, function (data) {
       if (data.status == 0) {
+    	if (self.workflow.id() == null) {
+    	  shareViewModel.setDocId(data.doc1_id);
+    	}
         self.workflow.id(data.id);
         $(document).trigger("info", data.message);
         if (window.location.search.indexOf("workflow") == -1) {