diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java index 3f503d1e85f..99fcc90a2e4 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java @@ -581,9 +581,13 @@ public static DropDownChoicePanel createEnumPanel(Class clazz, } public static DropDownChoicePanel createEnumPanel(Class clazz, String id, final IModel model, final Component component, boolean allowNull) { - // final Class clazz = model.getObject().getClass(); - final Object o = model.getObject(); - return new DropDownChoicePanel(id, model, WebComponentUtil.createReadonlyModelFromEnum(clazz), + return createEnumPanel(clazz, id, WebComponentUtil.createReadonlyModelFromEnum(clazz), + model, component, allowNull ); + } + + public static DropDownChoicePanel createEnumPanel(Class clazz, String id, + IModel> choicesList, final IModel model, final Component component, boolean allowNull) { + return new DropDownChoicePanel(id, model, choicesList, new IChoiceRenderer() { @Override diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentCatalogPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentCatalogPanel.java index 36af0d48a4b..cf2505c0297 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentCatalogPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentCatalogPanel.java @@ -19,18 +19,11 @@ import com.evolveum.midpoint.gui.api.component.ObjectBrowserPanel; import com.evolveum.midpoint.gui.api.model.LoadableModel; import com.evolveum.midpoint.gui.api.page.PageBase; -import com.evolveum.midpoint.gui.api.util.WebComponentUtil; -import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; import com.evolveum.midpoint.model.api.ModelInteractionService; import com.evolveum.midpoint.model.api.RoleSelectionSpecification; -import com.evolveum.midpoint.model.api.context.*; -import com.evolveum.midpoint.prism.PrismContainerDefinition; import com.evolveum.midpoint.prism.PrismObject; -import com.evolveum.midpoint.prism.delta.DeltaSetTriple; -import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.prism.query.*; import com.evolveum.midpoint.schema.result.OperationResult; -import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.LoggingUtils; @@ -46,18 +39,14 @@ import com.evolveum.midpoint.web.component.util.SelectableBean; import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.web.page.admin.orgs.OrgTreePanel; -import com.evolveum.midpoint.web.page.admin.users.dto.TreeStateSet; import com.evolveum.midpoint.web.page.admin.users.dto.UserDtoStatus; -import com.evolveum.midpoint.web.page.self.PageAssignmentShoppingKart; import com.evolveum.midpoint.web.page.self.PageAssignmentsList; -import com.evolveum.midpoint.web.page.self.dto.AssignmentConflictDto; import com.evolveum.midpoint.web.page.self.dto.AssignmentViewType; import com.evolveum.midpoint.web.security.SecurityUtils; import com.evolveum.midpoint.web.session.OrgTreeStateStorage; import com.evolveum.midpoint.web.session.SessionStorage; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang3.EnumUtils; import org.apache.wicket.ajax.AjaxChannel; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.attributes.AjaxRequestAttributes; @@ -72,7 +61,6 @@ import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.StringResourceModel; -import org.apache.wicket.model.util.ListModel; import javax.xml.namespace.QName; import java.util.*; @@ -83,11 +71,11 @@ public class AssignmentCatalogPanel extends BasePanel { private static final long serialVersionUID = 1L; - private static String ID_TREE_PANEL_CONTAINER = "treePanelContainer"; - private static String ID_TREE_PANEL = "treePanel"; - private static String ID_CATALOG_ITEMS_PANEL_CONTAINER = "catalogItemsPanelContainer"; - private static String ID_ASSIGNMENTS_OWNER_NAME = "assignmentsOwnerName"; - private static String ID_CATALOG_ITEMS_PANEL = "catalogItemsPanel"; + private static final String ID_TREE_PANEL_CONTAINER = "treePanelContainer"; + private static final String ID_TREE_PANEL = "treePanel"; + private static final String ID_CATALOG_ITEMS_PANEL_CONTAINER = "catalogItemsPanelContainer"; + private static final String ID_ASSIGNMENTS_OWNER_NAME = "assignmentsOwnerName"; + private static final String ID_CATALOG_ITEMS_PANEL = "catalogItemsPanel"; private static final String ID_CART_BUTTON = "cartButton"; private static final String ID_CART_ITEMS_COUNT = "itemsCount"; private static final String ID_HEADER_PANEL = "headerPanel"; @@ -102,6 +90,7 @@ public class AssignmentCatalogPanel extends BasePane private static final String DOT_CLASS = AssignmentCatalogPanel.class.getName(); private static final Trace LOGGER = TraceManager.getTrace(AssignmentCatalogPanel.class); + private static final String OPERATION_LOAD_ASSIGNMENT_CONSTRAINTS = DOT_CLASS + "loadAssignmentConstraints"; private static final String OPERATION_LOAD_ASSIGNABLE_ROLES = DOT_CLASS + "loadAssignableRoles"; private PageBase pageBase; @@ -111,11 +100,9 @@ public class AssignmentCatalogPanel extends BasePane private IModel viewModel; private IModel> targetUserModel; private ObjectDataProvider objectProvider; - private ListDataProvider listProvider; private int itemsPerRow = 4; private boolean showUserSelectionPopup = true; private List listProviderData; - private AssignmentViewType defaultAssignmentViewType = AssignmentViewType.ROLE_CATALOG_VIEW; List viewTypeList = new ArrayList<>(); public AssignmentCatalogPanel(String id) { @@ -153,7 +140,8 @@ protected void initProvider() { @Override public AssignmentEditorDto createDataObjectWrapper(PrismObject obj) { AssignmentEditorDto dto = AssignmentEditorDto.createDtoFromObject(obj.asObjectable(), UserDtoStatus.ADD, pageBase); - dto.setAlreadyAssigned(isAlreadyAssigned(obj)); + dto.setAlreadyAssigned(isAlreadyAssigned(obj, dto)); + dto.setDefualtAssignmentConstraints(getAssignmentConstraints()); return dto; } @@ -690,17 +678,21 @@ public void detach() { }; } - private boolean isAlreadyAssigned(PrismObject obj){ + private boolean isAlreadyAssigned(PrismObject obj, AssignmentEditorDto assignmentDto){ PrismObject user = getTargetUser(); if (user == null || user.asObjectable().getAssignment() == null){ return false; } + boolean isAssigned = false; + List assignedRelationsList = new ArrayList<>(); for (AssignmentType assignment : user.asObjectable().getAssignment()){ if (assignment.getTargetRef() != null && assignment.getTargetRef().getOid().equals(obj.getOid())){ - return true; + isAssigned = true; + assignedRelationsList.add(RelationTypes.getRelationType(assignment.getTargetRef().getRelation())); } } - return false; + assignmentDto.setAssignedRelationsList(assignedRelationsList); + return isAssigned; } private PrismObject getTargetUser(){ @@ -711,5 +703,20 @@ private PrismObject getTargetUser(){ return pageBase.loadUserSelf(pageBase); } + private AssignmentConstraintsType getAssignmentConstraints() { + OperationResult result = new OperationResult(OPERATION_LOAD_ASSIGNMENT_CONSTRAINTS); + SystemConfigurationType systemConfig = null; + try { + systemConfig = pageBase.getModelInteractionService().getSystemConfiguration(result); + } catch (ObjectNotFoundException | SchemaException e) { + LOGGER.error("Error getting system configuration: {}", e.getMessage(), e); + return null; + } + if (systemConfig != null && systemConfig.getRoleManagement() != null) { + return systemConfig.getRoleManagement().getDefaultAssignmentConstraints(); + } + return null; + } + } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentEditorDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentEditorDto.java index 0953cfb6dd4..c37887498f1 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentEditorDto.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentEditorDto.java @@ -17,6 +17,7 @@ package com.evolveum.midpoint.web.component.assignment; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -95,7 +96,9 @@ public class AssignmentEditorDto extends SelectableBean implements Comparable assignedRelationsList = new ArrayList<>(); //used only for role request functionalityp private Boolean isOrgUnitManager = Boolean.FALSE; private AssignmentType newAssignment; @@ -674,6 +677,22 @@ public void setAlreadyAssigned(boolean alreadyAssigned) { isAlreadyAssigned = alreadyAssigned; } + public AssignmentConstraintsType getDefualtAssignmentConstraints() { + return defualtAssignmentConstraints; + } + + public void setDefualtAssignmentConstraints(AssignmentConstraintsType defualtAssignmentConstraints) { + this.defualtAssignmentConstraints = defualtAssignmentConstraints; + } + + public List getAssignedRelationsList() { + return assignedRelationsList; + } + + public void setAssignedRelationsList(List assignedRelationsList) { + this.assignedRelationsList = assignedRelationsList; + } + public List getPrivilegeLimitationList() { return privilegeLimitationList; } @@ -705,6 +724,76 @@ public void setDelegationOwner(UserType delegationOwner) { this.delegationOwner = delegationOwner; } + public List getNotAssignedRelationsList(){ + List relations = new ArrayList<>(Arrays.asList(RelationTypes.values())); + if (getAssignedRelationsList() == null || getAssignedRelationsList().size() == 0){ + return relations; + } + for (RelationTypes relation : getAssignedRelationsList()){ + if (relations.contains(relation)){ + relations.remove(relation); + } + } + return relations; + } + + public boolean isAssignable() { + if (!isAlreadyAssigned){ + return true; + } + if (defualtAssignmentConstraints == null) { + return true; + } + if (defualtAssignmentConstraints.isAllowSameTarget() && defualtAssignmentConstraints.isAllowSameRelation()){ + return true; + } + if (defualtAssignmentConstraints.isAllowSameTarget() && !defualtAssignmentConstraints.isAllowSameRelation() + && getAssignedRelationsList().size() < RelationTypes.values().length){ + return true; + } + if (!defualtAssignmentConstraints.isAllowSameTarget() && defualtAssignmentConstraints.isAllowSameRelation() + && getAssignedRelationsList().size() < RelationTypes.values().length){ + return true; + } + if (!defualtAssignmentConstraints.isAllowSameTarget() && !defualtAssignmentConstraints.isAllowSameRelation()){ + return false; + } + return false; + } + + public boolean isMultyAssignable(){ + if (defualtAssignmentConstraints == null) { + return true; + } + if (defualtAssignmentConstraints.isAllowSameTarget() && defualtAssignmentConstraints.isAllowSameRelation()){ + return true; + } + return false; + } + + public boolean isSingleAssignable(){ + if (defualtAssignmentConstraints == null) { + return false; + } + if (!defualtAssignmentConstraints.isAllowSameTarget() && !defualtAssignmentConstraints.isAllowSameRelation()){ + return true; + } + return false; + } + + public void setDefaultRelation(){ + if (getTargetRef() == null){ + return; + } + if (!getAssignedRelationsList().contains(RelationTypes.MEMBER)){ + getTargetRef().setRelation(SchemaConstants.ORG_DEFAULT); + } + List availableRelations = getNotAssignedRelationsList(); + if (availableRelations.size() > 0){ + getTargetRef().setRelation(availableRelations.get(0).getRelation()); + } + } + @Override public boolean equals(Object o) { if (this == o) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentEditorPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentEditorPanel.java index 9883267c367..d3f908fe8cb 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentEditorPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentEditorPanel.java @@ -107,7 +107,7 @@ public class AssignmentEditorPanel extends BasePanel { private static final String ID_DESCRIPTION = "description"; private static final String ID_RELATION_CONTAINER = "relationContainer"; private static final String ID_FOCUS_TYPE = "focusType"; - private static final String ID_RELATION = "relation"; + protected static final String ID_RELATION = "relation"; private static final String ID_RELATION_LABEL = "relationLabel"; private static final String ID_ADMINISTRATIVE_STATUS = "administrativeStatus"; private static final String ID_VALID_FROM = "validFrom"; @@ -417,42 +417,7 @@ public boolean isVisible() { ObjectTypeSelectPanel focusType = new ObjectTypeSelectPanel<>(ID_FOCUS_TYPE, new PropertyModel(getModel(), AssignmentEditorDto.F_FOCUS_TYPE), FocusType.class); body.add(focusType); - - IModel relationModel = new IModel() { - @Override - public RelationTypes getObject() { - if (getModelObject().getTargetRef() == null) { - return RelationTypes.MEMBER; - } - return RelationTypes.getRelationType(getModelObject().getTargetRef().getRelation()); - } - - @Override - public void setObject(RelationTypes newValue) { - ObjectReferenceType ref = getModelObject().getTargetRef(); - if (ref != null){ - ref.setRelation(newValue.getRelation()); - } - } - - @Override - public void detach() { - - } - }; - DropDownChoicePanel relation = WebComponentUtil.createEnumPanel(RelationTypes.class, ID_RELATION, - relationModel, this, false); - relation.setEnabled(getModel().getObject().isEditable()); - relation.setOutputMarkupId(true); - relation.setOutputMarkupPlaceholderTag(true); - relation.add(new VisibleEnableBehaviour() { - - @Override - public boolean isVisible() { - return isCreatingNewAssignment(); - } - }); - relationContainer.add(relation); + addRelationDropDown(relationContainer); Label relationLabel = new Label(ID_RELATION_LABEL, new AbstractReadOnlyModel() { @@ -940,6 +905,83 @@ protected String load() { }; } + private void addRelationDropDown(WebMarkupContainer relationContainer){ + List availableRelations = getModelObject().getNotAssignedRelationsList(); + DropDownChoicePanel relation = WebComponentUtil.createEnumPanel(RelationTypes.class, ID_RELATION, + getModelObject().isMultyAssignable() ? + WebComponentUtil.createReadonlyModelFromEnum(RelationTypes.class) : Model.ofList(availableRelations), + getRelationModel(availableRelations), this, false); + relation.setEnabled(getModel().getObject().isEditable()); + relation.setOutputMarkupId(true); + relation.setOutputMarkupPlaceholderTag(true); + relation.add(new VisibleEnableBehaviour() { + + @Override + public boolean isVisible() { + return isCreatingNewAssignment(); + } + }); + relationContainer.add(relation); + + } + + private IModel getRelationModel(List availableRelations){ + return new IModel() { + @Override + public RelationTypes getObject() { + RelationTypes defaultRelation = RelationTypes.MEMBER; + if (!getModelObject().isMultyAssignable() && + getModelObject().getAssignedRelationsList().contains(defaultRelation)){ + defaultRelation = availableRelations.get(0); + } + if (getModelObject().getTargetRef() == null){ + return defaultRelation; + } + return RelationTypes.getRelationType(getModelObject().getTargetRef().getRelation()); + } + + @Override + public void setObject(RelationTypes relationTypes) { + if (getModelObject().getTargetRef() != null){ + getModelObject().getTargetRef().setRelation(relationTypes.getRelation()); + } + } + + @Override + public void detach() { + + } + }; + } + + + protected IModel getRelationModel(){ + return new IModel() { + private static final long serialVersionUID = 1L; + + @Override + public RelationTypes getObject() { + if (getModelObject().getTargetRef() == null) { + return RelationTypes.MEMBER; + } + return RelationTypes.getRelationType(getModelObject().getTargetRef().getRelation()); + } + + @Override + public void setObject(RelationTypes newValue) { + ObjectReferenceType ref = getModelObject().getTargetRef(); + if (ref != null){ + ref.setRelation(newValue.getRelation()); + } + } + + @Override + public void detach() { + + } + }; + } + private PrismObject getTargetObject(AssignmentEditorDto dto) throws ObjectNotFoundException, SchemaException, SecurityViolationException, CommunicationException, ConfigurationException { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentTablePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentTablePanel.java index d7bafa41ab9..1abcc8bd934 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentTablePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentTablePanel.java @@ -72,6 +72,7 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType; import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; +import org.w3c.dom.Attr; /** * @author shood @@ -128,7 +129,7 @@ private void initLayout(IModel labelText) { @Override protected void populateItem(ListItem item) { - AssignmentTablePanel.this.populateItem(item); + AssignmentTablePanel.this.populateAssignmentDetailsPanel(item); } }; list.setOutputMarkupId(true); @@ -167,7 +168,7 @@ public boolean isVisible(){ } - protected void populateItem(ListItem item){ + protected void populateAssignmentDetailsPanel(ListItem item){ AssignmentEditorPanel editor = new AssignmentEditorPanel(ID_ROW, item.getModel()){ @Override protected boolean ignoreMandatoryAttributes(){ @@ -176,7 +177,11 @@ protected boolean ignoreMandatoryAttributes(){ }; item.add(editor); - editor.add(AttributeModifier.append("class", new AbstractReadOnlyModel() { + editor.add(getClassModifier(item)); + } + + protected AttributeModifier getClassModifier(ListItem item){ + return AttributeModifier.append("class", new AbstractReadOnlyModel() { private static final long serialVersionUID = 1L; @Override @@ -189,7 +194,7 @@ public String getObject() { return GuiStyleConstants.CLASS_OBJECT_RESOURCE_BOX_THIN_CSS_CLASSES; } } - })); + }); } protected List createAssignmentMenu() { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/ShoppingCartEditorPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/ShoppingCartEditorPanel.java index fc5f0aa4405..cb57a877ec2 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/ShoppingCartEditorPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/ShoppingCartEditorPanel.java @@ -16,13 +16,21 @@ package com.evolveum.midpoint.web.component.assignment; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.web.component.input.DropDownChoicePanel; +import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; import org.apache.wicket.AttributeModifier; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; +import java.util.ArrayList; +import java.util.List; + /** * Created by honchar. */ diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/MultiButtonTable.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/MultiButtonTable.java index e8756e8d3e9..4b7e46d7ce4 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/MultiButtonTable.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/MultiButtonTable.java @@ -18,17 +18,12 @@ import com.evolveum.midpoint.gui.api.GuiStyleConstants; import com.evolveum.midpoint.gui.api.component.BasePanel; import com.evolveum.midpoint.gui.api.page.PageBase; -import com.evolveum.midpoint.schema.result.OperationResult; -import com.evolveum.midpoint.util.exception.ObjectNotFoundException; -import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.web.component.assignment.*; import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.web.page.self.PageAssignmentDetails; import com.evolveum.midpoint.web.session.RoleCatalogStorage; -import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentConstraintsType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.behavior.AttributeAppender; @@ -36,6 +31,7 @@ import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.repeater.RepeatingView; import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; import java.util.ArrayList; import java.util.List; @@ -61,7 +57,6 @@ public class MultiButtonTable extends BasePanel> { private static final String DOT_CLASS = AssignmentCatalogPanel.class.getName(); private static final Trace LOGGER = TraceManager.getTrace(AssignmentCatalogPanel.class); - private static final String OPERATION_LOAD_ASSIGNMENT_CONSTRAINTS = DOT_CLASS + "loadAssignmentConstraints"; private String addToCartLinkIcon = "fa fa-times-circle fa-lg text-danger"; private String detailsLinkIcon = "fa fa-arrow-circle-right"; @@ -219,37 +214,14 @@ public boolean isEnabled(){ } private boolean canAssign(final AssignmentEditorDto assignment) { - AssignmentConstraintsType assignmentConstraints = getAssignmentConstraints(); - if (assignmentConstraints == null) { - return true; - } - // TODO -// return !(AssignmentMultiplicityType.SINGLE.equals(getAssignmentMultiplicity()) -// && assignment.isAlreadyAssigned()); - return true; + return assignment.isAssignable(); } private void assignmentDetailsPerformed(final AssignmentEditorDto assignment, AjaxRequestTarget target){ if (!plusIconClicked) { - IModel assignmentModel = new IModel() { - @Override - public AssignmentEditorDto getObject() { - assignment.setMinimized(false); - assignment.setSimpleView(true); - return assignment; - } - - @Override - public void setObject(AssignmentEditorDto assignmentEditorDto) { - - } - - @Override - public void detach() { - - } - }; - setResponsePage(new PageAssignmentDetails(assignmentModel)); + assignment.setMinimized(false); + assignment.setSimpleView(true); + pageBase.navigateToNext(new PageAssignmentDetails(Model.of(assignment))); } else { plusIconClicked = false; } @@ -284,30 +256,15 @@ private String getBackgroundClass(AssignmentEditorDto dto){ private void addAssignmentPerformed(AssignmentEditorDto assignment, AjaxRequestTarget target){ plusIconClicked = true; - RoleCatalogStorage storage = getPageBase().getSessionStorage().getRoleCatalog(); + RoleCatalogStorage storage = pageBase.getSessionStorage().getRoleCatalog(); if (storage.getAssignmentShoppingCart() == null){ storage.setAssignmentShoppingCart(new ArrayList()); } - List assignmentsToAdd = storage.getAssignmentShoppingCart(); - assignmentsToAdd.add(assignment); - storage.setAssignmentShoppingCart(assignmentsToAdd); + assignment.setDefaultRelation(); + storage.getAssignmentShoppingCart().add(assignment); AssignmentCatalogPanel parent = MultiButtonTable.this.findParent(AssignmentCatalogPanel.class); parent.reloadCartButton(target); } - private AssignmentConstraintsType getAssignmentConstraints() { - OperationResult result = new OperationResult(OPERATION_LOAD_ASSIGNMENT_CONSTRAINTS); - SystemConfigurationType systemConfig = null; - try { - systemConfig = pageBase.getModelInteractionService().getSystemConfiguration(result); - } catch (ObjectNotFoundException | SchemaException e) { - LOGGER.error("Error getting system configuration: {}", e.getMessage(), e); - return null; - } - if (systemConfig != null && systemConfig.getRoleManagement() != null) { - return systemConfig.getRoleManagement().getDefaultAssignmentConstraints(); - } - return null; - } } 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 9894552ed4a..6f133790365 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 @@ -197,7 +197,7 @@ public WebMarkupContainer createPanel(String panelId) { private static final long serialVersionUID = 1L; @Override - public void populateItem(ListItem item) { + public void populateAssignmentDetailsPanel(ListItem item) { DelegationEditorPanel editor = new DelegationEditorPanel(ID_ROW, item.getModel(), false, privilegesList, PageUser.this); item.add(editor); @@ -330,7 +330,7 @@ public WebMarkupContainer createPanel(String panelId) { private static final long serialVersionUID = 1L; @Override - public void populateItem(ListItem item) { + public void populateAssignmentDetailsPanel(ListItem item) { DelegationEditorPanel editor = new DelegationEditorPanel(ID_ROW, item.getModel(), true, privilegesList, PageUser.this); item.add(editor); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageUserHistory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageUserHistory.java index f77803504bf..100c1825550 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageUserHistory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageUserHistory.java @@ -215,7 +215,7 @@ public WebMarkupContainer createPanel(String panelId) { private static final long serialVersionUID = 1L; @Override - public void populateItem(ListItem item) { + public void populateAssignmentDetailsPanel(ListItem item) { DelegationEditorPanel editor = new DelegationEditorPanel(ID_ROW, item.getModel(), true, new ArrayList(), PageUserHistory.this); item.add(editor); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentDetails.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentDetails.java index 17eb8d4b64e..6b774388cb4 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentDetails.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentDetails.java @@ -70,9 +70,8 @@ public void onClick(AjaxRequestTarget target) { if (storage.getAssignmentShoppingCart() == null){ storage.setAssignmentShoppingCart(new ArrayList()); } - List assignmentsToAdd = storage.getAssignmentShoppingCart(); - assignmentsToAdd.add(assignmentModel.getObject()); - storage.setAssignmentShoppingCart(assignmentsToAdd); + AssignmentEditorDto dto = assignmentModel.getObject(); + storage.getAssignmentShoppingCart().add(dto); redirectBack(); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentsList.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentsList.java index aed411a2172..de1f622f039 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentsList.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentsList.java @@ -19,7 +19,9 @@ import com.evolveum.midpoint.web.component.AjaxButton; import com.evolveum.midpoint.web.component.AjaxSubmitButton; import com.evolveum.midpoint.web.component.assignment.AssignmentEditorDto; +import com.evolveum.midpoint.web.component.assignment.AssignmentEditorPanel; import com.evolveum.midpoint.web.component.assignment.AssignmentTablePanel; +import com.evolveum.midpoint.web.component.assignment.ShoppingCartEditorPanel; import com.evolveum.midpoint.web.component.form.Form; import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem; import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItemAction; @@ -33,6 +35,7 @@ import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.markup.html.form.TextArea; +import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; @@ -85,7 +88,7 @@ public void initLayout() { mainForm.setOutputMarkupId(true); add(mainForm); - AssignmentTablePanel panel = new AssignmentTablePanel(ID_ASSIGNMENT_TABLE_PANEL, + AssignmentTablePanel panel = new AssignmentTablePanel(ID_ASSIGNMENT_TABLE_PANEL, createStringResource("FocusType.assignment"), assignmentsModel){ @Override protected List createAssignmentMenu() { @@ -101,7 +104,6 @@ public void onClick(AjaxRequestTarget target) { }); items.add(item); return items; - } }; mainForm.add(panel); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/RoleCatalogStorage.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/RoleCatalogStorage.java index 9c514d929c0..3d77751423b 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/RoleCatalogStorage.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/RoleCatalogStorage.java @@ -146,7 +146,10 @@ public void setConflictsList(List conflictsList) { } public List getAssignmentShoppingCart() { - return assignmentShoppingCart == null ? new ArrayList() : assignmentShoppingCart; + if (assignmentShoppingCart == null){ + assignmentShoppingCart = new ArrayList<>(); + } + return assignmentShoppingCart; } public void setAssignmentShoppingCart(List assignmentShoppingCart) { diff --git a/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd b/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd index 683d6c49a43..afd10d41652 100644 --- a/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd +++ b/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd @@ -11202,13 +11202,13 @@ - + Constraint all assignments that have the same target. I.e. multiple assignments of the same (abstract) role. - If prohibitSameTarget=false then multiple assignments of the same role are allowed. - If prohibitSameTarget=true then multiple assignments of the same role are prohibited. + If allowSameTarget=true then multiple assignments of the same role are allowed. + If allowSameTarget=false then multiple assignments of the same role are prohibited. (but see also other constraints in this type) @@ -11216,13 +11216,12 @@ - + Constraint all assignments that have the same relation. - E.g. if prohibitSameTarget=true and prohibitSameRelation=false then multiple assignments + E.g. if allowSameTarget=true and allowSameRelation=false then multiple assignments of the same role are allowed as long as they have different relation. - If prohibitSameTarget=true and prohibitSameRelation=false 3.6