diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/PageRole.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/PageRole.java index 3f18ba86510..4ae23c535c8 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/PageRole.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/PageRole.java @@ -16,11 +16,11 @@ package com.evolveum.midpoint.web.page.admin.roles; import com.evolveum.midpoint.model.api.ModelExecuteOptions; +import com.evolveum.midpoint.prism.PrismContainerDefinition; import com.evolveum.midpoint.prism.PrismObject; -import com.evolveum.midpoint.prism.*; +import com.evolveum.midpoint.prism.PrismObjectDefinition; import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.prism.path.ItemPath; -import com.evolveum.midpoint.prism.query.ObjectQuery; import com.evolveum.midpoint.prism.schema.SchemaRegistry; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.security.api.AuthorizationConstants; @@ -30,15 +30,18 @@ import com.evolveum.midpoint.web.application.AuthorizationAction; import com.evolveum.midpoint.web.application.PageDescriptor; import com.evolveum.midpoint.web.component.AjaxSubmitButton; -import com.evolveum.midpoint.web.component.assignment.*; +import com.evolveum.midpoint.web.component.assignment.AssignmentTableDto; +import com.evolveum.midpoint.web.component.assignment.AssignmentTablePanel; import com.evolveum.midpoint.web.component.form.*; import com.evolveum.midpoint.web.component.form.multivalue.GenericMultiValueLabelEditPanel; import com.evolveum.midpoint.web.component.form.multivalue.MultiValueChoosePanel; import com.evolveum.midpoint.web.component.prism.*; import com.evolveum.midpoint.web.component.progress.ProgressReporter; import com.evolveum.midpoint.web.component.progress.ProgressReportingAwarePage; -import com.evolveum.midpoint.web.component.util.*; -import com.evolveum.midpoint.web.page.PageBase; +import com.evolveum.midpoint.web.component.util.LoadableModel; +import com.evolveum.midpoint.web.component.util.ObjectWrapperUtil; +import com.evolveum.midpoint.web.component.util.PrismPropertyModel; +import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.web.page.admin.configuration.component.ChooseTypeDialog; import com.evolveum.midpoint.web.page.admin.roles.component.MultiplicityPolicyDialog; import com.evolveum.midpoint.web.page.admin.roles.component.UserOrgReferenceChoosePanel; @@ -48,7 +51,6 @@ import com.evolveum.midpoint.web.util.WebMiscUtil; import com.evolveum.midpoint.web.util.WebModelUtils; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; - import org.apache.commons.lang.StringUtils; import org.apache.wicket.AttributeModifier; import org.apache.wicket.RestartResponseException; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageUser.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageUser.java index bdc4b2ad26b..10f4355973c 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageUser.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageUser.java @@ -1023,7 +1023,7 @@ protected void addPerformed(AjaxRequestTarget target, List selected) }); add(window); - ModalWindow assignmentPreviewPopup = new AssignmentPreviewDialog(MODAL_ID_ASSIGNMENTS_PREVIEW, null); + ModalWindow assignmentPreviewPopup = new AssignmentPreviewDialog(MODAL_ID_ASSIGNMENTS_PREVIEW, null, null); add(assignmentPreviewPopup); } @@ -1412,7 +1412,7 @@ private void recomputeAssignmentsPerformed(AjaxRequestTarget target){ ModelContext modelContext = getModelInteractionService().previewChanges(WebMiscUtil.createDeltaCollection(delta), null, task, result); DeltaSetTriple evaluatedAssignmentTriple = modelContext.getEvaluatedAssignmentTriple(); - Collection evaluatedAssignments = evaluatedAssignmentTriple.getZeroSet(); + Collection evaluatedAssignments = evaluatedAssignmentTriple.getNonNegativeValues(); if(evaluatedAssignments.isEmpty()){ info(getString("pageUser.message.noAssignmentsAvailable")); @@ -1420,16 +1420,20 @@ private void recomputeAssignmentsPerformed(AjaxRequestTarget target){ return; } - EvaluatedAssignment evaluatedAssignment = evaluatedAssignments.iterator().next(); - DeltaSetTriple rolesTriple = evaluatedAssignment.getRoles(); - Collection evaluatedRoles = rolesTriple.getZeroSet(); + List directAssignmentsOids = new ArrayList<>(); + for(EvaluatedAssignment assignment: evaluatedAssignments){ + directAssignmentsOids.add(assignment.getTarget().getOid()); - for(EvaluatedAbstractRole role: evaluatedRoles){ - assignments.add(role.getRole().asObjectable()); + DeltaSetTriple rolesTriple = assignment.getRoles(); + Collection evaluatedRoles = rolesTriple.getNonNegativeValues(); + + for(EvaluatedAbstractRole role: evaluatedRoles){ + assignments.add(role.getRole().asObjectable()); + } } AssignmentPreviewDialog dialog = (AssignmentPreviewDialog) get(MODAL_ID_ASSIGNMENTS_PREVIEW); - dialog.updateData(target, assignments); + dialog.updateData(target, assignments, directAssignmentsOids); dialog.show(target); } catch (Exception e) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssignmentPreviewDialog.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssignmentPreviewDialog.java index 18f460928e0..5f5b0e03c9f 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssignmentPreviewDialog.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssignmentPreviewDialog.java @@ -18,19 +18,34 @@ import com.evolveum.midpoint.web.component.AjaxButton; import com.evolveum.midpoint.web.component.data.TablePanel; +import com.evolveum.midpoint.web.component.data.column.IconColumn; import com.evolveum.midpoint.web.component.data.column.LinkColumn; import com.evolveum.midpoint.web.component.util.ListDataProvider; import com.evolveum.midpoint.web.component.util.LoadableModel; import com.evolveum.midpoint.web.page.PageBase; +import com.evolveum.midpoint.web.page.admin.resources.PageResourceWizard; +import com.evolveum.midpoint.web.page.admin.roles.PageRole; +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; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; +import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; +import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn; import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.repeater.Item; +import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; import org.apache.wicket.model.StringResourceModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; import java.util.ArrayList; import java.util.List; @@ -44,11 +59,13 @@ public class AssignmentPreviewDialog extends ModalWindow{ private static final String ID_BUTTON_CANCEL = "cancelButton"; private boolean initialized; + private List directAssignments; private IModel> data; - public AssignmentPreviewDialog(String id, final List data){ + public AssignmentPreviewDialog(String id, final List data, List directAssignments){ super(id); + this.directAssignments = directAssignments; this.data = new LoadableModel>(false) { @Override @@ -61,7 +78,7 @@ protected List load() { showUnloadConfirmation(false); setCssClassName(ModalWindow.CSS_CLASS_GRAY); setCookieName(AssignmentPreviewDialog.class.getSimpleName() + ((int) (Math.random() * 100))); - setInitialWidth(500); + setInitialWidth(650); setInitialHeight(500); setWidthUnit("px"); @@ -69,7 +86,8 @@ protected List load() { setContent(content); } - public void updateData(AjaxRequestTarget target, List newData){ + public void updateData(AjaxRequestTarget target, List newData, List directAssignments){ + this.directAssignments = directAssignments; data.setObject(newData); target.add(get(getContentId() + ":" + ID_TABLE)); } @@ -95,7 +113,7 @@ protected void onBeforeRender(){ } public void initLayout(WebMarkupContainer content){ - List> columns = initColumns(); + List> columns = initColumns(); ListDataProvider provider = new ListDataProvider(getPageBase(), data); TablePanel table = new TablePanel<>(ID_TABLE, provider, columns); @@ -113,28 +131,63 @@ public void onClick(AjaxRequestTarget ajaxRequestTarget) { content.add(cancelButton); } - private List> initColumns(){ - List> columns = new ArrayList<>(); + private List> initColumns(){ + List> columns = new ArrayList<>(); - IColumn column = new LinkColumn(createStringResource("AssignmentPreviewDialog.column.name"), "name"){ + columns.add(new LinkColumn(createStringResource("AssignmentPreviewDialog.column.name"), "name"){ @Override - public void onClick(AjaxRequestTarget target, IModel rowModel){ - RoleType role = rowModel.getObject(); + public void onClick(AjaxRequestTarget target, IModel rowModel){ + ObjectType role = rowModel.getObject(); chooseOperationPerformed(target, role); } + }); - }; - columns.add(column); + columns.add(new IconColumn(createStringResource("")) { + + @Override + protected IModel createIconModel(IModel rowModel) { + ObjectType object = rowModel.getObject(); + ObjectTypeGuiDescriptor guiDescriptor = ObjectTypeGuiDescriptor.getDescriptor(object.getClass()); + + String icon = guiDescriptor != null ? guiDescriptor.getIcon() : ObjectTypeGuiDescriptor.ERROR_ICON; + + return new Model<>(icon); + } + }); - column = new PropertyColumn(createStringResource("AssignmentPreviewDialog.column.description"), "description"); - columns.add(column); + columns.add(new AbstractColumn(createStringResource("Type")) { + + @Override + public void populateItem(Item> cellItem, String componentId, final IModel rowModel) { + cellItem.add(new Label(componentId, new AbstractReadOnlyModel() { + + @Override + public String getObject() { + return directAssignments.contains(rowModel.getObject().getOid()) ? + createStringResource("AssignmentPreviewDialog.type.direct").getString() : + createStringResource("AssignmentPreviewDialog.type.indirect").getObject(); + } + })); + } + }); + + columns.add(new PropertyColumn(createStringResource("AssignmentPreviewDialog.column.description"), "description")); return columns; } private void chooseOperationPerformed(AjaxRequestTarget target, ObjectType object){ -// TODO + PageParameters parameters = new PageParameters(); + parameters.add(OnePageParameterEncoder.PARAMETER, object.getOid()); + + if(object.getClass().equals(RoleType.class)){ + setResponsePage(PageRole.class, parameters); + } else if(object.getClass().equals(ResourceType.class)){ + setResponsePage(PageResourceWizard.class, parameters); + } else if(object.getClass().equals(OrgType.class)){ + setResponsePage(PageOrgUnit.class, parameters); + } } private void cancelPerformed(AjaxRequestTarget target) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssignmentPreviewDialog.properties b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssignmentPreviewDialog.properties index 9548e1a20ce..06adace88d1 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssignmentPreviewDialog.properties +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssignmentPreviewDialog.properties @@ -17,4 +17,6 @@ AssignmentPreviewDialog.label=View direct & indirect assignments AssignmentPreviewDialog.button.cancel=Cancel AssignmentPreviewDialog.column.name=Name -AssignmentPreviewDialog.column.description=Description \ No newline at end of file +AssignmentPreviewDialog.column.description=Description +AssignmentPreviewDialog.type.direct=Direct +AssignmentPreviewDialog.type.indirect=Indirect \ No newline at end of file