You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2016/12/20 11:27:43 UTC

[18/50] [abbrv] kylin git commit: KYLIN 1875 minor, data model designer

KYLIN 1875 minor,data model designer

Signed-off-by: Li Yang <li...@apache.org>


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

Branch: refs/heads/master-cdh5.7
Commit: 1c2c43cb88d2abc5a1ea1cbf18cbede02fe8c4f5
Parents: f55cc5c
Author: chenzhx <34...@qq.com>
Authored: Thu Dec 15 17:45:13 2016 +0800
Committer: Li Yang <li...@apache.org>
Committed: Thu Dec 15 18:57:36 2016 +0800

----------------------------------------------------------------------
 webapp/app/js/controllers/cubeAdvanceSetting.js |  2 -
 webapp/app/js/controllers/cubeEdit.js           | 12 +++++
 webapp/app/js/controllers/modelDataModel.js     | 47 ++++++--------------
 webapp/app/js/controllers/modelEdit.js          | 22 ++++++++-
 .../modelDesigner/conditions_settings.html      |  4 +-
 .../app/partials/modelDesigner/data_model.html  | 24 +++++-----
 6 files changed, 63 insertions(+), 48 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/1c2c43cb/webapp/app/js/controllers/cubeAdvanceSetting.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/controllers/cubeAdvanceSetting.js b/webapp/app/js/controllers/cubeAdvanceSetting.js
index e557afa..20af908 100644
--- a/webapp/app/js/controllers/cubeAdvanceSetting.js
+++ b/webapp/app/js/controllers/cubeAdvanceSetting.js
@@ -160,7 +160,6 @@ KylinApp.controller('CubeAdvanceSettingCtrl', function ($scope, $modal,cubeConfi
     if (aggregation_group) {
       list[index] = aggregation_group;
     }
-    console.log($scope.cubeMetaFrame.aggregation_groups);
   };
 
   $scope.refreshAggregationJoint = function (list, index, aggregation_group,joinIndex,jointDim){
@@ -170,7 +169,6 @@ KylinApp.controller('CubeAdvanceSettingCtrl', function ($scope, $modal,cubeConfi
     if (aggregation_group) {
       list[index] = aggregation_group;
     }
-    console.log($scope.cubeMetaFrame.aggregation_groups);
   };
 
   $scope.refreshIncludes = function (list, index, aggregation_groups) {

http://git-wip-us.apache.org/repos/asf/kylin/blob/1c2c43cb/webapp/app/js/controllers/cubeEdit.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/controllers/cubeEdit.js b/webapp/app/js/controllers/cubeEdit.js
index d58f08f..a2b38f9 100755
--- a/webapp/app/js/controllers/cubeEdit.js
+++ b/webapp/app/js/controllers/cubeEdit.js
@@ -328,6 +328,18 @@ KylinApp.controller('CubeEditCtrl', function ($scope, $q, $routeParams, $locatio
         if (!modelsManager.getModels().length) {
           ModelDescService.query({model_name: $scope.cubeMetaFrame.model_name}, function (_model) {
             $scope.metaModel.model = _model;
+            var rootFactTable = VdmUtil.removeNameSpace($scope.metaModel.model.fact_table);
+            $scope.aliasName.push(rootFactTable);
+            $scope.aliasTableMap[rootFactTable]=$scope.metaModel.model.fact_table;
+            $scope.tableAliasMap[$scope.metaModel.model.fact_table]=rootFactTable;
+            angular.forEach($scope.metaModel.model.lookups,function(joinTable){
+              if(!joinTable.alias){
+                joinTable.alias=VdmUtil.removeNameSpace(joinTable.table);
+              }
+              $scope.aliasTableMap[joinTable.alias]=joinTable.table;
+              $scope.tableAliasMap[joinTable.table]=joinTable.alias;
+              $scope.aliasName.push(joinTable.alias);
+            });
           });
         }
         $scope.state.cubeSchema = angular.toJson($scope.cubeMetaFrame, true);

http://git-wip-us.apache.org/repos/asf/kylin/blob/1c2c43cb/webapp/app/js/controllers/modelDataModel.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/controllers/modelDataModel.js b/webapp/app/js/controllers/modelDataModel.js
index b6edd43..3834e06 100644
--- a/webapp/app/js/controllers/modelDataModel.js
+++ b/webapp/app/js/controllers/modelDataModel.js
@@ -20,26 +20,13 @@
 
 KylinApp.controller('ModelDataModelCtrl', function ($location,$scope, $modal,cubeConfig,MetaModel,SweetAlert,ModelGraphService,$log,TableModel,ModelService,loadingRequest,modelsManager,VdmUtil) {
     $scope.modelsManager = modelsManager;
+    $scope.VdmUtil = VdmUtil;
     angular.forEach($scope.modelsManager.selectedModel.lookups,function(joinTable){
       if(!joinTable.alias){
         joinTable.alias=VdmUtil.removeNameSpace(joinTable.table);
       }
     });
-    $scope.init = function (){
-      $scope.FactTable={root:$scope.modelsManager.selectedModel.fact_table};
-      $scope.aliasTableMap[VdmUtil.removeNameSpace($scope.modelsManager.selectedModel.fact_table)]=$scope.modelsManager.selectedModel.fact_table;
-      $scope.tableAliasMap[$scope.modelsManager.selectedModel.fact_table]=VdmUtil.removeNameSpace($scope.modelsManager.selectedModel.fact_table);
-      $scope.aliasName.push(VdmUtil.removeNameSpace($scope.modelsManager.selectedModel.fact_table));
-      angular.forEach($scope.modelsManager.selectedModel.lookups,function(joinTable){
-        $scope.aliasTableMap[joinTable.alias]=joinTable.table;
-        $scope.tableAliasMap[joinTable.table]=joinTable.alias;
-        $scope.aliasName.push(joinTable.alias);
-      });
-    }
-    if($scope.state.mode=='edit'){
-      $scope.init();
-    }
-
+    $scope.FactTable={root:$scope.modelsManager.selectedModel.fact_table};
     $scope.cubeConfig = cubeConfig;
     var DataModel = function () {
         return {
@@ -134,13 +121,11 @@ KylinApp.controller('ModelDataModelCtrl', function ($location,$scope, $modal,cub
         $scope.tableAliasMap[$scope.newLookup.table]=$scope.newLookup.alias;
         $scope.aliasName.push($scope.newLookup.alias);
         lookupList.push(angular.copy($scope.newLookup));
-
         $scope.resetParams();
     };
 
     $scope.doneEditLookup = function () {
         // Copy edited model to destination model.
-        angular.copy($scope.newLookup, lookupList[$scope.lookupState.editingIndex]);
         var oldAlias=$scope.aliasName[$scope.lookupState.editingIndex+1];
         var newAlias=$scope.newLookup.alias;
         if(oldAlias!=newAlias){
@@ -168,7 +153,9 @@ KylinApp.controller('ModelDataModelCtrl', function ($location,$scope, $modal,cub
             for(var i=0;i< modelsManager.selectedModel.metrics.length;i++){
                modelsManager.selectedModel.metrics[i]= modelsManager.selectedModel.metrics[i].replace(oldAlias+'.',newAlias+'.');
             }
-            modelsManager.selectedModel.partition_desc.partition_date_column = modelsManager.selectedModel.partition_desc.partition_date_column.replace(oldAlias+'.',newAlias+'.');
+            if(modelsManager.selectedModel.partition_desc.partition_date_column){
+              modelsManager.selectedModel.partition_desc.partition_date_column = modelsManager.selectedModel.partition_desc.partition_date_column.replace(oldAlias+'.',newAlias+'.');
+            }
           }
         }
         angular.copy($scope.newLookup,lookupList[$scope.lookupState.editingIndex]);
@@ -176,19 +163,21 @@ KylinApp.controller('ModelDataModelCtrl', function ($location,$scope, $modal,cub
         $scope.resetParams();
     };
     $scope.changeFactTable = function () {
-        $scope.aliasTableMap={};
+        if(!$scope.FactTable){
+         return;
+        }
         $scope.aliasTableMap[VdmUtil.removeNameSpace($scope.FactTable.root)]=$scope.FactTable.root;
-        $scope.tableAliasMap={};
         $scope.tableAliasMap[$scope.FactTable.root]=VdmUtil.removeNameSpace($scope.FactTable.root);
-        $scope.aliasName=[VdmUtil.removeNameSpace($scope.FactTable.root)];
-        modelsManager.selectedModel.lookups = [];
-        modelsManager.selectedModel.dimensions = [];
-        modelsManager.selectedModel.metrics= [];
+        $scope.aliasName.splice(0,$scope.aliasName.length);
+        $scope.aliasName.push(VdmUtil.removeNameSpace($scope.FactTable.root));
+        modelsManager.selectedModel.lookups.splice(0,modelsManager.selectedModel.lookups.length);
+        modelsManager.selectedModel.dimensions.splice(0,modelsManager.selectedModel.dimensions.length);
+        modelsManager.selectedModel.metrics.splice(0,modelsManager.selectedModel.metrics.length);
         modelsManager.selectedModel.partition_desc.partition_date_column = null;
         $scope.modelsManager.selectedModel.fact_table=$scope.FactTable.root;
     }
     $scope.changeJoinTable = function () {
-        $scope.newLookup.alias=$scope.newLookup.table;
+        $scope.newLookup.alias=VdmUtil.removeNameSpace($scope.newLookup.table);
     }
     $scope.cancelLookup = function () {
         $scope.resetParams();
@@ -221,8 +210,6 @@ KylinApp.controller('ModelDataModelCtrl', function ($location,$scope, $modal,cub
             lookupList.splice(lookupList.indexOf(lookup), 1);
         }
     };
-    $scope.changeAlias = function (){
-    }
 
     $scope.changeKey = function(index){
          var join_table = $scope.newLookup.joinTable;
@@ -297,10 +284,4 @@ KylinApp.controller('ModelDataModelCtrl', function ($location,$scope, $modal,cub
     $scope.filterNotRoot = function (item) {
       return item.name!==modelsManager.selectedModel.fact_table;
     };
-/*    $scope.$watch('$scope.newLookup.alias', function (newValue, oldValue) {
-      if (newValue&&$scope.lookupState.editing ) {
-        console.log(newValue);
-        console.log(oldValue);
-      }
-    });*/
 });

http://git-wip-us.apache.org/repos/asf/kylin/blob/1c2c43cb/webapp/app/js/controllers/modelEdit.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/controllers/modelEdit.js b/webapp/app/js/controllers/modelEdit.js
index fd78d03..c504b52 100644
--- a/webapp/app/js/controllers/modelEdit.js
+++ b/webapp/app/js/controllers/modelEdit.js
@@ -25,6 +25,7 @@ KylinApp.controller('ModelEditCtrl', function ($scope, $q, $routeParams, $locati
     $scope.tableAliasMap={};
     $scope.aliasTableMap={};
     $scope.aliasName=[];
+    $scope.selectedAliasCubeMap={};
     $scope.route={params:$routeParams.modelName};
     $scope.modelMode = absUrl.indexOf("/models/add")!=-1?'addNewModel':absUrl.indexOf("/models/edit")!=-1?'editExistModel':'default';
 
@@ -93,8 +94,27 @@ KylinApp.controller('ModelEditCtrl', function ($scope, $q, $routeParams, $locati
       ModelDescService.query({model_name: modelName}, function (model) {
         if (model) {
           modelsManager.selectedModel = model;
+          $scope.FactTable={root:$scope.modelsManager.selectedModel.fact_table};
+          $scope.aliasTableMap[VdmUtil.removeNameSpace($scope.modelsManager.selectedModel.fact_table)]=$scope.modelsManager.selectedModel.fact_table;
+          $scope.tableAliasMap[$scope.modelsManager.selectedModel.fact_table]=VdmUtil.removeNameSpace($scope.modelsManager.selectedModel.fact_table);
+          $scope.aliasName.push(VdmUtil.removeNameSpace($scope.modelsManager.selectedModel.fact_table));
+          angular.forEach($scope.modelsManager.selectedModel.lookups,function(joinTable){
+            $scope.aliasTableMap[joinTable.alias]=joinTable.table;
+            $scope.tableAliasMap[joinTable.table]=joinTable.alias;
+            $scope.aliasName.push(joinTable.alias);
+          });
           CubeService.list({modelName:model.name}, function (_cubes) {
-              $scope.cubesLength = _cubes.length;
+            $scope.cubesLength = _cubes.length;
+            angular.forEach(_cubes,function(cube){
+              CubeDescService.query({cube_name:cube.name},{},function(each){
+                angular.forEach(each[0].dimensions,function(dimension){
+                  $scope.selectedAliasCubeMap[dimension.table]=true;
+                });
+                angular.forEach(each[0].measures,function(measure){
+                  $scope.selectedAliasCubeMap[VdmUtil.getNameSpaceAliasName(measure.function.parameter.value)]=true;
+                });
+              })
+            });
           });
           modelsManager.selectedModel.project = ProjectModel.getProjectByCubeModel(modelName);
           if(!ProjectModel.getSelectedProject()){

http://git-wip-us.apache.org/repos/asf/kylin/blob/1c2c43cb/webapp/app/partials/modelDesigner/conditions_settings.html
----------------------------------------------------------------------
diff --git a/webapp/app/partials/modelDesigner/conditions_settings.html b/webapp/app/partials/modelDesigner/conditions_settings.html
index 6820b60..30fcb67 100644
--- a/webapp/app/partials/modelDesigner/conditions_settings.html
+++ b/webapp/app/partials/modelDesigner/conditions_settings.html
@@ -27,14 +27,14 @@
               <div class="row middle-popover">
                   <label class="control-label col-xs-12 col-sm-3 no-padding-right font-color-default"><b>Partition Date Column</b> <i kylinpopover placement="right" title="Partition Date Column" template="partitionTip.html" class="fa fa-info-circle"></i></label>
                   <div class="col-xs-12 col-sm-6" ng-if="state.mode=='edit'">
-                      <select style="width: 45%" chosen data-placeholder="e.g. DEFAULT.TEST_KYLIN_FACT.CAL_DT"
+                      <select style="width: 49%" chosen data-placeholder="e.g. DEFAULT.TEST_KYLIN_FACT.CAL_DT"
                               ng-model="selectedTables.fact"
                               data-placement=""
                               ng-options="alias as alias for alias in availableFactTables" >
                           <option value="">--Select Partition Table--</option>
                       </select>
 
-                      <select style="width: 45%" chosen data-placeholder="e.g. DEFAULT.TEST_KYLIN_FACT.CAL_DT"
+                      <select style="width: 49%" chosen data-placeholder="e.g. DEFAULT.TEST_KYLIN_FACT.CAL_DT"
                             ng-model="modelsManager.selectedModel.partition_desc.partition_date_column"
                             ng-change="partitionChange(modelsManager.selectedModel.partition_desc.partition_date_column)"
                             data-placement=""

http://git-wip-us.apache.org/repos/asf/kylin/blob/1c2c43cb/webapp/app/partials/modelDesigner/data_model.html
----------------------------------------------------------------------
diff --git a/webapp/app/partials/modelDesigner/data_model.html b/webapp/app/partials/modelDesigner/data_model.html
index e032cf9..97d3c51 100644
--- a/webapp/app/partials/modelDesigner/data_model.html
+++ b/webapp/app/partials/modelDesigner/data_model.html
@@ -27,7 +27,7 @@
             </label>
             <div class="col-xs-12 col-sm-6" ng-class="{'has-error':forms.data_model_form.table_name.$invalid && (forms.data_model_form.table_name.$dirty||forms.data_model_form.$submitted)}">
               <select chosen ng-model="FactTable.root" ng-if="state.mode=='edit'"
-                      ng-options="table.name as table.name for table in tableModel.selectProjectTables"
+                      ng-options="table.name as VdmUtil.removeNameSpace(table.name) for table in tableModel.selectProjectTables"
                       style="width:100%;" ng-change="changeFactTable()"
                       name="table_name"   ng-disabled="cubesLength>0"
                       ng-required="true"
@@ -35,7 +35,7 @@
                       class="chosen-select">
                 <option value=""> -- Select Fact Table -- </option>
               </select>
-              <span ng-if="state.mode=='view'">{{modelsManager.selectedModel.fact_table}}</span>
+              <span ng-if="state.mode=='view'">{{VdmUtil.removeNameSpace(modelsManager.selectedModel.fact_table)}}</span>
             </div>
         </div>
     </div>
@@ -67,7 +67,7 @@
                 <th>Table Kind</th>
                 <th>Join Type</th>
                 <th>Join Condition</th>
-                <th ng-if="state.mode=='edit'">Actions</th>
+                <th ng-if="state.mode=='edit'" class="col-xs-1">Actions</th>
             </tr>
             </thead>
             <tbody>
@@ -98,13 +98,14 @@
                 </td>
                 <td ng-if="state.mode=='edit'">
                     <!-- edit button -->
-                    <button class="btn btn-xs btn-info" ng-disabled="lookupState.editing||cubesLength>0"
+                    <button class="btn btn-xs btn-info" ng-disabled="lookupState.editing||selectedAliasCubeMap[lookup.alias]"
                             ng-click="editLookup(lookup)" ><i class="fa fa-pencil"></i>
                     </button>
                     <!-- remove button -->
-                    <button class="btn btn-xs btn-danger" ng-disabled="lookupState.editing||cubesLength>0"
+                    <button class="btn btn-xs btn-danger" ng-disabled="lookupState.editing||selectedAliasCubeMap[lookup.alias]"
                             ng-click="removeLookup(lookup)" ><i class="fa fa-trash-o"></i>
                     </button>
+                  <i class="fa fa-info-circle" ng-if="selectedAliasCubeMap[lookup.alias]" kylinpopover placement="left" title="Tip" template="tableInUse.html"></i>
                 </td>
             </tr>
             </tbody>
@@ -115,7 +116,7 @@
     <!-- Add Join Table Form -->
     <script type="text/ng-template" id="dataModelLookupTable.html">
         <div class="modal-header">
-            <h4 class="box-title lighter">{{lookupState.editing ? 'Edit' : 'Add'}} Lookup</h4>
+            <h4 class="box-title lighter">{{lookupState.editing ? 'Edit' : 'Add'}} Join Table</h4>
         </div>
         <div class="modal-body">
             <div class="row">
@@ -136,7 +137,7 @@
                               <small class="help-block" ng-show="lookup_form.table_name.$invalid && (lookup_form.table_name.$dirty||forms.model_info_form.$submitted)">Table name required</small>
                               <b>&nbsp;&nbsp;&nbsp;</b>
                               <select chosen ng-model="newLookup.table" style="width: 45%"
-                                      ng-options="table.name as table.name for table in tableModel.selectProjectTables|filter:filterNotRoot"
+                                      ng-options="table.name as VdmUtil.removeNameSpace(table.name) for table in tableModel.selectProjectTables|filter:filterNotRoot"
                                       name="table_name"  ng-disabled="lookupState.editing"
                                       ng-required="true"  ng-change="changeJoinTable()"
                                       data-placeholder="Join Table Name"
@@ -155,7 +156,7 @@
                             <label class="col-sm-3 control-label font-color-default"><b>Alias</b></label>
                             <div class="col-sm-6">
                               <input type="text" class="form-control " name="joinTable_alias" placeholder="Input Table Alias" ng-required="true"
-                                     ng-model="newLookup.alias" ng-change="changeAlias()"  ng-pattern="/^\w+$/">
+                                     ng-model="newLookup.alias"  ng-pattern="/^\w+$/">
                               <small class="help-block red" ng-show="!lookup_form.joinTable_alias.$error.required&&lookup_form.joinTable_alias.$invalid && (lookup_form.joinTable_alias.$dirty||lookup_form.$submitted)"><i class="fa fa-exclamation-triangle"></i>&nbsp;&nbsp; Alias is invalid.</small>
                             </div>
                         </div>
@@ -186,13 +187,13 @@
                             <div class="col-xs-9">
                                 <div ng-repeat="joinIndex in [] | range: newLookup.join.primary_key.length">
                                     <div>
-                                        <select style="width: 45%" chosen data-placeholder="Fact Table Column"
+                                        <select style="width: 45%" chosen data-placeholder="JoinTable Column"
                                                 ng-model="newLookup.join.foreign_key[$index]"  ng-change="changeKey($index)"
                                                 ng-options="newLookup.joinTable+'.'+columns.name as columns.name for columns in getColumnsByAlias(newLookup.joinTable)" >
                                             <option value=""></option>
                                         </select>
                                         <b>=</b>
-                                        <select style="width: 45%" chosen data-placeholder="Lookup Table Column"
+                                        <select style="width: 45%" chosen data-placeholder=" JoinTable Column"
                                                 ng-model="newLookup.join.primary_key[$index]"  ng-change="changeKey($index)"
                                                 ng-options="newLookup.alias+'.'+columns.name as columns.name for columns in getColumnsByTable(newLookup.table)" >
                                             <option value=""></option>
@@ -249,3 +250,6 @@
         </div>
     </script>
 </div>
+<script type="text/ng-template" id="tableInUse.html">
+  <p>This table is in use in Cube.</p>
+</script>