Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Db contrib/waltz 7088 permissions view #7120

Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Model, dao and endpoint for Permissions viewer
db-waltz committed Jul 11, 2024
commit 73781b243f2b1609fd8249316182256c87086e82
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package org.finos.waltz.data.permission;

import org.finos.waltz.model.EntityKind;
import org.finos.waltz.model.Operation;
import org.finos.waltz.model.permission.ImmutablePermissionViewItem;
import org.finos.waltz.model.permission.PermissionViewItem;
import org.finos.waltz.schema.Tables;
import org.finos.waltz.schema.tables.AssessmentDefinition;
import org.finos.waltz.schema.tables.InvolvementGroup;
import org.finos.waltz.schema.tables.InvolvementGroupEntry;
import org.finos.waltz.schema.tables.InvolvementKind;
import org.finos.waltz.schema.tables.MeasurableCategory;
import org.finos.waltz.schema.tables.PermissionGroupInvolvement;
import org.jooq.DSLContext;
import org.jooq.Field;
import org.jooq.impl.DSL;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.Set;

import static org.finos.waltz.data.JooqUtilities.maybeReadRef;
import static org.finos.waltz.model.EntityReference.mkRef;

@Repository
public class PermissionViewDao {

private static final InvolvementGroup ig = Tables.INVOLVEMENT_GROUP.as("ig");
private static final InvolvementGroupEntry ige = Tables.INVOLVEMENT_GROUP_ENTRY.as("ige");
private static final InvolvementKind ik = Tables.INVOLVEMENT_KIND.as("ik");
private static final PermissionGroupInvolvement pgi = Tables.PERMISSION_GROUP_INVOLVEMENT.as("pgi");
private static final MeasurableCategory mc = Tables.MEASURABLE_CATEGORY.as("mc");
private static final AssessmentDefinition ad = Tables.ASSESSMENT_DEFINITION.as("ad");

private final DSLContext dsl;

@Autowired
public PermissionViewDao(DSLContext dsl) {
this.dsl = dsl;
}

public Set<PermissionViewItem> findAll() {
Field<String> qualifierName = DSL
.coalesce(mc.NAME, ad.NAME, null)
.as("qualifier_name");

return dsl
.select(pgi.PARENT_KIND,
pgi.SUBJECT_KIND,
pgi.QUALIFIER_KIND,
pgi.QUALIFIER_ID,
qualifierName,
pgi.OPERATION,
ig.NAME,
ig.ID,
ig.EXTERNAL_ID,
ik.NAME,
ik.EXTERNAL_ID,
ik.ID)
.from(ig)
.innerJoin(pgi).on(pgi.INVOLVEMENT_GROUP_ID.eq(ig.ID))
.innerJoin(ige).on(ig.ID.eq(ige.INVOLVEMENT_GROUP_ID))
.innerJoin(ik).on(ik.ID.eq(ige.INVOLVEMENT_KIND_ID))
.leftJoin(mc).on(pgi.QUALIFIER_KIND.eq(EntityKind.MEASURABLE_CATEGORY.name()).and(mc.ID.eq(pgi.QUALIFIER_ID)))
.leftJoin(ad).on(pgi.QUALIFIER_KIND.eq(EntityKind.ASSESSMENT_DEFINITION.name()).and(ad.ID.eq(pgi.QUALIFIER_ID)))
.fetchSet(r -> ImmutablePermissionViewItem
.builder()
.parentKind(EntityKind.valueOf(r.get(pgi.PARENT_KIND)))
.subjectKind(EntityKind.valueOf(r.get(pgi.SUBJECT_KIND)))
.qualifier(maybeReadRef(r, pgi.QUALIFIER_KIND, pgi.QUALIFIER_ID, qualifierName).orElse(null))
.operation(Operation.valueOf(r.get(pgi.OPERATION)))
.involvementGroup(mkRef(EntityKind.INVOLVEMENT_GROUP, r.get(ig.ID), r.get(ig.NAME)))
.involvementKind(mkRef(EntityKind.INVOLVEMENT_KIND, r.get(ig.ID), r.get(ig.NAME)))
.build());
}

}
Original file line number Diff line number Diff line change
@@ -60,6 +60,7 @@ public enum EntityKind {
FLOW_CLASSIFICATION("Flow classification"),
FLOW_DIAGRAM("Flow diagram"),
INVOLVEMENT("Involvement"),
INVOLVEMENT_GROUP("Involvement Group"),
INVOLVEMENT_KIND("Involvement kind"),
LICENCE("Licence"),
LEGAL_ENTITY("Legal Entity"),
@@ -107,7 +108,7 @@ public enum EntityKind {
CAPABILITY("Capability"), // TO BE REMOVED IN 1.5

@Deprecated
AUTHORITATIVE_SOURCE("Authoritative source"); // TO BE REMOVED IN 1.36
AUTHORITATIVE_SOURCE("Authoritative source"); // TO BE REMOVED IN 1.36


private final String prettyName;
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package org.finos.waltz.model.permission;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import org.finos.waltz.model.EntityKind;
import org.finos.waltz.model.EntityReference;
import org.finos.waltz.model.Nullable;
import org.finos.waltz.model.Operation;
import org.immutables.value.Value;

@Value.Immutable
@JsonSerialize(as=ImmutablePermissionViewItem.class)
public interface PermissionViewItem {
EntityKind parentKind();

EntityKind subjectKind();

@Nullable
EntityReference qualifier();

Operation operation();

EntityReference involvementGroup();

EntityReference involvementKind();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package org.finos.waltz.service.permission;

import org.finos.waltz.data.permission.PermissionViewDao;
import org.finos.waltz.model.permission.PermissionViewItem;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Set;

@Service
public class PermissionViewService {
private final PermissionViewDao permissionViewDao;


@Autowired
public PermissionViewService(PermissionViewDao permissionViewDao) {
this.permissionViewDao = permissionViewDao;
}


public Set<PermissionViewItem> findAll() {
return permissionViewDao.findAll();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
* Waltz - Enterprise Architecture
* Copyright (C) 2016, 2017, 2018, 2019 Waltz open source project
* See README.md for more information
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific
*
*/

package org.finos.waltz.web.endpoints.api;


import org.finos.waltz.service.permission.PermissionViewService;
import org.finos.waltz.web.endpoints.Endpoint;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import static org.finos.waltz.web.WebUtilities.mkPath;
import static org.finos.waltz.web.endpoints.EndpointUtilities.getForList;


@Service
public class PermissionViewEndpoint implements Endpoint {

private static final String BASE_URL = mkPath("api", "permission-view");
private final PermissionViewService permissionViewService;


@Autowired
public PermissionViewEndpoint(PermissionViewService permissionViewService) {
this.permissionViewService = permissionViewService;
}


@Override
public void register() {
getForList(BASE_URL, (req, resp) -> permissionViewService.findAll());
}

}