From 3e9d35e3c48ebf32b95d8066f46f15a510fded37 Mon Sep 17 00:00:00 2001 From: kate Date: Sat, 18 Aug 2018 03:42:15 +0200 Subject: [PATCH] MID-4767 Assignment table: identifier column --- .../AbstractRoleAssignmentPanel.java | 215 +++++++++++------- .../localization/Midpoint.properties | 1 + 2 files changed, 128 insertions(+), 88 deletions(-) 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 5554501c755..afab9ca7a92 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 @@ -23,7 +23,9 @@ import javax.xml.namespace.QName; +import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; import com.evolveum.midpoint.prism.PrismContainerValue; +import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.schema.constants.ObjectTypes; import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.schema.result.OperationResult; @@ -32,6 +34,7 @@ import com.evolveum.midpoint.web.page.admin.users.component.AssignmentInfoDto; import com.evolveum.midpoint.web.page.admin.users.component.AllAssignmentsPreviewDialog; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; +import org.apache.commons.lang.StringUtils; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; @@ -66,16 +69,19 @@ */ public class AbstractRoleAssignmentPanel extends AssignmentPanel { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; private static final String ID_RELATION = "relation"; private static final String ID_RELATION_CONTAINER = "relationContainer"; private static final String ID_SHOW_ALL_ASSIGNMENTS_BUTTON = "showAllAssignmentsButton"; + protected static final String DOT_CLASS = AbstractRoleAssignmentPanel.class.getName() + "."; + private static final String OPERATION_LOAD_TARGET_REF_OBJECT = DOT_CLASS + "loadAssignmentTargetRefObject"; + private RelationTypes relationValue = null; public AbstractRoleAssignmentPanel(String id, IModel> assignmentContainerWrapperModel){ - super(id, assignmentContainerWrapperModel); + super(id, assignmentContainerWrapperModel); } protected void initCustomLayout(WebMarkupContainer assignmentsContainer){ @@ -94,7 +100,7 @@ public boolean isVisible() { }); assignmentsContainer.addOrReplace(relationContainer); - DropDownChoicePanel relation = WebComponentUtil.createEnumPanel(RelationTypes.class, ID_RELATION, + DropDownChoicePanel relation = WebComponentUtil.createEnumPanel(RelationTypes.class, ID_RELATION, WebComponentUtil.createReadonlyModelFromEnum(RelationTypes.class), new IModel() { @Override @@ -118,7 +124,7 @@ public void detach() { @Override protected void onUpdate(AjaxRequestTarget target) { - refreshTable(target); + refreshTable(target); } }); relation.setOutputMarkupId(true); @@ -128,9 +134,9 @@ protected void onUpdate(AjaxRequestTarget target) { AjaxButton showAllAssignmentsButton = new AjaxButton(ID_SHOW_ALL_ASSIGNMENTS_BUTTON, createStringResource("AssignmentTablePanel.menu.showAllAssignments")) { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - @Override + @Override public void onClick(AjaxRequestTarget ajaxRequestTarget) { showAllAssignments(ajaxRequestTarget); } @@ -148,7 +154,7 @@ public boolean isVisible(){ } private DropDownChoicePanel getRelationPanel() { - return (DropDownChoicePanel) getAssignmentContainer().get(ID_RELATION_CONTAINER).get(ID_RELATION); + return (DropDownChoicePanel) getAssignmentContainer().get(ID_RELATION_CONTAINER).get(ID_RELATION); } @@ -158,34 +164,34 @@ protected void showAllAssignments(AjaxRequestTarget target) { if (pageBase instanceof PageAdminFocus) { previewAssignmentsList = ((PageAdminFocus) pageBase).showAllAssignmentsPerformed(target); } else { - previewAssignmentsList = Collections.emptyList(); + previewAssignmentsList = Collections.emptyList(); } AllAssignmentsPreviewDialog assignmentsDialog = new AllAssignmentsPreviewDialog(pageBase.getMainPopupBodyId(), previewAssignmentsList, - pageBase); + pageBase); pageBase.showMainPopup(assignmentsDialog, target); } - @Override + @Override protected void newAssignmentClickPerformed(AjaxRequestTarget target) { - TypedAssignablePanel panel = new TypedAssignablePanel( - getPageBase().getMainPopupBodyId(), getDefaultNewAssignmentFocusType()) { + TypedAssignablePanel panel = new TypedAssignablePanel( + getPageBase().getMainPopupBodyId(), getDefaultNewAssignmentFocusType()) { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - @Override - protected void addPerformed(AjaxRequestTarget target, List selected, QName relation, ShadowKindType kind, String intent) { - super.addPerformed(target, selected, relation, kind, intent); - addSelectedAssignmentsPerformed(target, selected, relation, kind, intent); - } + @Override + protected void addPerformed(AjaxRequestTarget target, List selected, QName relation, ShadowKindType kind, String intent) { + super.addPerformed(target, selected, relation, kind, intent); + addSelectedAssignmentsPerformed(target, selected, relation, kind, intent); + } - @Override - protected List getObjectTypesList(){ - return AbstractRoleAssignmentPanel.this.getObjectTypesList(); - } + @Override + protected List getObjectTypesList(){ + return AbstractRoleAssignmentPanel.this.getObjectTypesList(); + } - }; - panel.setOutputMarkupId(true); - getPageBase().showMainPopup(panel, target); + }; + panel.setOutputMarkupId(true); + getPageBase().showMainPopup(panel, target); } protected Class getDefaultNewAssignmentFocusType(){ @@ -194,11 +200,11 @@ protected Class getDefaultNewAssignmentFocusType(){ protected void addSelectedAssignmentsPerformed(AjaxRequestTarget target, List assignmentsList, QName relation, ShadowKindType kind, String intent){ - if (assignmentsList == null || assignmentsList.isEmpty()){ - warn(getParentPage().getString("AssignmentTablePanel.message.noAssignmentSelected")); - target.add(getPageBase().getFeedbackPanel()); - return; - } + if (assignmentsList == null || assignmentsList.isEmpty()){ + warn(getParentPage().getString("AssignmentTablePanel.message.noAssignmentSelected")); + target.add(getPageBase().getFeedbackPanel()); + return; + } int assignmentsLimit = AssignmentsUtil.loadAssignmentsLimit(new OperationResult(OPERATION_LOAD_ASSIGNMENTS_LIMIT), getPageBase()); @@ -210,34 +216,34 @@ protected void addSelectedAssignmentsPerformed(AjaxReques } for (T object : assignmentsList){ - PrismContainerDefinition definition = getModelObject().getItem().getDefinition(); - PrismContainerValue newAssignment; - try { - newAssignment = definition.instantiate().createNewValue(); - ObjectReferenceType ref = ObjectTypeUtil.createObjectRef(object, relation); - AssignmentType assignmentType = newAssignment.asContainerable(); - if (ResourceType.class.equals(object.getClass())) { - ConstructionType constructionType = new ConstructionType(); - constructionType.setResourceRef(ref); - constructionType.setKind(kind); - constructionType.setIntent(intent); - assignmentType.setConstruction(constructionType); - } else { - assignmentType.setTargetRef(ref); - } - createNewAssignmentContainerValueWrapper(newAssignment); - refreshTable(target); - reloadSavePreviewButtons(target); - } catch (SchemaException e) { - getSession().error("Cannot create new assignment " + e.getMessage()); - target.add(getPageBase().getFeedbackPanel()); - target.add(this); - } - - } - - - } + PrismContainerDefinition definition = getModelObject().getItem().getDefinition(); + PrismContainerValue newAssignment; + try { + newAssignment = definition.instantiate().createNewValue(); + ObjectReferenceType ref = ObjectTypeUtil.createObjectRef(object, relation); + AssignmentType assignmentType = newAssignment.asContainerable(); + if (ResourceType.class.equals(object.getClass())) { + ConstructionType constructionType = new ConstructionType(); + constructionType.setResourceRef(ref); + constructionType.setKind(kind); + constructionType.setIntent(intent); + assignmentType.setConstruction(constructionType); + } else { + assignmentType.setTargetRef(ref); + } + createNewAssignmentContainerValueWrapper(newAssignment); + refreshTable(target); + reloadSavePreviewButtons(target); + } catch (SchemaException e) { + getSession().error("Cannot create new assignment " + e.getMessage()); + target.add(getPageBase().getFeedbackPanel()); + target.add(this); + } + + } + + + } protected void addSelectedAssignmentsPerformed(AjaxRequestTarget target, List assignmentsList, QName relation) { if (assignmentsList == null || assignmentsList.isEmpty()) { warn(getParentPage().getString("AssignmentTablePanel.message.noAssignmentSelected")); @@ -300,6 +306,15 @@ public void populateItem(Item, String>(createStringResource("AbstractRoleAssignmentPanel.identifierLabel")){ + private static final long serialVersionUID = 1L; + + @Override + public void populateItem(Item>> item, String componentId, + final IModel> rowModel) { + item.add(new Label(componentId, getIdentifierLabelModel(rowModel.getObject()))); + } + }); return columns; } @@ -332,17 +347,17 @@ protected void initPaging(){ getAssignmentsStorage().setPaging(ObjectPaging.createPaging(0, (int) getParentPage().getItemsPerPage(UserProfileStorage.TableId.ASSIGNMENTS_TAB_TABLE))); } - @Override - protected TableId getTableId() { - return UserProfileStorage.TableId.ASSIGNMENTS_TAB_TABLE; - } + @Override + protected TableId getTableId() { + return UserProfileStorage.TableId.ASSIGNMENTS_TAB_TABLE; + } - @Override - protected int getItemsPerPage() { - return (int) getParentPage().getItemsPerPage(UserProfileStorage.TableId.ASSIGNMENTS_TAB_TABLE); - } + @Override + protected int getItemsPerPage() { + return (int) getParentPage().getItemsPerPage(UserProfileStorage.TableId.ASSIGNMENTS_TAB_TABLE); + } - protected ObjectQuery createObjectQuery() { + protected ObjectQuery createObjectQuery() { QName relation = getRelation(); if (PrismConstants.Q_ANY.equals(relation)){ return QueryBuilder.queryFor(AssignmentType.class, getParentPage().getPrismContext()) @@ -357,7 +372,7 @@ protected ObjectQuery createObjectQuery() { .item(new ItemPath(AssignmentType.F_TARGET_REF)) .ref(SchemaConstants.ORG_DEPUTY) .endBlock() - .and() + .and() .not() .exists(AssignmentType.F_POLICY_RULE) .build(); @@ -367,40 +382,64 @@ protected ObjectQuery createObjectQuery() { .ref(relation) .build(); } - } + } - private QName getRelation() { - return relationValue == null ? PrismConstants.Q_ANY : relationValue.getRelation(); - } + private QName getRelation() { + return relationValue == null ? PrismConstants.Q_ANY : relationValue.getRelation(); + } - @Override - protected AbstractAssignmentDetailsPanel createDetailsPanel(String idAssignmentDetails, Form form, IModel> model) { - return new AbstractRoleAssignmentDetailsPanel(ID_ASSIGNMENT_DETAILS, form, model); - } + @Override + protected AbstractAssignmentDetailsPanel createDetailsPanel(String idAssignmentDetails, Form form, IModel> model) { + return new AbstractRoleAssignmentDetailsPanel(ID_ASSIGNMENT_DETAILS, form, model); + } private IModel getTenantLabelModel(ContainerValueWrapper assignmentContainer){ - if (assignmentContainer == null || assignmentContainer.getContainerValue() == null){ - return Model.of(""); + if (assignmentContainer == null || assignmentContainer.getContainerValue() == null){ + return Model.of(""); } - AssignmentType assignment = assignmentContainer.getContainerValue().asContainerable(); - return Model.of(WebComponentUtil.getReferencedObjectDisplayNamesAndNames(Arrays.asList(assignment.getTenantRef()), false)); + AssignmentType assignment = assignmentContainer.getContainerValue().asContainerable(); + return Model.of(WebComponentUtil.getReferencedObjectDisplayNamesAndNames(Arrays.asList(assignment.getTenantRef()), false)); } private IModel getOrgRefLabelModel(ContainerValueWrapper assignmentContainer){ - if (assignmentContainer == null || assignmentContainer.getContainerValue() == null){ - return Model.of(""); + if (assignmentContainer == null || assignmentContainer.getContainerValue() == null){ + return Model.of(""); } - AssignmentType assignment = assignmentContainer.getContainerValue().asContainerable(); - return Model.of(WebComponentUtil.getReferencedObjectDisplayNamesAndNames(Arrays.asList(assignment.getOrgRef()), false)); + AssignmentType assignment = assignmentContainer.getContainerValue().asContainerable(); + return Model.of(WebComponentUtil.getReferencedObjectDisplayNamesAndNames(Arrays.asList(assignment.getOrgRef()), false)); } - protected boolean isRelationVisible() { - return true; - } + private IModel getIdentifierLabelModel(ContainerValueWrapper assignmentContainer){ + if (assignmentContainer == null || assignmentContainer.getContainerValue() == null){ + return Model.of(""); + } + AssignmentType assignment = assignmentContainer.getContainerValue().asContainerable(); + if (assignment.getTargetRef() == null){ + return Model.of(""); + } + + PrismObject object = WebModelServiceUtils.loadObject(assignment.getTargetRef(), getPageBase(), + getPageBase().createSimpleTask(OPERATION_LOAD_TARGET_REF_OBJECT), new OperationResult(OPERATION_LOAD_TARGET_REF_OBJECT)); + if (object == null || !(object.asObjectable() instanceof AbstractRoleType)){ + return Model.of(""); + } + AbstractRoleType targetRefObject = (AbstractRoleType) object.asObjectable(); + if (StringUtils.isNotEmpty(targetRefObject.getIdentifier())){ + return Model.of(targetRefObject.getIdentifier()); + } + if (targetRefObject.getDisplayName() != null && !targetRefObject.getName().getOrig().equals(targetRefObject.getDisplayName().getOrig())){ + return Model.of(targetRefObject.getName().getOrig()); + } + return Model.of(""); + } + + protected boolean isRelationVisible() { + return true; + } - protected List getObjectTypesList(){ + protected List getObjectTypesList(){ return WebComponentUtil.createAssignableTypesList(); } } diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint.properties b/gui/admin-gui/src/main/resources/localization/Midpoint.properties index 79d3346a299..36812e1f735 100755 --- a/gui/admin-gui/src/main/resources/localization/Midpoint.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint.properties @@ -4023,6 +4023,7 @@ AssociationDetailsPanel.AssociationHeader=Association RoleRelationSelectionPanel.select.relation=Select relations to process operation.com.evolveum.midpoint.web.page.admin.workflow.PageWorkItem.delegateWorkItem=Delegate work item AbstractRoleAssignmentPanel.relationLabel=Relation +AbstractRoleAssignmentPanel.identifierLabel=Identifier AbstractRoleMainPanel.inducedEntitlements=Induced entitlements CertCampaignStateFilter.ALL=All campaign states CertCampaignStateFilter.NOT_CLOSED=Not closed