Repository: ambari
Updated Branches:
  refs/heads/trunk 181f3ab4d -> 43abcf0d7


AMBARI-8830. Admin View: supported for property validation. (akovalenko)


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

Branch: refs/heads/trunk
Commit: 43abcf0d767eb4d2ef46847dd6d75e7a9270ebff
Parents: 181f3ab
Author: Aleksandr Kovalenko <[email protected]>
Authored: Fri Dec 19 22:05:34 2014 +0200
Committer: Aleksandr Kovalenko <[email protected]>
Committed: Sat Dec 20 00:26:47 2014 +0200

----------------------------------------------------------------------
 .../ambariViews/CreateViewInstanceCtrl.js       | 26 ++++++++++++++++----
 .../controllers/ambariViews/ViewsEditCtrl.js    | 17 ++++++++++++-
 .../admin-web/app/views/ambariViews/create.html |  9 ++++---
 .../admin-web/app/views/ambariViews/edit.html   |  5 +++-
 4 files changed, 47 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/43abcf0d/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/ambariViews/CreateViewInstanceCtrl.js
----------------------------------------------------------------------
diff --git 
a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/ambariViews/CreateViewInstanceCtrl.js
 
b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/ambariViews/CreateViewInstanceCtrl.js
index 29a8d83..2581228 100644
--- 
a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/ambariViews/CreateViewInstanceCtrl.js
+++ 
b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/ambariViews/CreateViewInstanceCtrl.js
@@ -72,9 +72,10 @@ angular.module('ambariAdminConsole')
   $scope.nameValidationPattern = /^\s*\w*\s*$/;
 
   $scope.save = function() {
-  if (!$scope.form.instanceCreateForm.submitted) {
+  if (!$scope.form.instanceCreateForm.isSaving) {
     $scope.form.instanceCreateForm.submitted = true;
     if($scope.form.instanceCreateForm.$valid){
+      $scope.form.instanceCreateForm.isSaving = true;
       View.createInstance($scope.instance)
         .then(function(data) {
           Alert.success('Created View Instance ' + 
$scope.instance.instance_name);
@@ -84,11 +85,26 @@ angular.module('ambariAdminConsole')
           } else {
             $location.path('/views/' + $scope.instance.view_name + 
'/versions/' + $scope.instance.version + '/instances/' + 
$scope.instance.instance_name + '/edit');
           }
-          $scope.form.instanceCreateForm.submitted = false;
+            $scope.form.instanceCreateForm.isSaving = false;
         })
-        .catch(function(data) {
-          Alert.error('Cannot create instance', data.message);
-         $scope.form.instanceCreateForm.submitted = false;
+        .catch(function (data) {
+          var errorMessage = data.message;
+          if (data.status === 500) {
+            try {
+              var errorObject = JSON.parse(errorMessage);
+              errorMessage = errorObject.detail;
+              angular.forEach(errorObject.propertyResults, function (item, 
key) {
+                $scope.form.instanceCreateForm[key].validationError = 
!item.valid;
+                if (!item.valid) {
+                  $scope.form.instanceCreateForm[key].validationMessage = 
item.detail;
+                }
+              });
+            } catch (e) {
+              console.error('Unable to parse error message:', data.message);
+            }
+          }
+          Alert.error('Cannot create instance', errorMessage);
+          $scope.form.instanceCreateForm.isSaving = false;
         });
       }
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/43abcf0d/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/ambariViews/ViewsEditCtrl.js
----------------------------------------------------------------------
diff --git 
a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/ambariViews/ViewsEditCtrl.js
 
b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/ambariViews/ViewsEditCtrl.js
index 12ef1d3..4609a30 100644
--- 
a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/ambariViews/ViewsEditCtrl.js
+++ 
b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/ambariViews/ViewsEditCtrl.js
@@ -140,7 +140,22 @@ angular.module('ambariAdminConsole')
         $scope.propertiesForm.$setPristine();
       })
       .catch(function(data) {
-        Alert.error('Cannot save properties', data.data.message);
+        var errorMessage = data.statusText;
+        if (data.status === 500) {
+          try {
+            var errorObject = JSON.parse(errorMessage);
+            errorMessage = errorObject.detail;
+            angular.forEach(errorObject.propertyResults, function (item, key) {
+              $scope.propertiesForm[key].validationError = !item.valid;
+              if (!item.valid) {
+                $scope.propertiesForm[key].validationMessage = item.detail;
+              }
+            });
+          } catch (e) {
+            console.error('Unable to parse error message:', data.message);
+          }
+        }
+        Alert.error('Cannot save properties', errorMessage);
       });
     }
   };

http://git-wip-us.apache.org/repos/asf/ambari/blob/43abcf0d/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/create.html
----------------------------------------------------------------------
diff --git 
a/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/create.html
 
b/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/create.html
index e57c358..eee6ff3 100644
--- 
a/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/create.html
+++ 
b/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/create.html
@@ -99,7 +99,7 @@
     </div>
     <div class="panel-body property-form">
       <div class="form-group" ng-repeat="parameter in instance.properties"
-        ng-class="{'has-error' : 
(form.instanceCreateForm[parameter.name].$error.required && 
form.instanceCreateForm.submitted)}" >
+        ng-class="{'has-error' : 
((form.instanceCreateForm[parameter.name].$error.required && 
form.instanceCreateForm.submitted) || 
form.instanceCreateForm[parameter.name].validationError)}" >
         <label for="" class="col-sm-3 control-label" 
ng-class="{'not-required': !parameter.required}">{{parameter.label || 
parameter.name}}{{parameter.required ? '*' : ''}}</label>
         <div ng-switch="parameter.type">
           <div class="col-sm-9 checkbox" ng-switch-when="boolean">
@@ -110,6 +110,9 @@
             <div class="alert alert-danger no-margin-bottom top-margin" 
ng-show='form.instanceCreateForm[parameter.name].$error.required && 
form.instanceCreateForm.submitted'>
               This field is required.
             </div>
+            <div class="alert alert-danger no-margin-bottom top-margin" 
ng-show='form.instanceCreateForm[parameter.name].validationError'>
+              {{form.instanceCreateForm[parameter.name].validationMessage}}
+            </div>
           </div>
         </div>
       </div>
@@ -121,8 +124,8 @@
   
   <div class="col-sm-12 ">
     <button class="btn btn-primary pull-right left-margin save-button"
-            ng-class="{'disabled' : (form.instanceCreateForm.submitted)}" 
ng-click="save()" type="submit">Save</button>
+            ng-class="{'disabled' : (form.instanceCreateForm.isSaving)}" 
ng-click="save()" type="submit">Save</button>
     <a href ng-click="cancel()" class="btn btn-default pull-right 
cancel-button">Cancel</a>
   </div>
     
-</form>
\ No newline at end of file
+</form>

http://git-wip-us.apache.org/repos/asf/ambari/blob/43abcf0d/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/edit.html
----------------------------------------------------------------------
diff --git 
a/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/edit.html 
b/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/edit.html
index 339db7c..4d9591f 100644
--- 
a/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/edit.html
+++ 
b/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/edit.html
@@ -136,7 +136,7 @@
   <div class="panel-body">
     <form name="propertiesForm" class="form-horizontal property-form" 
ng-hide="isConfigurationEmpty" novalidate>
       <fieldset>
-        <div class="form-group" ng-repeat="property in configurationMeta" 
ng-class="{'has-error' : property.required && 
propertiesForm[property.name].$error.required && !editConfigurationDisabled}">
+        <div class="form-group" ng-repeat="property in configurationMeta" 
ng-class="{'has-error' : (!editConfigurationDisabled && ((property.required && 
propertiesForm[property.name].$error.required && !editConfigurationDisabled) || 
propertiesForm[property.name].validationError))}">
           <label for="" class="control-label col-sm-3" 
ng-class="{'not-required': !property.required}">{{property.label || 
property.name}}{{property.required ? '*' : ''}}</label>
           <div ng-switch="property.type">
             <div class="col-sm-9 checkbox" ng-switch-when="boolean">
@@ -147,6 +147,9 @@
               <div class="alert alert-danger no-margin-bottom top-margin" 
ng-show='property.required && propertiesForm[property.name].$error.required && 
!editConfigurationDisabled'>
                 This field is required.
               </div>
+              <div class="alert alert-danger no-margin-bottom top-margin" 
ng-show='property.required && propertiesForm[property.name].validationError && 
!editConfigurationDisabled'>
+                {{propertiesForm[property.name].validationMessage}}
+              </div>
             </div>
           </div>
         </div>

Reply via email to