Skip to content

Commit b2a1370

Browse files
Merge pull request #7120 from deutschebank/db-contrib/waltz-7088-permissions-view
Db contrib/waltz 7088 permissions view
2 parents 094a42d + ac979ee commit b2a1370

File tree

12 files changed

+461
-5
lines changed

12 files changed

+461
-5
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package org.finos.waltz.data.permission;
2+
3+
import org.finos.waltz.model.EntityKind;
4+
import org.finos.waltz.model.Operation;
5+
import org.finos.waltz.model.permission.ImmutablePermissionViewItem;
6+
import org.finos.waltz.model.permission.PermissionViewItem;
7+
import org.finos.waltz.schema.Tables;
8+
import org.finos.waltz.schema.tables.AssessmentDefinition;
9+
import org.finos.waltz.schema.tables.InvolvementGroup;
10+
import org.finos.waltz.schema.tables.InvolvementGroupEntry;
11+
import org.finos.waltz.schema.tables.InvolvementKind;
12+
import org.finos.waltz.schema.tables.MeasurableCategory;
13+
import org.finos.waltz.schema.tables.PermissionGroup;
14+
import org.finos.waltz.schema.tables.PermissionGroupInvolvement;
15+
import org.jooq.DSLContext;
16+
import org.jooq.Field;
17+
import org.jooq.impl.DSL;
18+
import org.springframework.beans.factory.annotation.Autowired;
19+
import org.springframework.stereotype.Repository;
20+
21+
import java.util.Set;
22+
23+
import static org.finos.waltz.data.JooqUtilities.maybeReadRef;
24+
import static org.finos.waltz.model.EntityReference.mkRef;
25+
26+
@Repository
27+
public class PermissionViewDao {
28+
29+
private static final InvolvementGroup ig = Tables.INVOLVEMENT_GROUP.as("ig");
30+
private static final InvolvementGroupEntry ige = Tables.INVOLVEMENT_GROUP_ENTRY.as("ige");
31+
private static final InvolvementKind ik = Tables.INVOLVEMENT_KIND.as("ik");
32+
private static final PermissionGroup pg = Tables.PERMISSION_GROUP.as("pg");
33+
private static final PermissionGroupInvolvement pgi = Tables.PERMISSION_GROUP_INVOLVEMENT.as("pgi");
34+
private static final MeasurableCategory mc = Tables.MEASURABLE_CATEGORY.as("mc");
35+
private static final AssessmentDefinition ad = Tables.ASSESSMENT_DEFINITION.as("ad");
36+
37+
private final DSLContext dsl;
38+
39+
@Autowired
40+
public PermissionViewDao(DSLContext dsl) {
41+
this.dsl = dsl;
42+
}
43+
44+
public Set<PermissionViewItem> findAll() {
45+
Field<String> qualifierName = DSL
46+
.coalesce(mc.NAME, ad.NAME, null)
47+
.as("qualifier_name");
48+
49+
return dsl
50+
.select(pg.NAME, pg.ID, pg.EXTERNAL_ID, pg.DESCRIPTION,
51+
pgi.PARENT_KIND, pgi.SUBJECT_KIND, pgi.QUALIFIER_KIND, pgi.QUALIFIER_ID, qualifierName, pgi.OPERATION,
52+
ig.NAME, ig.ID, ig.EXTERNAL_ID,
53+
ik.NAME, ik.DESCRIPTION, ik.EXTERNAL_ID, ik.ID)
54+
.from(ig)
55+
.innerJoin(pgi).on(pgi.INVOLVEMENT_GROUP_ID.eq(ig.ID))
56+
.innerJoin(ige).on(ig.ID.eq(ige.INVOLVEMENT_GROUP_ID))
57+
.innerJoin(ik).on(ik.ID.eq(ige.INVOLVEMENT_KIND_ID))
58+
.innerJoin(pg).on(pg.ID.eq(pgi.PERMISSION_GROUP_ID))
59+
.leftJoin(mc).on(pgi.QUALIFIER_KIND.eq(EntityKind.MEASURABLE_CATEGORY.name()).and(mc.ID.eq(pgi.QUALIFIER_ID)))
60+
.leftJoin(ad).on(pgi.QUALIFIER_KIND.eq(EntityKind.ASSESSMENT_DEFINITION.name()).and(ad.ID.eq(pgi.QUALIFIER_ID)))
61+
.fetchSet(r -> ImmutablePermissionViewItem
62+
.builder()
63+
.parentKind(EntityKind.valueOf(r.get(pgi.PARENT_KIND)))
64+
.subjectKind(EntityKind.valueOf(r.get(pgi.SUBJECT_KIND)))
65+
.qualifier(maybeReadRef(r, pgi.QUALIFIER_KIND, pgi.QUALIFIER_ID, qualifierName).orElse(null))
66+
.operation(Operation.valueOf(r.get(pgi.OPERATION)))
67+
.permissionGroup(mkRef(EntityKind.PERMISSION_GROUP, r.get(pg.ID), r.get(pg.NAME), r.get(pg.DESCRIPTION), r.get(pg.EXTERNAL_ID)))
68+
.involvementGroup(mkRef(EntityKind.INVOLVEMENT_GROUP, r.get(ig.ID), r.get(ig.NAME), null, r.get(ig.EXTERNAL_ID)))
69+
.involvementKind(mkRef(EntityKind.INVOLVEMENT_KIND, r.get(ik.ID), r.get(ik.NAME), r.get(ik.DESCRIPTION), r.get(ik.EXTERNAL_ID)))
70+
.build());
71+
}
72+
73+
}

waltz-model/src/main/java/org/finos/waltz/model/EntityKind.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public enum EntityKind {
6060
FLOW_CLASSIFICATION("Flow classification"),
6161
FLOW_DIAGRAM("Flow diagram"),
6262
INVOLVEMENT("Involvement"),
63+
INVOLVEMENT_GROUP("Involvement Group"),
6364
INVOLVEMENT_KIND("Involvement kind"),
6465
LICENCE("Licence"),
6566
LEGAL_ENTITY("Legal Entity"),
@@ -75,6 +76,7 @@ public enum EntityKind {
7576
MEASURABLE_RATING_REPLACEMENT("Measurable rating replacement"),
7677
ORG_UNIT("Organisational unit"),
7778
PERFORMANCE_METRIC_PACK("Performance metric pack"),
79+
PERMISSION_GROUP("Permission Group"),
7880
PERSON("Person"),
7981
PHYSICAL_SPECIFICATION("Physical specification"),
8082
PHYSICAL_SPEC_DATA_TYPE_DECORATOR("Physical specification data type decorator"),
@@ -107,7 +109,7 @@ public enum EntityKind {
107109
CAPABILITY("Capability"), // TO BE REMOVED IN 1.5
108110

109111
@Deprecated
110-
AUTHORITATIVE_SOURCE("Authoritative source"); // TO BE REMOVED IN 1.36
112+
AUTHORITATIVE_SOURCE("Authoritative source"); // TO BE REMOVED IN 1.36
111113

112114

113115
private final String prettyName;
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.finos.waltz.model.permission;
2+
3+
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
4+
import org.finos.waltz.model.EntityKind;
5+
import org.finos.waltz.model.EntityReference;
6+
import org.finos.waltz.model.Nullable;
7+
import org.finos.waltz.model.Operation;
8+
import org.immutables.value.Value;
9+
10+
@Value.Immutable
11+
@JsonSerialize(as=ImmutablePermissionViewItem.class)
12+
public interface PermissionViewItem {
13+
EntityKind parentKind();
14+
15+
EntityKind subjectKind();
16+
17+
@Nullable
18+
EntityReference qualifier();
19+
20+
Operation operation();
21+
22+
EntityReference involvementGroup();
23+
24+
EntityReference permissionGroup();
25+
26+
EntityReference involvementKind();
27+
}

waltz-ng/client/common/services/enums/entity.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,13 @@ export const entity = {
220220
description: null,
221221
position: 1500
222222
},
223+
INVOLVEMENT_GROUP: {
224+
key: "INVOLVEMENT_GROUP",
225+
name: "Involvement Group",
226+
icon: "people-group",
227+
description: null,
228+
position: 1510
229+
},
223230
INVOLVEMENT_KIND: {
224231
key: "INVOLVEMENT_KIND",
225232
name: "Involvement Kind",
@@ -318,6 +325,13 @@ export const entity = {
318325
description: null,
319326
position: 1960
320327
},
328+
PERMISSION_GROUP: {
329+
key: "PERMISSION_GROUP",
330+
name: "Permission Group",
331+
icon: "layer-group",
332+
description: null,
333+
position: 1970
334+
},
321335
PERSON: {
322336
key: "PERSON",
323337
name: "Person",

waltz-ng/client/common/svelte/EntityIcon.svelte

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@
44
55
import Icon from "./Icon.svelte";
66
export let kind;
7+
export let showName = false;
78
8-
$: name = _.get(entity, [kind, "icon"], "circle-o");
9-
10-
9+
$: iconName = _.get(entity, [kind, "icon"], "circle-o");
10+
$: label = _.get(entity, [kind, "name"], "");
1111
</script>
1212

1313
<style>
1414
</style>
1515

16-
<Icon {name}/>
16+
<Icon name={iconName}/>
17+
{#if showName}
18+
<span>{label}</span>
19+
{/if}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
* Waltz - Enterprise Architecture
3+
* Copyright (C) 2016, 2017, 2018, 2019 Waltz open source project
4+
* See README.md for more information
5+
*
6+
* Licensed under the Apache License, Version 2.0 (the "License");
7+
* you may not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS,
14+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* See the License for the specific
16+
*
17+
*/
18+
19+
20+
import {remote} from "./remote";
21+
import {checkIsEntityRef} from "../common/checks";
22+
23+
export function mkPermissionViewStore() {
24+
25+
const findAll = (ref, force) => {
26+
return remote
27+
.fetchViewList(
28+
"GET",
29+
`api/permission-view`,
30+
null,
31+
force);
32+
};
33+
34+
35+
return {
36+
findAll
37+
};
38+
}
39+
40+
export const permissionViewStore = mkPermissionViewStore();
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import {initialiseData} from "../common";
2+
import PermissionsView from "./svelte/permissions/PermissionsView.svelte";
3+
4+
const initialState = {
5+
PermissionsView
6+
};
7+
8+
9+
function controller() {
10+
initialiseData(this, initialState);
11+
}
12+
13+
const page = {
14+
controller,
15+
template: `<waltz-svelte-component component="$ctrl.PermissionsView"></waltz-svelte-component>`,
16+
controllerAs: "$ctrl"
17+
};
18+
19+
20+
export default page;

waltz-ng/client/system/routes.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import EudaListView from "./euda-list-view";
3333
import RelationshipKindsView from "./relationship-kinds-view";
3434
import ReassignRecipientsView from "./reassign-recipients-view";
3535
import ColorGradientView from "./color-gradient-view";
36+
import PermissionsView from "./permissions-view";
3637
import NavAidBuilderView from "./nav-aid-builder-view";
3738
import VersionInfoView from "./version-info-view";
3839
import LicencesAdminView from "./licences-view";
@@ -162,6 +163,11 @@ const diagramBuilderState = {
162163
views: {"content@": DiagramBuilderView}
163164
};
164165

166+
const permissionsState = {
167+
url: "/permissions",
168+
views: {"content@": PermissionsView}
169+
};
170+
165171

166172
function setupRoutes($stateProvider) {
167173
$stateProvider
@@ -179,6 +185,7 @@ function setupRoutes($stateProvider) {
179185
.state("main.system.nav-aids", navAidAdminState)
180186
.state("main.system.nav-aid-builder", navAidBuilderState)
181187
.state("main.system.orphans", orphansState)
188+
.state("main.system.permissions", permissionsState)
182189
.state("main.system.rating-schemes", ratingSchemesState)
183190
.state("main.system.reassign-recipients", reassignRecipientsState)
184191
.state("main.system.recalculate", recalculateState)

0 commit comments

Comments
 (0)