Repository: kylin Updated Branches: refs/heads/master 8d0b504bf -> 1c2c43cb8
KYLIN 1875 minor,data model designer Signed-off-by: Li Yang <liy...@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 Commit: 1c2c43cb88d2abc5a1ea1cbf18cbede02fe8c4f5 Parents: f55cc5c Author: chenzhx <346839...@qq.com> Authored: Thu Dec 15 17:45:13 2016 +0800 Committer: Li Yang <liy...@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> </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> 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>