diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AbstractRoleAssignmentPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AbstractRoleAssignmentPanel.java index 154bc354350..9fc06c3e323 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AbstractRoleAssignmentPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AbstractRoleAssignmentPanel.java @@ -231,6 +231,25 @@ public void populateItem(Item, String>(createStringResource("AssignmentType.tenant")){ + private static final long serialVersionUID = 1L; + + @Override + public void populateItem(Item>> item, String componentId, + final IModel> rowModel) { + item.add(new Label(componentId, getTenantLabelModel(rowModel.getObject()))); + } + }); + columns.add(new AbstractColumn, String>(createStringResource("AssignmentType.orgReferenceShorten")){ + private static final long serialVersionUID = 1L; + + @Override + public void populateItem(Item>> item, String componentId, + final IModel> rowModel) { + item.add(new Label(componentId, getOrgRefLabelModel(rowModel.getObject()))); + } + }); + return columns; } @@ -308,30 +327,6 @@ protected AbstractAssignmentDetailsPanel createDetailsPanel(String idAssignmentD return new AbstractRoleAssignmentDetailsPanel(ID_ASSIGNMENT_DETAILS, form, model); } - @Override - protected List, String>> initBasicColumns() { - List, String>> columns = super.initBasicColumns(); - columns.add(new AbstractColumn, String>(createStringResource("AssignmentType.tenant")){ - private static final long serialVersionUID = 1L; - - @Override - public void populateItem(Item>> item, String componentId, - final IModel> rowModel) { - item.add(new Label(componentId, getTenantLabelModel(rowModel.getObject()))); - } - }); - columns.add(new AbstractColumn, String>(createStringResource("AssignmentType.orgReferenceShorten")){ - private static final long serialVersionUID = 1L; - - @Override - public void populateItem(Item>> item, String componentId, - final IModel> rowModel) { - item.add(new Label(componentId, getOrgRefLabelModel(rowModel.getObject()))); - } - }); - return columns; - } - private IModel getTenantLabelModel(ContainerValueWrapper assignmentContainer){ if (assignmentContainer == null || assignmentContainer.getContainerValue() == null){ return Model.of(""); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.java index 68ca698b1e4..5d020439caa 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.java @@ -224,7 +224,7 @@ protected AssignmentsTabStorage getAssignmentsStorage() { protected abstract ObjectQuery createObjectQuery(); - protected List, String>> initBasicColumns() { + private List, String>> initBasicColumns() { List, String>> columns = new ArrayList<>(); columns.add(new CheckBoxHeaderColumn<>()); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducedEntitlementsPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducedEntitlementsPanel.java index a30b6f77094..81fe813e430 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducedEntitlementsPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducedEntitlementsPanel.java @@ -1,19 +1,33 @@ package com.evolveum.midpoint.web.component.assignment; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.prism.query.AndFilter; import com.evolveum.midpoint.prism.query.ObjectFilter; import com.evolveum.midpoint.prism.query.ObjectPaging; import com.evolveum.midpoint.prism.query.ObjectQuery; import com.evolveum.midpoint.prism.query.builder.QueryBuilder; import com.evolveum.midpoint.schema.constants.ObjectTypes; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.web.component.form.Form; import com.evolveum.midpoint.web.component.prism.ContainerValueWrapper; import com.evolveum.midpoint.web.component.prism.ContainerWrapper; +import com.evolveum.midpoint.web.component.prism.ValueStatus; import com.evolveum.midpoint.web.session.AssignmentsTabStorage; import com.evolveum.midpoint.web.session.UserProfileStorage; +import com.evolveum.midpoint.web.util.ExpressionUtil; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; +import org.apache.commons.lang.StringUtils; +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.markup.html.basic.Label; +import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import javax.jws.WebParam; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -24,6 +38,9 @@ public class InducedEntitlementsPanel extends InducementsPanel{ private static final long serialVersionUID = 1L; + private static final Trace LOGGER = TraceManager.getTrace(InducedEntitlementsPanel.class); + private static final String DOT_CLASS = InducedEntitlementsPanel.class.getName() + "."; + private static final String OPERATION_LOAD_SHADOW_DISPLAY_NAME = DOT_CLASS + "loadShadowDisplayName"; public InducedEntitlementsPanel(String id, IModel> inducementContainerWrapperModel){ super(id, inducementContainerWrapperModel); @@ -49,6 +66,40 @@ private AssignmentsTabStorage getInducedEntitlementsTabStorage(){ return getParentPage().getSessionStorage().getInducedEntitlementsTabStorage(); } + @Override + protected List, String>> initColumns() { + List, String>> columns = new ArrayList<>(); + columns.add(new AbstractColumn, String>(createStringResource("ConstructionType.kind")){ + private static final long serialVersionUID = 1L; + + @Override + public void populateItem(Item>> item, String componentId, + final IModel> rowModel) { + item.add(new Label(componentId, getKindLabelModel(rowModel.getObject()))); + } + }); + columns.add(new AbstractColumn, String>(createStringResource("ConstructionType.intent")){ + private static final long serialVersionUID = 1L; + + @Override + public void populateItem(Item>> item, String componentId, + final IModel> rowModel) { + item.add(new Label(componentId, getIntentLabelModel(rowModel.getObject()))); + } + }); + columns.add(new AbstractColumn, String>(createStringResource("ConstructionType.association")){ + private static final long serialVersionUID = 1L; + + @Override + public void populateItem(Item>> item, String componentId, + final IModel> rowModel) { + item.add(new Label(componentId, getAssociationLabelModel(rowModel.getObject()))); + } + }); + + return columns; + } + @Override protected ObjectQuery createObjectQuery() { ObjectQuery query = super.createObjectQuery(); @@ -91,4 +142,84 @@ protected boolean isRelationVisible() { protected List getObjectTypesList(){ return Arrays.asList(ObjectTypes.RESOURCE); } + + private IModel getKindLabelModel(ContainerValueWrapper assignmentWrapper){ + if (assignmentWrapper == null){ + return Model.of(""); + } + AssignmentType assignment = assignmentWrapper.getContainerValue().asContainerable(); + ConstructionType construction = assignment.getConstruction(); + if (construction == null || construction.getKind() == null){ + return Model.of(""); + } + return WebComponentUtil.createLocalizedModelForEnum(construction.getKind(), InducedEntitlementsPanel.this); + + } + + private IModel getIntentLabelModel(ContainerValueWrapper assignmentWrapper){ + if (assignmentWrapper == null){ + return Model.of(""); + } + AssignmentType assignment = assignmentWrapper.getContainerValue().asContainerable(); + ConstructionType construction = assignment.getConstruction(); + if (construction == null || construction.getIntent() == null){ + return Model.of(""); + } + return Model.of(construction.getIntent()); + + } + + private IModel getAssociationLabelModel(ContainerValueWrapper assignmentWrapper){ + if (assignmentWrapper == null){ + return Model.of(""); + } + AssignmentType assignment = assignmentWrapper.getContainerValue().asContainerable(); + ConstructionType construction = assignment.getConstruction(); + if (construction == null || construction.getAssociation() == null){ + return Model.of(""); + } + StringBuilder sb = new StringBuilder(); + for (ResourceObjectAssociationType association : construction.getAssociation()){ + if (association.getOutbound() == null || association.getOutbound().getExpression() == null){ + continue; + } + ObjectReferenceType shadowRefValue = ExpressionUtil.getShadowRefValue(association.getOutbound().getExpression()); + if (shadowRefValue == null || StringUtils.isEmpty(shadowRefValue.getOid())){ + continue; + } + String shadowDisplayName = WebComponentUtil.getDisplayNameOrName(shadowRefValue, getPageBase(), OPERATION_LOAD_SHADOW_DISPLAY_NAME); + if (sb.length() == 0){ + sb.append(createStringResource("ExpressionValuePanel.shadowRefValueTitle").getString() + ":"); + } + if (StringUtils.isNotEmpty(shadowDisplayName)){ + sb.append("\n"); + sb.append(shadowDisplayName); + } + } + return Model.of(sb.toString()); + + } + + @Override + protected List> postSearch(List> assignments) { + //TODO fix post search filtering + List> filteredAssignments = new ArrayList<>(); + assignments.forEach(assignmentWrapper -> { + AssignmentType assignment = assignmentWrapper.getContainerValue().asContainerable(); + if (assignment.getConstruction() != null && assignment.getConstruction().getAssociation() != null){ + List associations = assignment.getConstruction().getAssociation(); + associations.forEach(association -> { + if (association.getOutbound() != null && association.getOutbound().getExpression() != null){ + ObjectReferenceType shadowRef = ExpressionUtil.getShadowRefValue(association.getOutbound().getExpression()); + if (shadowRef != null || (shadowRef == null && ValueStatus.ADDED.equals(assignmentWrapper.getStatus()))){ + filteredAssignments.add(assignmentWrapper); + return; + } + } + }); + } + }); +// return filteredAssignments; + return assignments; + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/SelectableDataTable.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/SelectableDataTable.java index 1bcfe9e89a3..c7779144282 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/SelectableDataTable.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/SelectableDataTable.java @@ -60,7 +60,7 @@ public SelectableRowItem(String id, int index, IModel model) { @Override protected Item> newCellItem(String id, int index, IModel> model) { Item item = super.newCellItem(id, index, model); - item.add(new AttributeModifier("style", "max-width: 250px; word-wrap: break-word;")); + item.add(new AttributeModifier("style", "word-wrap: break-word;")); return item; }