From b236f4f6b73d964b3d728c4e11bccb4fa70fb0e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Va=C5=88=C3=A1=C4=8Dek?= Date: Fri, 22 Feb 2019 09:36:51 +0100 Subject: [PATCH] adding a tooltip with assignemntParent for indirect assignment column in popup dialog "View direct & indirect assignments" --- .../midpoint/web/page/admin/PageAdminFocus.java | 16 ++++++++-------- .../admin/users/component/AssignmentInfoDto.java | 12 ++++++++++++ .../users/component/AssignmentsInfoDialog.java | 6 ++++++ .../resources/localization/Midpoint.properties | 1 + .../localization/Midpoint_cs.properties | 1 + .../localization/Midpoint_en.properties | 1 + .../model/api/context/EvaluatedConstruction.java | 4 +++- .../impl/lens/EvaluatedConstructionImpl.java | 11 +++++++++-- 8 files changed, 41 insertions(+), 11 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminFocus.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminFocus.java index a27d66f937e..39ae9f9f218 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminFocus.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminFocus.java @@ -19,6 +19,7 @@ import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; import com.evolveum.midpoint.model.api.ModelExecuteOptions; +import com.evolveum.midpoint.model.api.context.AssignmentPath; import com.evolveum.midpoint.model.api.context.EvaluatedAssignment; import com.evolveum.midpoint.model.api.context.EvaluatedAssignmentTarget; import com.evolveum.midpoint.model.api.context.EvaluatedConstruction; @@ -848,16 +849,13 @@ public List showAllAssignmentsPerformed(AjaxRequestTarget aja private AssignmentInfoDto createAssignmentsPreviewDto(EvaluatedAssignmentTarget evaluatedAbstractRole, Task task, OperationResult result) { return createAssignmentsPreviewDto(evaluatedAbstractRole.getTarget(), evaluatedAbstractRole.isDirectlyAssigned(), - evaluatedAbstractRole.getAssignment(), task, result); + evaluatedAbstractRole.getAssignmentPath(), evaluatedAbstractRole.getAssignment(), task, result); } - protected AssignmentInfoDto createAssignmentsPreviewDto(ObjectReferenceType reference, - Task task, OperationResult result) { + protected AssignmentInfoDto createAssignmentsPreviewDto(ObjectReferenceType reference, Task task, OperationResult result) { PrismObject targetObject = WebModelServiceUtils.resolveReferenceNoFetch(reference, PageAdminFocus.this, task, result); - - return createAssignmentsPreviewDto(targetObject, true, - null, task, result); + return createAssignmentsPreviewDto(targetObject, true, null, null, task, result); } protected AssignmentInfoDto createDelegableAssignmentsPreviewDto(AssignmentType assignment, Task task, OperationResult result) { @@ -872,7 +870,7 @@ protected AssignmentInfoDto createDelegableAssignmentsPreviewDto(AssignmentType isDelegable = targetObject.asObjectable().isDelegable(); } if (Boolean.TRUE.equals(isDelegable)) { - return createAssignmentsPreviewDto(targetObject, true, assignment, task, result); + return createAssignmentsPreviewDto(targetObject, true, null, assignment, task, result); } } } @@ -880,7 +878,7 @@ protected AssignmentInfoDto createDelegableAssignmentsPreviewDto(AssignmentType } private AssignmentInfoDto createAssignmentsPreviewDto(PrismObject targetObject, - boolean isDirectlyAssigned, AssignmentType assignment, + boolean isDirectlyAssigned, AssignmentPath assignmentPath, AssignmentType assignment, Task task, OperationResult result) { AssignmentInfoDto dto = new AssignmentInfoDto(); dto.setTargetOid(targetObject.getOid()); @@ -889,6 +887,7 @@ private AssignmentInfoDto createAssignmentsPreviewDto(PrismObject implements private String targetDescription; private Class targetClass; private boolean direct; // true if directly assigned; used only in some contexts + private ObjectType assignmentParent; private QName targetType; // for resource assignments private ShadowKindType kind; @@ -107,6 +109,16 @@ public void setDirect(boolean direct) { this.direct = direct; } + public void setAssignmentParent(AssignmentPath assignmentPath) { + if (assignmentPath.size() > 1 ) { + assignmentParent = assignmentPath.last().getSource(); + } + } + + public ObjectType getAssignmentParent() { + return assignmentParent; + } + public ShadowKindType getKind() { return kind; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssignmentsInfoDialog.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssignmentsInfoDialog.java index 7a20c6a0892..c4044c908ba 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssignmentsInfoDialog.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssignmentsInfoDialog.java @@ -33,6 +33,7 @@ import com.evolveum.midpoint.web.page.admin.users.PageOrgUnit; import com.evolveum.midpoint.web.util.ObjectTypeGuiDescriptor; import com.evolveum.midpoint.web.util.OnePageParameterEncoder; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;; import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType; @@ -54,6 +55,7 @@ import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; +import org.apache.wicket.AttributeModifier; /** * Abstract superclass for dialogs that display a list of assignments. @@ -155,6 +157,10 @@ public String getObject() { createStringResource("AssignmentPreviewDialog.type.indirect").getString(); } })); + ObjectType assignmentParent = rowModel.getObject().getAssignmentParent(); + if (assignmentParent != null) { + cellItem.add(AttributeModifier.replace("title", createStringResource("AssignmentPreviewDialog.tooltip.indirect.parent").getString() + ": " + assignmentParent.getName())); + } } }); } diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint.properties b/gui/admin-gui/src/main/resources/localization/Midpoint.properties index ab21e53a0b7..3d2b6ace63d 100755 --- a/gui/admin-gui/src/main/resources/localization/Midpoint.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint.properties @@ -110,6 +110,7 @@ AssignmentPreviewDialog.label=View direct & indirect assignments AssignmentPreviewDialog.delegationPreviewLabel=Limit privileges AssignmentPreviewDialog.type.direct=Direct AssignmentPreviewDialog.type.indirect=Indirect +AssignmentPreviewDialog.tooltip.indirect.parent=Parent AssignmentTablePanel.menu.assign=Assign AssignmentTablePanel.menu.assignOrg=Assign Org. AssignmentTablePanel.menu.assignOrg.noorgs=No organization structure defined. diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties index 369b3b26cf7..f55b11e8182 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties @@ -110,6 +110,7 @@ AssignmentPreviewDialog.label=Zobrazit přímá i nepřímá přiřazení AssignmentPreviewDialog.delegationPreviewLabel=Omezit výsady AssignmentPreviewDialog.type.direct=Přímé AssignmentPreviewDialog.type.indirect=Nepřímé +AssignmentPreviewDialog.tooltip.indirect.parent=Předchůdce AssignmentTablePanel.menu.assign=Přidat přiřazení AssignmentTablePanel.menu.assignOrg=Přiřadit organizaci AssignmentTablePanel.menu.assignOrg.noorgs=Organizační struktura není definovaná. diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_en.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_en.properties index 77de9d5eb90..4fe0b069fee 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_en.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_en.properties @@ -110,6 +110,7 @@ AssignmentPreviewDialog.label=View direct & indirect assignments AssignmentPreviewDialog.delegationPreviewLabel=Limit privileges AssignmentPreviewDialog.type.direct=Direct AssignmentPreviewDialog.type.indirect=Indirect +AssignmentPreviewDialog.tooltip.indirect.parent=Parent AssignmentTablePanel.menu.assign=Assign AssignmentTablePanel.menu.assignOrg=Assign Org. AssignmentTablePanel.menu.assignOrg.noorgs=No organization structure defined. diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedConstruction.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedConstruction.java index d41b8e2ff4b..d107b6b21aa 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedConstruction.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedConstruction.java @@ -33,6 +33,8 @@ public interface EvaluatedConstruction extends DebugDumpable { String getIntent(); boolean isDirectlyAssigned(); - + + AssignmentPath getAssignmentPath(); + boolean isWeak(); } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/EvaluatedConstructionImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/EvaluatedConstructionImpl.java index 39c77e6b3ba..58576703d78 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/EvaluatedConstructionImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/EvaluatedConstructionImpl.java @@ -16,6 +16,7 @@ package com.evolveum.midpoint.model.impl.lens; +import com.evolveum.midpoint.model.api.context.AssignmentPath; import com.evolveum.midpoint.model.api.context.EvaluatedConstruction; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.schema.result.OperationResult; @@ -24,7 +25,6 @@ import com.evolveum.midpoint.util.exception.ObjectNotFoundException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentHolderType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowKindType; @@ -37,13 +37,15 @@ public class EvaluatedConstructionImpl implements EvaluatedConstruction { final private ShadowKindType kind; final private String intent; final private boolean directlyAssigned; + final private AssignmentPath assignmentPath; final private boolean weak; public EvaluatedConstructionImpl(Construction construction, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException { resource = construction.getResource(task, result).asPrismObject(); kind = construction.getKind(); intent = construction.getIntent(); - directlyAssigned = construction.getAssignmentPath() == null || construction.getAssignmentPath().size() == 1; + assignmentPath = construction.getAssignmentPath(); + directlyAssigned = assignmentPath == null || assignmentPath.size() == 1; weak = construction.isWeak(); } @@ -67,6 +69,11 @@ public boolean isDirectlyAssigned() { return directlyAssigned; } + @Override + public AssignmentPath getAssignmentPath() { + return assignmentPath; + } + @Override public boolean isWeak() { return weak;