AMBARI-19742. User preference like opened tabs/work in-progress should not be 
available to a different user. (Venkata Sairam via gauravn7)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/fb951387
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/fb951387
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/fb951387

Branch: refs/heads/branch-dev-patch-upgrade
Commit: fb951387706387651f3b31d34f4c16c9b4c9ec4a
Parents: cc30798
Author: Gaurav Nagar <grv...@gmail.com>
Authored: Fri Jan 27 19:26:33 2017 +0530
Committer: Gaurav Nagar <grv...@gmail.com>
Committed: Fri Jan 27 19:29:25 2017 +0530

----------------------------------------------------------------------
 .../ui/app/components/bundle-config.js          | 27 ++++++---
 .../resources/ui/app/components/coord-config.js | 64 +++++++++++---------
 .../ui/app/components/designer-workspace.js     | 25 ++++----
 .../ui/app/components/flow-designer.js          | 12 ++--
 .../main/resources/ui/app/services/user-info.js | 56 +++++++++++++++++
 .../ui/app/services/workspace-manager.js        | 61 ++++++++++++++-----
 .../ui/tests/unit/services/user-info-test.js    | 29 +++++++++
 7 files changed, 207 insertions(+), 67 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/fb951387/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-config.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-config.js 
b/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-config.js
index e29935c..8b4c3d8 100644
--- 
a/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-config.js
+++ 
b/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-config.js
@@ -48,23 +48,19 @@ export default Ember.Component.extend(Ember.Evented, 
Validations, {
   fileBrowser : Ember.inject.service('file-browser'),
   workspaceManager : Ember.inject.service('workspace-manager'),
   initialize : function(){
-    var draftBundle = 
this.get('workspaceManager').restoreWorkInProgress(this.get('tabInfo.id'));
-    if(draftBundle){
-      this.set('bundle', JSON.parse(draftBundle));
-    }else{
-      this.set('bundle', this.createBundle());
-    }
+    var self = this;
+    
this.get('workspaceManager').restoreWorkInProgress(this.get('tabInfo.id')).promise.then(function(draftBundle){
+      self.loadBundle(draftBundle);
+    }.bind(this)).catch(function(data){
+      self.loadBundle();
+    }.bind(this));
     this.get('fileBrowser').on('fileBrowserOpened',function(context){
       this.get('fileBrowser').setContext(context);
     }.bind(this));
     this.on('fileSelected',function(fileName){
       this.set(this.get('filePathModel'), fileName);
     }.bind(this));
-    if(Ember.isBlank(this.get('bundle.name'))){
-      this.set('bundle.name', Ember.copy(this.get('tabInfo.name')));
-    }
     this.set('showErrorMessage', false);
-    this.schedulePersistWorkInProgress();
   }.on('init'),
   onDestroy : function(){
     Ember.run.cancel(this.schedulePersistWorkInProgress);
@@ -92,6 +88,17 @@ export default Ember.Component.extend(Ember.Evented, 
Validations, {
   bundleFilePath : Ember.computed('tabInfo.filePath', function(){
     return this.get('tabInfo.filePath');
   }),
+  loadBundle(draftBundle){
+    if(draftBundle){
+      this.set('bundle', JSON.parse(draftBundle));
+    }else{
+      this.set('bundle', this.createBundle());
+    }
+    if(Ember.isBlank(this.get('bundle.name'))){
+      this.set('bundle.name', Ember.copy(this.get('tabInfo.name')));
+    }
+    this.schedulePersistWorkInProgress();
+  }, 
   schedulePersistWorkInProgress (){
     Ember.run.later(function(){
       this.persistWorkInProgress();

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb951387/contrib/views/wfmanager/src/main/resources/ui/app/components/coord-config.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/wfmanager/src/main/resources/ui/app/components/coord-config.js 
b/contrib/views/wfmanager/src/main/resources/ui/app/components/coord-config.js
index fa664c7..57dbeb0 100644
--- 
a/contrib/views/wfmanager/src/main/resources/ui/app/components/coord-config.js
+++ 
b/contrib/views/wfmanager/src/main/resources/ui/app/components/coord-config.js
@@ -75,22 +75,13 @@ export default Ember.Component.extend(Validations, 
Ember.Evented, {
     this.persistWorkInProgress();
   }.on('willDestroyElement'),
   initialize : function(){
-    var draftCoordinator = 
this.get('workspaceManager').restoreWorkInProgress(this.get('tabInfo.id'));
-    if(draftCoordinator){
-      this.set('coordinator', JSON.parse(draftCoordinator));
-    }else{
-      this.set('coordinator', this.createNewCoordinator());
-    }
-    this.set('timeUnitOptions',Ember.A([]));
-    this.get('timeUnitOptions').pushObject({value:'',displayName:'Select'});
-    
this.get('timeUnitOptions').pushObject({value:'months',displayName:'Months'});
-    
this.get('timeUnitOptions').pushObject({value:'endOfMonths',displayName:'End of 
Months'});
-    this.get('timeUnitOptions').pushObject({value:'days',displayName:'Days'});
-    this.get('timeUnitOptions').pushObject({value:'endOfDays',displayName:'End 
of Days'});
-    
this.get('timeUnitOptions').pushObject({value:'hours',displayName:'Hours'});
-    
this.get('timeUnitOptions').pushObject({value:'minutes',displayName:'Minutes'});
-    this.get('timeUnitOptions').pushObject({value:'cron',displayName:'Cron'});
-    this.set('coordinator.slaInfo', SlaInfo.create({}));
+    var self = this;
+
+    
this.get('workspaceManager').restoreWorkInProgress(this.get('tabInfo.id')).promise.then(function(draftCoordinator){
+      self.loadCoordinator(draftCoordinator);
+    }.bind(this)).catch(function(data){
+      self.loadCoordinator();
+    }.bind(this));
 
     this.get('fileBrowser').on('fileBrowserOpened',function(context){
       this.get('fileBrowser').setContext(context);
@@ -98,18 +89,7 @@ export default Ember.Component.extend(Validations, 
Ember.Evented, {
     this.on('fileSelected',function(fileName){
       this.set(this.get('filePathModel'), fileName);
     }.bind(this));
-    this.set('coordinatorControls',[
-      {'name':'timeout', 'displayName':'Timeout', 'value':''},
-      {'name':'concurrency', 'displayName':'Concurrency', 'value':''},
-      {'name':'execution', 'displayName':'Execution', 'value':''},
-      {'name':'throttle', 'displayName':'Throttle', 'value':''}
-    ]);
-    this.set('timezoneList', Ember.copy(Constants.timezoneList));
-    if(Ember.isBlank(this.get('coordinator.name'))){
-      this.set('coordinator.name', Ember.copy(this.get('tabInfo.name')));
-    }
-    this.schedulePersistWorkInProgress();
-    this.set('childComponents', new Map());
+
   }.on('init'),
   conditionalDataInExists :false,
   elementsInserted : function(){
@@ -141,6 +121,34 @@ export default Ember.Component.extend(Validations, 
Ember.Evented, {
       this.sendAction('changeTabName', this.get('tabInfo'), 
this.get('coordinator.name'));
     }
   }),
+  loadCoordinator(draftCoordinator){
+    if(draftCoordinator){
+      this.set('coordinator', JSON.parse(draftCoordinator));
+    }else{
+      this.set('coordinator', this.createNewCoordinator());
+    }
+    this.set('timeUnitOptions',Ember.A([]));
+    this.get('timeUnitOptions').pushObject({value:'',displayName:'Select'});
+    
this.get('timeUnitOptions').pushObject({value:'months',displayName:'Months'});
+    
this.get('timeUnitOptions').pushObject({value:'endOfMonths',displayName:'End of 
Months'});
+    this.get('timeUnitOptions').pushObject({value:'days',displayName:'Days'});
+    this.get('timeUnitOptions').pushObject({value:'endOfDays',displayName:'End 
of Days'});
+    
this.get('timeUnitOptions').pushObject({value:'hours',displayName:'Hours'});
+    
this.get('timeUnitOptions').pushObject({value:'minutes',displayName:'Minutes'});
+    this.get('timeUnitOptions').pushObject({value:'cron',displayName:'Cron'});
+    this.set('coordinator.slaInfo', SlaInfo.create({}));
+    this.set('coordinatorControls',[
+      {'name':'timeout', 'displayName':'Timeout', 'value':''},
+      {'name':'concurrency', 'displayName':'Concurrency', 'value':''},
+      {'name':'execution', 'displayName':'Execution', 'value':''},
+      {'name':'throttle', 'displayName':'Throttle', 'value':''}
+    ]);
+    this.set('timezoneList', Ember.copy(Constants.timezoneList));
+    if(Ember.isBlank(this.get('coordinator.name'))){
+      this.set('coordinator.name', Ember.copy(this.get('tabInfo.name')));
+    }
+    this.schedulePersistWorkInProgress();    
+  },
   coordinatorFilePath : Ember.computed('tabInfo.filePath', function(){
     return this.get('tabInfo.filePath');
   }),

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb951387/contrib/views/wfmanager/src/main/resources/ui/app/components/designer-workspace.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/wfmanager/src/main/resources/ui/app/components/designer-workspace.js
 
b/contrib/views/wfmanager/src/main/resources/ui/app/components/designer-workspace.js
index 53fd27d..5b517af 100644
--- 
a/contrib/views/wfmanager/src/main/resources/ui/app/components/designer-workspace.js
+++ 
b/contrib/views/wfmanager/src/main/resources/ui/app/components/designer-workspace.js
@@ -19,6 +19,7 @@ import CommonUtils from "../utils/common-utils";
 import Constants from '../utils/constants';
 export default Ember.Component.extend({
   workspaceManager : Ember.inject.service('workspace-manager'),
+  userInfo : Ember.inject.service('user-info'),
   xmlAppPath : null,
   appPath : null,
   type : 'wf',
@@ -42,18 +43,20 @@ export default Ember.Component.extend({
     this.get('tabCounter').set('wf', 0);
     this.get('tabCounter').set('coord', 0);
     this.get('tabCounter').set('bundle', 0);
-    var tabs = this.get('workspaceManager').restoreTabs();
-    if(tabs){
-      this.set('tabs', tabs);
-    }
-    this.get('tabs').forEach((tab)=>{
-      this.get('tabCounter').set(tab.type, 
(this.get('tabCounter').get(tab.type)) + 1);
-    }, this);
-
-    Ember.getOwner(this).lookup('route:design').on('openNewTab', 
function(path){
-      this.createNewTab('wf', path);
-    }.bind(this));
+    var tabsData = this.get('workspaceManager').restoreTabs();
+    tabsData.promise.then(function(tabs){
+        if(tabs){
+          this.set('tabs', tabs);
+        }
+        this.get('tabs').forEach((tab)=>{
+          this.get('tabCounter').set(tab.type, 
(this.get('tabCounter').get(tab.type)) + 1);
+        }, this);
+        Ember.getOwner(this).lookup('route:design').on('openNewTab', 
function(path){
+          this.createNewTab('wf', path);
+        }.bind(this));
 
+      }.bind(this)).catch(function(data){
+      });
   }.on('init'),
   elementsInserted : function(){
     this.$('.nav-tabs a[data-toggle="tab"]').on('shown.bs.tab', function (e) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb951387/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js 
b/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
index 0a0d2f2..1292832 100644
--- 
a/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
+++ 
b/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
@@ -586,10 +586,14 @@ export default Ember.Component.extend(FindNodeMixin, 
Validations, {
   },
   getDraftWorkflow(){
     var deferred = Ember.RSVP.defer();
-    var drafWorkflowJson = 
this.get('workspaceManager').restoreWorkInProgress(this.get('tabInfo.id'));
-    var workflowImporter=WorkflowJsonImporter.create({});
-    var workflow=workflowImporter.importWorkflow(drafWorkflowJson);
-    deferred.resolve(workflow);
+
+    
this.get('workspaceManager').restoreWorkInProgress(this.get('tabInfo.id')).promise.then(function(drafWorkflowJson){
+          var workflowImporter=WorkflowJsonImporter.create({});
+          var workflow=workflowImporter.importWorkflow(drafWorkflowJson);
+          deferred.resolve(workflow);
+        }.bind(this)).catch(function(data){
+          deferred.resolve("");
+        });
     return deferred;
   },
   createSnapshot() {

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb951387/contrib/views/wfmanager/src/main/resources/ui/app/services/user-info.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/wfmanager/src/main/resources/ui/app/services/user-info.js 
b/contrib/views/wfmanager/src/main/resources/ui/app/services/user-info.js
new file mode 100644
index 0000000..7c59f40
--- /dev/null
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/services/user-info.js
@@ -0,0 +1,56 @@
+/*
+*    Licensed to the Apache Software Foundation (ASF) under one or more
+*    contributor license agreements.  See the NOTICE file distributed with
+*    this work for additional information regarding copyright ownership.
+*    The ASF licenses this file to You under the Apache License, Version 2.0
+*    (the "License"); you may not use this file except in compliance with
+*    the License.  You may obtain a copy of the License at
+*
+*        http://www.apache.org/licenses/LICENSE-2.0
+*
+*    Unless required by applicable law or agreed to in writing, software
+*    distributed under the License is distributed on an "AS IS" BASIS,
+*    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+*    See the License for the specific language governing permissions and
+*    limitations under the License.
+*/
+
+import Ember from 'ember';
+
+export default Ember.Service.extend({
+  data:null,
+  userName: null,
+  init() {
+  },
+  getUserData(){
+    var url = Ember.ENV.API_URL + "/getCurrentUserName", self = this;
+    var deferred = Ember.RSVP.defer();
+    if(self.get("userName") !== null && self.get("userName") !== undefined){
+      deferred.resolve(self.get("userName"));
+    } else{
+      Ember.$.ajax({
+        url: url,
+        method: 'GET',
+        dataType: "text",
+        beforeSend: function (xhr) {
+          xhr.setRequestHeader("X-XSRF-HEADER", 
Math.round(Math.random()*100000));
+          xhr.setRequestHeader("X-Requested-By", "Ambari");
+        }
+      }).done(function(data){
+        self.set("userName", data);
+        deferred.resolve(data);
+      }).fail(function(data){
+        self.set("userName", "");
+        deferred.reject(data);
+      });
+    }
+    return deferred;
+  },
+  setUserData(data){
+    this.set("data", data);
+  },
+  getUserName(){
+    var res = this.getUserData();
+    return res;
+  }
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb951387/contrib/views/wfmanager/src/main/resources/ui/app/services/workspace-manager.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/wfmanager/src/main/resources/ui/app/services/workspace-manager.js
 
b/contrib/views/wfmanager/src/main/resources/ui/app/services/workspace-manager.js
index 24ab53c..c377ecc 100644
--- 
a/contrib/views/wfmanager/src/main/resources/ui/app/services/workspace-manager.js
+++ 
b/contrib/views/wfmanager/src/main/resources/ui/app/services/workspace-manager.js
@@ -20,18 +20,36 @@ import Ember from 'ember';
 export default Ember.Service.extend({
   tabsInfo : {},
   workInProgress : {},
+  userInfo : Ember.inject.service('user-info'),
   setLastActiveTab(tabId){
-    console.log("setting last active tabId "+tabId);
-    localStorage.setItem('lastActiveTab', tabId);
+    this.get("userInfo").getUserData().promise.then(function(data){
+       localStorage.setItem(data+"-lastActiveTab", tabId);
+      }.bind(this)).catch(function(e){
+        console.error(e);
+      });
   },
   getLastActiveTab(){
-    console.log("get last active "+localStorage.getItem('lastActiveTab'));
-    return localStorage.getItem('lastActiveTab');
+      this.get("userInfo").getUserData().promise.then(function(data){
+        return localStorage.getItem(data+"-lastActiveTab");
+      }.bind(this)).catch(function(e){
+        console.error(e);
+      });
   },
   restoreTabs(){
-    var tabs = localStorage.getItem('tabsInfo');
-    console.log("Restoring tabs "+tabs);
-    return JSON.parse(tabs);
+      var deferred = Ember.RSVP.defer();
+
+      this.get("userInfo").getUserData().promise.then(function(data){
+        var tabs = localStorage.getItem(data+'-tabsInfo');
+        console.log("Restoring tabs "+tabs);
+        deferred.resolve(JSON.parse(tabs));
+
+        //return JSON.parse(tabs);
+
+      }.bind(this)).catch(function(e){
+        deferred.resolve("");
+        console.error(e);
+      });
+    return deferred;
   },
   saveTabs(tabs){
     if(!tabs){
@@ -46,18 +64,33 @@ export default Ember.Service.extend({
         filePath : tab.filePath
       });
     });
-    console.log("Saving tabs "+JSON.stringify(tabArray));
-    localStorage.setItem('tabsInfo', JSON.stringify(tabArray));
+    this.get("userInfo").getUserData().promise.then(function(data){
+          localStorage.setItem(data+'-tabsInfo', JSON.stringify(tabArray));
+    }.bind(this)).catch(function(e){
+      console.error(e);
+    });
   },
   restoreWorkInProgress(id){
-    console.log("Restoring workInProgress "+id);
-    return localStorage.getItem(id);
+    var deferred = Ember.RSVP.defer();
+    this.get("userInfo").getUserData().promise.then(function(data){
+       deferred.resolve(localStorage.getItem(data+"-"+id));
+    }.bind(this)).catch(function(data){
+       deferred.resolve("");
+    });
+    return deferred;
   },
   saveWorkInProgress(id, workInProgress){
-    console.log("Restoring workInProgress "+id);
-    localStorage.setItem(id, workInProgress);
+    this.get("userInfo").getUserData().promise.then(function(data){
+      localStorage.setItem(data+"-"+id, workInProgress);
+    }.bind(this)).catch(function(e){
+      console.error(e);
+    });    
   },
   deleteWorkInProgress(id){
-    localStorage.removeItem(id);
+    this.get("userInfo").getUserData().promise.then(function(data){
+      localStorage.removeItem(data+"-"+id);
+    }.bind(this)).catch(function(e){
+      console.error(e);
+    });
   }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb951387/contrib/views/wfmanager/src/main/resources/ui/tests/unit/services/user-info-test.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/wfmanager/src/main/resources/ui/tests/unit/services/user-info-test.js
 
b/contrib/views/wfmanager/src/main/resources/ui/tests/unit/services/user-info-test.js
new file mode 100644
index 0000000..b8acb3e
--- /dev/null
+++ 
b/contrib/views/wfmanager/src/main/resources/ui/tests/unit/services/user-info-test.js
@@ -0,0 +1,29 @@
+/*
+*    Licensed to the Apache Software Foundation (ASF) under one or more
+*    contributor license agreements.  See the NOTICE file distributed with
+*    this work for additional information regarding copyright ownership.
+*    The ASF licenses this file to You under the Apache License, Version 2.0
+*    (the "License"); you may not use this file except in compliance with
+*    the License.  You may obtain a copy of the License at
+*
+*        http://www.apache.org/licenses/LICENSE-2.0
+*
+*    Unless required by applicable law or agreed to in writing, software
+*    distributed under the License is distributed on an "AS IS" BASIS,
+*    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+*    See the License for the specific language governing permissions and
+*    limitations under the License.
+*/
+
+import { moduleFor, test } from 'ember-qunit';
+
+moduleFor('service:user-info', 'Unit | Service | user info', {
+  // Specify the other units that are required for this test.
+  // needs: ['service:foo']
+});
+
+// Replace this with your real tests.
+test('it exists', function(assert) {
+  let service = this.subject();
+  assert.ok(service);
+});

Reply via email to