diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/UserSelectionButton.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/UserSelectionButton.java index ff8e9899187..5cb2f568bae 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/UserSelectionButton.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/UserSelectionButton.java @@ -18,6 +18,7 @@ import com.evolveum.midpoint.gui.api.component.BasePanel; import com.evolveum.midpoint.gui.api.component.ObjectBrowserPanel; import com.evolveum.midpoint.gui.api.page.PageBase; +import com.evolveum.midpoint.prism.query.ObjectFilter; import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; import org.apache.wicket.ajax.AjaxRequestTarget; @@ -122,7 +123,7 @@ private void initUserSelectionPopup(AjaxRequestTarget target) { supportedTypes.add(pageBase.getPrismContext().getSchemaRegistry() .findObjectDefinitionByCompileTimeClass(UserType.class).getTypeName()); ObjectBrowserPanel focusBrowser = new ObjectBrowserPanel(pageBase.getMainPopupBodyId(), - UserType.class, supportedTypes, isMultiSelection, pageBase, null, getModelObject()) { + UserType.class, supportedTypes, isMultiSelection, pageBase, getUserQueryFilter(), getModelObject()) { @Override protected void onSelectPerformed(AjaxRequestTarget target, UserType object) { @@ -179,4 +180,8 @@ public int compare(UserType u1, UserType u2) { } return titleModel.getString(); } + + protected ObjectFilter getUserQueryFilter(){ + return null; + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentShoppingKart.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentShoppingKart.html index 5da5f5ee60c..ceb59f2c8b9 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentShoppingKart.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentShoppingKart.html @@ -47,11 +47,8 @@
-
-
-
+
-
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentShoppingKart.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentShoppingKart.java index b9302a54f55..f832f70c40b 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentShoppingKart.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentShoppingKart.java @@ -17,6 +17,7 @@ import com.evolveum.midpoint.gui.api.component.ObjectBrowserPanel; import com.evolveum.midpoint.gui.api.model.LoadableModel; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.model.api.ModelInteractionService; import com.evolveum.midpoint.model.api.RoleSelectionSpecification; import com.evolveum.midpoint.prism.PrismObject; @@ -89,8 +90,6 @@ public class PageAssignmentShoppingKart extends PageSelf { private static final String ID_NO_CATALOG_REF_DEFINED_LABEL = "noCatalogRefDefinedLabel"; private static final String ID_CATALOG_ITEMS_GRID_PANEL = "catalogItemsGridPanel"; private static final String ID_CONTENT_PANEL = "contentPanel"; - private static final String ID_CATALOG_ITEMS_PANEL_CONTAINER = "catalogItemsPanelContainer"; - private static final String ID_ASSIGNMENTS_OWNER_NAME = "assignmentsOwnerName"; 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"; @@ -191,25 +190,6 @@ public Search load() { } private void initProvider() { - if (AssignmentViewType.USER_TYPE.equals(viewTypeModel.getObject())){ - UserType assignmentsOwner = getRoleCatalogStorage().getAssignmentsUserOwner(); - List listProviderData = new ArrayList<>(); - if (assignmentsOwner != null) { - List assignments = assignmentsOwner.getAssignment(); - for (AssignmentType assignment : assignments) { - if (!AssignmentsUtil.isPolicyRuleAssignment(assignment) && !AssignmentsUtil.isConsentAssignment(assignment) - && AssignmentsUtil.isAssignmentRelevant(assignment)) { - assignment.setId(null); - listProviderData.add(new AssignmentEditorDto(UserDtoStatus.MODIFY, assignment, PageAssignmentShoppingKart.this)); - } - } - Collections.sort(listProviderData); - } - provider = new ListDataProvider(this, Model.ofList(listProviderData)); - provider.setQuery(null); - provider.getAvailableData().clear(); - provider.getAvailableData().addAll(listProviderData); - } else { provider = new ObjectDataProvider(PageAssignmentShoppingKart.this, AbstractRoleType.class) { private static final long serialVersionUID = 1L; @@ -229,7 +209,6 @@ public ObjectQuery getQuery() { return createContentQuery(null); } }; - } } private void initHeaderPanel(Form mainForm){ @@ -289,31 +268,6 @@ public boolean isVisible(){ } private void initCatalogItemsPanel(WebMarkupContainer panelContainer){ - WebMarkupContainer catalogItemsPanelContainer = new WebMarkupContainer(ID_CATALOG_ITEMS_PANEL_CONTAINER); - catalogItemsPanelContainer.setOutputMarkupId(true); - catalogItemsPanelContainer.add(new VisibleEnableBehaviour(){ - private static final long serialVersionUID = 1L; - @Override - public boolean isVisible(){ - return !(AssignmentViewType.ROLE_CATALOG_VIEW.equals(viewTypeModel.getObject()) && - isCatalogOidEmpty()); - } - }); - panelContainer.add(catalogItemsPanelContainer); - - Label assignmentsOwnerLabel = new Label(ID_ASSIGNMENTS_OWNER_NAME, - createStringResource("AssignmentCatalogPanel.assignmentsOwner", - getRoleCatalogStorage().getAssignmentsUserOwner() != null ? - getRoleCatalogStorage().getAssignmentsUserOwner().getName().getOrig() : "").getString()); - assignmentsOwnerLabel.add(new VisibleEnableBehaviour(){ - private static final long serialVersionUID = 1L; - @Override - public boolean isVisible(){ - return AssignmentViewType.USER_TYPE.equals(viewTypeModel.getObject()); - } - }); - catalogItemsPanelContainer.add(assignmentsOwnerLabel); - GridViewComponent catalogItemsGrid = new GridViewComponent(ID_CATALOG_ITEMS_GRID_PANEL, new AbstractReadOnlyModel() { private static final long serialVersionUID = 1L; @@ -344,8 +298,16 @@ protected void assignmentAddedToShoppingCartPerformed(AjaxRequestTarget target){ }); } }; + catalogItemsGrid.add(new VisibleEnableBehaviour(){ + private static final long serialVersionUID = 1L; + @Override + public boolean isVisible(){ + return !(AssignmentViewType.ROLE_CATALOG_VIEW.equals(viewTypeModel.getObject()) && + isCatalogOidEmpty()); + } + }); catalogItemsGrid.setOutputMarkupId(true); - catalogItemsPanelContainer.add(catalogItemsGrid); + panelContainer.add(catalogItemsGrid); } private void selectTreeItemPerformed(SelectableBean selected, AjaxRequestTarget target) { @@ -410,6 +372,11 @@ public List getObject() { }, false, createStringResource("AssignmentCatalogPanel.selectSourceUser")){ private static final long serialVersionUID = 1L; + @Override + protected ObjectFilter getUserQueryFilter(){ + return getAssignableRolesFilter(); + } + @Override protected void singleUserSelectionPerformed(AjaxRequestTarget target, UserType user){ super.singleUserSelectionPerformed(target, user); @@ -417,9 +384,9 @@ protected void singleUserSelectionPerformed(AjaxRequestTarget target, UserType u getRoleCatalogStorage().setAssignmentsUserOwner(user); initProvider(); - //TODO don't remove component - getContentPanel().remove(ID_CATALOG_ITEMS_PANEL_CONTAINER); - initCatalogItemsPanel(getContentPanel()); +// TODO don't remove component +// getContentPanel().remove(ID_CATALOG_ITEMS_PANEL_CONTAINER); +// initCatalogItemsPanel(getContentPanel()); searchModel.reset(); target.add(getContentPanel()); @@ -439,9 +406,6 @@ protected void onDeleteSelectedUsersPerformed(AjaxRequestTarget target){ viewTypeModel.setObject(getRoleCatalogStorage().getShoppingCartConfigurationDto().getViewTypeList().get(0)); } initProvider(); - //TODO don't remove component - getContentPanel().remove(ID_CATALOG_ITEMS_PANEL_CONTAINER); - initCatalogItemsPanel(getContentPanel()); searchModel.reset(); target.add(getContentPanel()); @@ -490,12 +454,6 @@ public boolean isEnabled(){ private void initSearchPanel(WebMarkupContainer headerPanel) { final Form searchForm = new Form(ID_SEARCH_FORM); - searchForm.add(new VisibleEnableBehaviour() { - public boolean isVisible() { - return !(AssignmentViewType.ROLE_CATALOG_VIEW.equals(viewTypeModel.getObject()) && isCatalogOidEmpty()) - && !AssignmentViewType.USER_TYPE.equals(viewTypeModel.getObject()); - } - }); searchForm.setOutputMarkupId(true); SearchPanel search = new SearchPanel(ID_SEARCH, (IModel) searchModel, false) { @@ -507,7 +465,7 @@ public void searchPerformed(ObjectQuery query, AjaxRequestTarget target) { } }; searchForm.add(search); - headerPanel.addOrReplace(searchForm); + headerPanel.add(searchForm); } private void searchPerformed(ObjectQuery query, AjaxRequestTarget target) { @@ -524,7 +482,13 @@ protected ObjectQuery createContentQuery(ObjectQuery searchQuery) { } addOrgMembersFilter(oid, memberQuery); } - addAssignableRolesFilter(memberQuery); + if (AssignmentViewType.USER_TYPE.equals(viewTypeModel.getObject())) { + UserType assignmentsOwner = getRoleCatalogStorage().getAssignmentsUserOwner(); + List assignmentTargetObjectOidsList = collectTargetObjectOids(assignmentsOwner.getAssignment()); + ObjectFilter oidsFilter = InOidFilter.createInOid(assignmentTargetObjectOidsList); + memberQuery.addFilter(oidsFilter); + } + memberQuery.addFilter(getAssignableRolesFilter()); addViewTypeFilter(memberQuery); if (memberQuery == null) { memberQuery = new ObjectQuery(); @@ -555,7 +519,7 @@ private void addViewTypeFilter(ObjectQuery query) { } } - private void addAssignableRolesFilter(ObjectQuery query) { + private ObjectFilter getAssignableRolesFilter() { ObjectFilter filter = null; LOGGER.debug("Loading roles which the current user has right to assign"); OperationResult result = new OperationResult(OPERATION_LOAD_ASSIGNABLE_ROLES); @@ -573,10 +537,7 @@ private void addAssignableRolesFilter(ObjectQuery query) { if (!result.isSuccess() && !result.isHandledError()) { showResult(result); } - if (query == null) { - query = new ObjectQuery(); - } - query.addFilter(filter); + return filter; } private ObjectQuery addOrgMembersFilter(String oid, ObjectQuery query) { @@ -634,7 +595,7 @@ private boolean isCatalogOidEmpty(){ private WebMarkupContainer getCatalogItemsPanelContainer(){ - return (WebMarkupContainer)getContentPanel().get(ID_CATALOG_ITEMS_PANEL_CONTAINER); + return (WebMarkupContainer)getContentPanel().get(ID_CATALOG_ITEMS_GRID_PANEL); } private WebMarkupContainer getHeaderPanel(){ @@ -719,6 +680,18 @@ private String getSourceUserSelectionButtonLabel(UserType user){ } } - + private List collectTargetObjectOids(List assignments){ + List oidsList = new ArrayList<>(); + if (assignments == null){ + return oidsList; + } + for (AssignmentType assignment : assignments){ + if (assignment.getTargetRef() == null || assignment.getTargetRef().getOid() == null){ + continue; + } + oidsList.add(assignment.getTargetRef().getOid()); + } + return oidsList; + } }