Skip to content

Commit daf1b85

Browse files
Entity Stat aggregate view simplified.
#345
1 parent bb0c27e commit daf1b85

19 files changed

Lines changed: 263 additions & 324 deletions

File tree

waltz-data/src/main/java/com/khartec/waltz/data/entity_statistic/EntityStatisticDefinitionDao.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,13 @@ public List<EntityStatisticDefinition> getAllDefinitions() {
8686
.fetch(TO_DEFINITION_MAPPER);
8787
}
8888

89+
public List<EntityStatisticDefinition> findAllActiveDefinitions() {
90+
return dsl.select(esd.fields())
91+
.from(esd)
92+
.where(esd.ACTIVE.eq(true))
93+
.fetch(TO_DEFINITION_MAPPER);
94+
}
95+
8996

9097
public List<EntityStatisticDefinition> findTopLevelDefinitions() {
9198
return dsl.select(esd.fields())

waltz-ng/client/app-groups/app-group-view.html

Lines changed: 43 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
-->
1818

1919
<div>
20+
2021
<!-- HEADER -->
2122
<waltz-page-header name="{{ ctrl.groupDetail.appGroup.name }}"
2223
icon="object-group"
@@ -87,44 +88,6 @@
8788
</waltz-data-flows-tabgroup-section>
8889

8990

90-
<!-- TECHNOLOGIES -->
91-
<waltz-section name="Technologies">
92-
93-
<waltz-section-actions>
94-
<button class="btn btn-xs waltz-btn-transparent"
95-
ng-click="ctrl.visibility.techOverlay = ! ctrl.visibility.techOverlay">
96-
<waltz-icon name="map-signs"></waltz-icon>
97-
</button>
98-
</waltz-section-actions>
99-
100-
<waltz-source-data-overlay visible="ctrl.visibility.techOverlay"
101-
ratings="ctrl.sourceDataRatings"
102-
entities="['SERVER', 'DATABASE', 'SOFTWARE']">
103-
</waltz-source-data-overlay>
104-
105-
<waltz-group-technology-summary stats="ctrl.techStats">
106-
</waltz-group-technology-summary>
107-
</waltz-section>
108-
109-
110-
<!-- COSTS -->
111-
<waltz-asset-costs-section data='ctrl.assetCostData'
112-
source-data-ratings="ctrl.sourceDataRatings"
113-
on-bucket-select="ctrl.onAssetBucketSelect">
114-
</waltz-asset-costs-section>
115-
116-
117-
118-
119-
<!-- BOOKMARKS -->
120-
<waltz-bookmarks-section bookmarks="ctrl.bookmarks"
121-
kind="APP_GROUP"
122-
source-data-ratings="ctrl.sourceDataRatings"
123-
entity-id="{{ ctrl.groupDetail.appGroup.id }}"
124-
parent-name="{{ ctrl.groupDetail.appGroup.name }}">
125-
</waltz-bookmarks-section>
126-
127-
12891
<!-- APPS -->
12992
<waltz-section name="Applications"
13093
id="apps-section"
@@ -175,9 +138,49 @@
175138

176139
<!-- INDICATORS -->
177140
<waltz-entity-statistic-summary-section name="Indicators"
178-
definitions="ctrl.entityStatistics.definitions"
179-
summaries="ctrl.entityStatistics.summaries"
141+
definitions="ctrl.entityStatisticDefinitions"
180142
parent-ref="ctrl.entityRef">
181143
</waltz-entity-statistic-summary-section>
182144

145+
146+
<!-- TECHNOLOGIES -->
147+
<waltz-section name="Technologies">
148+
149+
<waltz-section-actions>
150+
<button class="btn btn-xs waltz-btn-transparent"
151+
ng-click="ctrl.visibility.techOverlay = ! ctrl.visibility.techOverlay">
152+
<waltz-icon name="map-signs"></waltz-icon>
153+
</button>
154+
</waltz-section-actions>
155+
156+
<waltz-source-data-overlay visible="ctrl.visibility.techOverlay"
157+
ratings="ctrl.sourceDataRatings"
158+
entities="['SERVER', 'DATABASE', 'SOFTWARE']">
159+
</waltz-source-data-overlay>
160+
161+
<waltz-group-technology-summary stats="ctrl.techStats">
162+
</waltz-group-technology-summary>
163+
</waltz-section>
164+
165+
166+
<!-- COSTS -->
167+
<waltz-asset-costs-section data='ctrl.assetCostData'
168+
source-data-ratings="ctrl.sourceDataRatings"
169+
on-bucket-select="ctrl.onAssetBucketSelect">
170+
</waltz-asset-costs-section>
171+
172+
173+
174+
175+
<!-- BOOKMARKS -->
176+
<waltz-bookmarks-section bookmarks="ctrl.bookmarks"
177+
kind="APP_GROUP"
178+
source-data-ratings="ctrl.sourceDataRatings"
179+
entity-id="{{ ctrl.groupDetail.appGroup.id }}"
180+
parent-name="{{ ctrl.groupDetail.appGroup.name }}">
181+
</waltz-bookmarks-section>
182+
183+
184+
185+
183186
</div>

waltz-ng/client/app-groups/app-group-view.js

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ const initialState = {
7575
changeInitiatives: [],
7676
complexity: [],
7777
dataFlows : null,
78-
entityStatistics: [],
78+
entityStatisticDefinitions: [],
7979
flowOptions: null,
8080
groupDetail: null,
8181
initiallySelectedIds: [],
@@ -96,22 +96,6 @@ const initialState = {
9696
};
9797

9898

99-
function loadEntityStatistics(entityStatisticStore, appIdSelector) {
100-
const entityStatistics = {};
101-
102-
return entityStatisticStore
103-
.findTopLevelDefinitions()
104-
.then(definitions => {
105-
entityStatistics.definitions = definitions;
106-
const definitionIds = _.map(definitions, 'id');
107-
return entityStatisticStore.findStatTallies(definitionIds, appIdSelector);
108-
})
109-
.then(tallies => {
110-
entityStatistics.summaries = tallies;
111-
return entityStatistics;
112-
});
113-
}
114-
11599
function controller($scope,
116100
$q,
117101
$stateParams,
@@ -214,10 +198,9 @@ function controller($scope,
214198

215199
vm.loadFlowDetail = () => dataFlowViewService.loadDetail();
216200

217-
loadEntityStatistics(entityStatisticStore, appIdSelector)
218-
.then(stats => {
219-
vm.entityStatistics = stats;
220-
});
201+
entityStatisticStore
202+
.findAllActiveDefinitions()
203+
.then(definitions => vm.entityStatisticDefinitions = definitions);
221204

222205
}
223206

waltz-ng/client/capabilities/capability-view.html

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,13 @@
115115
</waltz-section>
116116

117117

118+
<!-- INDICATORS -->
119+
<waltz-entity-statistic-summary-section name="Indicators"
120+
definitions="ctrl.entityStatisticDefinitions"
121+
parent-ref="ctrl.entityRef">
122+
</waltz-entity-statistic-summary-section>
123+
124+
118125
<!-- TECHNOLOGIES -->
119126
<waltz-section name="Technologies">
120127

@@ -153,14 +160,6 @@
153160
</waltz-bookmarks-section>
154161

155162

156-
<!-- INDICATORS -->
157-
<waltz-entity-statistic-summary-section name="Indicators"
158-
definitions="ctrl.entityStatistics.definitions"
159-
summaries="ctrl.entityStatistics.summaries"
160-
parent-ref="ctrl.entityRef">
161-
</waltz-entity-statistic-summary-section>
162-
163-
164163
<!-- ASSOCIATED CAPABILITIES -->
165164
<waltz-section name="Associated Capabilities">
166165
<ul>

waltz-ng/client/capabilities/capability-view.js

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ const initialState = {
2525
capability: null,
2626
complexity: [],
2727
dataFlows: [],
28-
entityStatistics: [],
28+
entityStatisticDefinitions: [],
2929
groupedApps: null,
3030
processes: [],
3131
ratings: null,
@@ -119,23 +119,6 @@ function prepareGroupData(capability, apps, perspective, ratings) {
119119
}
120120

121121

122-
function loadEntityStatistics(entityStatisticStore, appIdSelector) {
123-
const entityStatistics = {};
124-
125-
return entityStatisticStore
126-
.findTopLevelDefinitions()
127-
.then(definitions => {
128-
entityStatistics.definitions = definitions;
129-
const definitionIds = _.map(definitions, 'id');
130-
return entityStatisticStore.findStatTallies(definitionIds, appIdSelector);
131-
})
132-
.then(tallies => {
133-
entityStatistics.summaries = tallies;
134-
return entityStatistics;
135-
});
136-
}
137-
138-
139122
function controller($q,
140123
$scope,
141124
$state,
@@ -284,10 +267,9 @@ function controller($q,
284267
loadTraitInfo(traitStore, traitUsageStore, capability.id)
285268
.then(r => vm.traitInfo = r);
286269

287-
loadEntityStatistics(entityStatisticStore, appIdSelector)
288-
.then(stats => {
289-
vm.entityStatistics = stats;
290-
});
270+
entityStatisticStore
271+
.findAllActiveDefinitions()
272+
.then(defns => vm.entityStatisticDefinitions = defns);
291273
}
292274

293275

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<div>
2+
<waltz-section name="{{ $ctrl.name }}"
3+
icon="pie-chart">
4+
5+
<div class="row"
6+
ng-if="$ctrl.definitions.length > 0">
7+
<div class="col-md-4">
8+
<treecontrol class="tree-light"
9+
tree-model="$ctrl.definitionTree"
10+
on-selection="$ctrl.onDefinitionSelection(node)">
11+
<span ng-bind="node.name"></span>
12+
</treecontrol>
13+
14+
</div>
15+
<div class="col-md-8">
16+
<div ng-if="$ctrl.activeSummary == null && ! $ctrl.loading">
17+
Select an indicator to see more...
18+
</div>
19+
<div ng-if="$ctrl.activeSummary != null && $ctrl.loading"
20+
style="height: 230px">
21+
</div>
22+
<div ng-if="$ctrl.activeSummary != null && ! $ctrl.loading">
23+
<waltz-entity-statistic-summary-card summary="$ctrl.activeSummary"
24+
definition="$ctrl.activeDefinition"
25+
parent-ref="$ctrl.parentRef"
26+
sub-title="{{$ctrl.activeDefinition.category | toDisplayName:'entityStatistic'}}">
27+
</waltz-entity-statistic-summary-card>
28+
</div>
29+
</div>
30+
</div>
31+
32+
<div class="row"
33+
ng-if="$ctrl.definitions.length == 0">
34+
<div class="col-md-12">
35+
<div class="alert alert-warning">
36+
<strong>
37+
No Indicators
38+
</strong>
39+
</div>
40+
</div>
41+
</div>
42+
</waltz-section>
43+
</div>
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/*
2+
* Waltz
3+
* Copyright (c) David Watkins. All rights reserved.
4+
* The use and distribution terms for this software are covered by the
5+
* Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
6+
* which can be found in the file epl-v10.html at the root of this distribution.
7+
* By using this software in any fashion, you are agreeing to be bound by
8+
* the terms of this license.
9+
* You must not remove this notice, or any other, from this software.
10+
*
11+
*/
12+
import { buildHierarchies, initialiseData, switchToParentIds } from '../../common';
13+
14+
15+
const bindings = {
16+
name: '@',
17+
definitions: '<',
18+
parentRef: '<'
19+
};
20+
21+
22+
const initData = {
23+
activeDefinition: null,
24+
activeSummary: null,
25+
definitions: [],
26+
loading: false,
27+
summaries: {}
28+
};
29+
30+
31+
function buildDefinitionTree(defns = []) {
32+
return switchToParentIds(buildHierarchies(defns));
33+
}
34+
35+
const template = require('./entity-statistic-summary-section.html');
36+
37+
38+
function controller(entityStatisticStore) {
39+
const vm = initialiseData(this, initData);
40+
41+
vm.$onChanges = () => {
42+
vm.definitionTree = buildDefinitionTree(vm.definitions);
43+
};
44+
45+
vm.onDefinitionSelection = (d) => {
46+
vm.activeDefinition = d;
47+
if (vm.summaries[d.id]) {
48+
vm.loading = false;
49+
vm.activeSummary = vm.summaries[d.id];
50+
} else {
51+
vm.loading = true;
52+
entityStatisticStore
53+
.findStatTallies([d.id], { entityReference: vm.parentRef, scope: 'CHILDREN' })
54+
.then(summaries => {
55+
vm.loading = false;
56+
vm.summaries[d.id] = summaries[0];
57+
vm.activeSummary = summaries[0];
58+
});
59+
}
60+
};
61+
}
62+
63+
64+
controller.$inject = [
65+
'EntityStatisticStore'
66+
];
67+
68+
69+
const component = {
70+
template,
71+
controller,
72+
bindings
73+
};
74+
75+
76+
export default component;

waltz-ng/client/entity-statistics/directives/entity-statistic-summary-section.html

Lines changed: 0 additions & 25 deletions
This file was deleted.

0 commit comments

Comments
 (0)