You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by at...@apache.org on 2014/09/19 15:02:21 UTC

git commit: AMBARI-7405 Slider View: Error when creating new app not shown to user. (atkach)

Repository: ambari
Updated Branches:
  refs/heads/trunk 05f0b402f -> 0f7dee0b4


AMBARI-7405 Slider View: Error when creating new app not shown to user. (atkach)


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

Branch: refs/heads/trunk
Commit: 0f7dee0b4582e277604ab8866dcc9711f3b8643a
Parents: 05f0b40
Author: atkach <at...@hortonworks.com>
Authored: Fri Sep 19 15:59:18 2014 +0300
Committer: atkach <at...@hortonworks.com>
Committed: Fri Sep 19 15:59:18 2014 +0300

----------------------------------------------------------------------
 .../createAppWizard/step4_controller.js         | 10 +--
 .../ui/app/controllers/slider_app_controller.js |  2 +-
 .../src/main/resources/ui/app/helpers/ajax.js   | 14 +++-
 .../ui/app/mixins/ajax_error_handler.js         | 84 ++++++++++++++++++++
 .../resources/ui/app/styles/application.less    |  6 ++
 .../ui/app/templates/common/ajax_error.hbs      | 24 ++++++
 .../src/main/resources/ui/app/translations.js   |  9 ++-
 7 files changed, 137 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/0f7dee0b/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step4_controller.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step4_controller.js b/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step4_controller.js
index e703c27..6454938 100644
--- a/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step4_controller.js
+++ b/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step4_controller.js
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-App.CreateAppWizardStep4Controller = Ember.ObjectController.extend({
+App.CreateAppWizardStep4Controller = Ember.ObjectController.extend(App.AjaxErrorHandler, {
 
   needs: "createAppWizard",
 
@@ -95,15 +95,15 @@ App.CreateAppWizardStep4Controller = Ember.ObjectController.extend({
           typeConfigs: app.get('configs')
         }
       },
-      complete: 'sendAppDataToServerCompleteCallback'
+      success: 'sendAppDataToServerSuccessCallback'
     });
   },
 
   /**
-   * Complete-callback for "create new app"-request
-   * @method sendAppDataToServerCompleteCallback
+   * Success-callback for "create new app"-request
+   * @method sendAppDataToServerSuccessCallback
    */
-  sendAppDataToServerCompleteCallback: function() {
+  sendAppDataToServerSuccessCallback: function() {
     this.get('appWizardController').hidePopup();
   },
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/0f7dee0b/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app_controller.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app_controller.js b/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app_controller.js
index d1bfccf..b2effa0 100644
--- a/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app_controller.js
+++ b/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app_controller.js
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-App.SliderAppController = Ember.ObjectController.extend({
+App.SliderAppController = Ember.ObjectController.extend(App.AjaxErrorHandler, {
 
   /**
    * List of Slider App tabs

http://git-wip-us.apache.org/repos/asf/ambari/blob/0f7dee0b/contrib/views/slider/src/main/resources/ui/app/helpers/ajax.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/helpers/ajax.js b/contrib/views/slider/src/main/resources/ui/app/helpers/ajax.js
index ba7fbce..ea01d82 100644
--- a/contrib/views/slider/src/main/resources/ui/app/helpers/ajax.js
+++ b/contrib/views/slider/src/main/resources/ui/app/helpers/ajax.js
@@ -132,7 +132,8 @@ var urls = {
     format: function (data) {
       return {
         type: 'POST',
-        data: JSON.stringify(data.data)
+        data: JSON.stringify(data.data),
+        showErrorPopup: true
       }
     }
   },
@@ -142,7 +143,8 @@ var urls = {
     mock: '',
     format: function () {
       return {
-        method: 'DELETE'
+        method: 'DELETE',
+        showErrorPopup: true
       }
     }
   },
@@ -156,7 +158,8 @@ var urls = {
     format: function (data) {
       return {
         method: 'PUT',
-        data: JSON.stringify(data.data)
+        data: JSON.stringify(data.data),
+        showErrorPopup: true
       }
     }
   },
@@ -169,7 +172,8 @@ var urls = {
     format: function (data) {
       return {
         method: 'PUT',
-        data: JSON.stringify(data.data)
+        data: JSON.stringify(data.data),
+        showErrorPopup: true
       }
     }
   },
@@ -320,6 +324,8 @@ var ajax = Em.Object.extend({
     opt.error = function (request, ajaxOptions, error) {
       if (config.error) {
         config.sender[config.error](request, ajaxOptions, error, opt, params);
+      } else {
+        config.sender.defaultErrorHandler.call(config.sender, request, opt.url, opt.type, opt.showErrorPopup);
       }
     };
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/0f7dee0b/contrib/views/slider/src/main/resources/ui/app/mixins/ajax_error_handler.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/mixins/ajax_error_handler.js b/contrib/views/slider/src/main/resources/ui/app/mixins/ajax_error_handler.js
new file mode 100644
index 0000000..8eecb02
--- /dev/null
+++ b/contrib/views/slider/src/main/resources/ui/app/mixins/ajax_error_handler.js
@@ -0,0 +1,84 @@
+/**
+ * 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.
+ */
+
+/**
+ * Attach default error handler on error of Ajax calls
+ * To correct work should be mixed with Controller or View instance
+ * Example:
+ *  <code>
+ *    var obj = Ember.Controller.extend(App.AjaxErrorHandler, {
+ *      callToServer: function() {
+ *        App.ajax.send(config);
+ *      }
+ *    });
+ *    if ajax config doesn't have error handler then the default hanlder will be established
+ *  </code>
+ * @type {Ember.Mixin}
+ */
+App.AjaxErrorHandler = Ember.Mixin.create({
+  /**
+   * flag to indicate whether popup with ajax already opened to avoid popup overlaying
+   */
+  errorPopupShown: false,
+  /**
+   * defaultErrorHandler function is referred from App.ajax.send function
+   * @jqXHR {jqXHR Object}
+   * @url {string}
+   * @method {String} Http method
+   * @showErrorPopup {boolean}
+   */
+  defaultErrorHandler: function (jqXHR, url, method, showErrorPopup) {
+    method = method || 'GET';
+    var context = this.get('isController') ? this : (this.get('isView') && this.get('controller'));
+    try {
+      var json = $.parseJSON(jqXHR.responseText);
+      var message = json.message;
+    } catch (err) {
+    }
+
+    if (!context) {
+      console.warn('WARN: App.AjaxErrorHandler should be used only for views and controllers');
+      return;
+    }
+    if (showErrorPopup && !this.get('errorPopupShown')) {
+      Bootstrap.ModalManager.open(
+        "ajax-error-modal",
+        Em.I18n.t('common.error'),
+        Ember.View.extend({
+          classNames: ['api-error'],
+          templateName: 'common/ajax_error',
+          api: Em.I18n.t('ajax.apiInfo').format(method, url),
+          statusCode: Em.I18n.t('ajax.statusCode').format(jqXHR.status),
+          message: message,
+          showMessage: !!message
+        }),
+        [
+          Ember.Object.create({title: Em.I18n.t('ok'), clicked: "errorPopupClose", dismiss: 'modal'})
+        ],
+        context
+      );
+      this.set('errorPopupShown', true);
+    }
+  },
+  actions: {
+
+    errorPopupClose: function () {
+      this.set('errorPopupShown', false);
+    }
+  }
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/0f7dee0b/contrib/views/slider/src/main/resources/ui/app/styles/application.less
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/styles/application.less b/contrib/views/slider/src/main/resources/ui/app/styles/application.less
index 7497b6e..f8bded3 100644
--- a/contrib/views/slider/src/main/resources/ui/app/styles/application.less
+++ b/contrib/views/slider/src/main/resources/ui/app/styles/application.less
@@ -877,3 +877,9 @@ a {
     filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f7f7f7', endColorstr='#ffffff',GradientType=1 );
   }
 }
+
+.api-error {
+  max-height: 403px;
+  word-wrap: break-word;
+  overflow: auto;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/0f7dee0b/contrib/views/slider/src/main/resources/ui/app/templates/common/ajax_error.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/common/ajax_error.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/common/ajax_error.hbs
new file mode 100644
index 0000000..dd2b6f1
--- /dev/null
+++ b/contrib/views/slider/src/main/resources/ui/app/templates/common/ajax_error.hbs
@@ -0,0 +1,24 @@
+{{!
+* 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.
+}}
+
+<span class="text-danger">{{view.statusCode}}</span> <span>&nbsp;{{view.api}}</span>
+{{#if view.showMessage}}
+    <br />
+    <br />
+    <pre><strong>{{t ajax.errorMessage}}: </strong><span class="text-danger">{{view.message}}</span></pre>
+{{/if}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/0f7dee0b/contrib/views/slider/src/main/resources/ui/app/translations.js
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/resources/ui/app/translations.js b/contrib/views/slider/src/main/resources/ui/app/translations.js
index 4336ddc..b3bfa14 100644
--- a/contrib/views/slider/src/main/resources/ui/app/translations.js
+++ b/contrib/views/slider/src/main/resources/ui/app/translations.js
@@ -50,7 +50,8 @@ Em.I18n.translations = {
     'alerts': 'Alerts',
     'key': 'Key',
     'remove': 'Remove',
-    'send': 'Send'
+    'send': 'Send',
+    'error': 'Error'
   },
 
   'error.config_is_empty': 'Config <strong>{0}</strong> should not be empty',
@@ -113,5 +114,9 @@ Em.I18n.translations = {
   'wizard.step3.error': 'Only \"key\":\"value\" format allowed.',
   'wizard.step4.name': 'Deploy',
   'wizard.step4.appName': 'App Name',
-  'wizard.step4.appType': 'App Type'
+  'wizard.step4.appType': 'App Type',
+
+  'ajax.errorMessage': 'Error message',
+  'ajax.apiInfo': 'received on {0} method for API: {1}',
+  'ajax.statusCode': '{0} status code'
 };