From 21135b682db966c31ee20da350b63f9febf0c326 Mon Sep 17 00:00:00 2001 From: kate Date: Wed, 20 Jun 2018 13:20:11 +0200 Subject: [PATCH] more fixes for unassign action on members panel # Conflicts: # gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/RoleGovernanceRelationsPanel.java --- .../AbstractAssignmentPopupTabPanel.html | 20 ++ .../AbstractAssignmentPopupTabPanel.java | 139 +++++++++++ .../gui/api/component/AssignmentPopup.html | 26 ++ .../gui/api/component/AssignmentPopup.java | 231 ++++++++++++++++++ .../FocusTypeAssignmentPopupTabPanel.html | 39 +++ .../FocusTypeAssignmentPopupTabPanel.java | 63 +++++ .../gui/api/component/tabs/PanelTab.java | 4 + .../AbstractRoleAssignmentPanel.java | 17 +- .../localization/Midpoint.properties | 1 + 9 files changed, 532 insertions(+), 8 deletions(-) create mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AbstractAssignmentPopupTabPanel.html create mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AbstractAssignmentPopupTabPanel.java create mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.html create mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.java create mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/FocusTypeAssignmentPopupTabPanel.html create mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/FocusTypeAssignmentPopupTabPanel.java diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AbstractAssignmentPopupTabPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AbstractAssignmentPopupTabPanel.html new file mode 100644 index 00000000000..8fde94158ed --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AbstractAssignmentPopupTabPanel.html @@ -0,0 +1,20 @@ + + + +
+ + diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AbstractAssignmentPopupTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AbstractAssignmentPopupTabPanel.java new file mode 100644 index 00000000000..2ea65adb2f2 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AbstractAssignmentPopupTabPanel.java @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2010-2018 Evolveum + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.evolveum.midpoint.gui.api.component; + +import com.evolveum.midpoint.model.api.ModelInteractionService; +import com.evolveum.midpoint.model.api.RoleSelectionSpecification; +import com.evolveum.midpoint.prism.query.ObjectFilter; +import com.evolveum.midpoint.prism.query.ObjectQuery; +import com.evolveum.midpoint.schema.constants.ObjectTypes; +import com.evolveum.midpoint.schema.result.OperationResult; +import com.evolveum.midpoint.task.api.Task; +import com.evolveum.midpoint.util.logging.LoggingUtils; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.web.component.util.SelectableBean; +import com.evolveum.midpoint.web.security.SecurityUtils; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by honchar. + */ +public abstract class AbstractAssignmentPopupTabPanel extends BasePanel> { + + private static final long serialVersionUID = 1L; + + private static final String ID_OBJECT_LIST_PANEL = "objectListPanel"; + + private static final String DOT_CLASS = AbstractAssignmentPopupTabPanel.class.getName(); + private static final Trace LOGGER = TraceManager.getTrace(AbstractAssignmentPopupTabPanel.class); + private static final String OPERATION_LOAD_ASSIGNABLE_ROLES = DOT_CLASS + "loadAssignableRoles"; + + private ObjectTypes type; + + public AbstractAssignmentPopupTabPanel(String id, ObjectTypes type, IModel> selectedObjectsList){ + super(id, selectedObjectsList); + this.type = type; + } + + @Override + protected void onInitialize(){ + super.onInitialize(); + add(initObjectListPanel()); + initParametersPanel(); + } + + private PopupObjectListPanel initObjectListPanel(){ + PopupObjectListPanel listPanel = new PopupObjectListPanel(ID_OBJECT_LIST_PANEL, (Class)type.getClassDefinition(), null, true, + getPageBase(), getModelObject()) { + + private static final long serialVersionUID = 1L; + + @Override + protected void onUpdateCheckbox(AjaxRequestTarget target) { +// if (type.equals(ObjectTypes.RESOURCE)) { +// target.add(AbstractAssignmentPopupTabPanel.this); +// } + onSelectionPerformed(target); + } + + @Override + protected IModel getCheckBoxEnableModel(IModel> rowModel){ + return getObjectSelectCheckBoxEnableModel(); + } + + @Override + protected ObjectQuery addFilterToContentQuery(ObjectQuery query) { + if (type.equals(RoleType.COMPLEX_TYPE)) { + LOGGER.debug("Loading roles which the current user has right to assign"); + Task task = AbstractAssignmentPopupTabPanel.this.getPageBase().createSimpleTask(OPERATION_LOAD_ASSIGNABLE_ROLES); + OperationResult result = task.getResult(); + ObjectFilter filter = null; + try { + ModelInteractionService mis = AbstractAssignmentPopupTabPanel.this.getPageBase().getModelInteractionService(); + RoleSelectionSpecification roleSpec = + mis.getAssignableRoleSpecification(SecurityUtils.getPrincipalUser().getUser().asPrismObject(), task, result); + filter = roleSpec.getFilter(); + } catch (Exception ex) { + LoggingUtils.logUnexpectedException(LOGGER, "Couldn't load available roles", ex); + result.recordFatalError("Couldn't load available roles", ex); + } finally { + result.recomputeStatus(); + } + if (!result.isSuccess() && !result.isHandledError()) { + AbstractAssignmentPopupTabPanel.this.getPageBase().showResult(result); + } + if (query == null){ + query = new ObjectQuery(); + } + query.addFilter(filter); + } + return query; + } + + }; + + listPanel.setOutputMarkupId(true); + return listPanel; + } + + protected PopupObjectListPanel getObjectListPanel(){ + return (PopupObjectListPanel)get(ID_OBJECT_LIST_PANEL); + } + + protected List getSelectedObjectsList(){ + PopupObjectListPanel objectListPanel = getObjectListPanel(); + if (objectListPanel == null){ + return new ArrayList(); + } + return objectListPanel.getSelectedObjects(); + } + + protected IModel getObjectSelectCheckBoxEnableModel(){ + return Model.of(true); + } + + protected abstract void initParametersPanel(); + + protected void onSelectionPerformed(AjaxRequestTarget target){} +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.html new file mode 100644 index 00000000000..3fb7bc0dd13 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.html @@ -0,0 +1,26 @@ + + + +
+
+ +

+ + +

+ + diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.java new file mode 100644 index 00000000000..179716abe88 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.java @@ -0,0 +1,231 @@ +package com.evolveum.midpoint.gui.api.component; + +import com.evolveum.midpoint.gui.api.component.tabs.CountablePanelTab; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.schema.constants.ObjectTypes; +import com.evolveum.midpoint.web.component.AjaxButton; +import com.evolveum.midpoint.web.component.TabbedPanel; +import com.evolveum.midpoint.web.component.dialog.Popupable; +import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowKindType; +import org.apache.wicket.Component; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.extensions.markup.html.tabs.ITab; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.list.Loop; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.StringResourceModel; + +import javax.xml.namespace.QName; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by honchar. + */ +public class AssignmentPopup extends BasePanel implements Popupable{ + private static final long serialVersionUID = 1L; + + private static final String ID_TABS_PANEL = "tabsPanel"; + private static final String ID_CANCEL_BUTTON = "cancelButton"; + private static final String ID_ASSIGN_BUTTON = "assignButton"; + private static final String ID_FORM = "form"; + + public AssignmentPopup(String id){ + super(id); + } + + @Override + protected void onInitialize(){ + super.onInitialize(); + + Form form = new Form(ID_FORM); + form.setOutputMarkupId(true); + add(form); + + List tabs = createAssignmentTabs(); + TabbedPanel tabPanel = WebComponentUtil.createTabPanel(ID_TABS_PANEL, getPageBase(), tabs, null); + tabPanel.setOutputMarkupId(true); + form.add(tabPanel); + + AjaxButton cancelButton = new AjaxButton(ID_CANCEL_BUTTON, + createStringResource("userBrowserDialog.button.cancelButton")) { + + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { +// TypedAssignablePanel.this.assignButtonClicked(target, new ArrayList<>()); + } + }; + cancelButton.setOutputMarkupId(true); + form.add(cancelButton); + + AjaxButton addButton = new AjaxButton(ID_ASSIGN_BUTTON, + createStringResource("userBrowserDialog.button.addButton")) { + + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + addPerformed(target); + + } + }; + addButton.setOutputMarkupId(true); + form.add(addButton); + } + + private List createAssignmentTabs() { + List tabs = new ArrayList<>(); + VisibleEnableBehaviour authorization = new VisibleEnableBehaviour(){ + }; + + + List selectedRoles = new ArrayList<>(); + IModel> selectedRolesModel = new IModel>() { + @Override + public List getObject() { + return selectedRoles; + } + + @Override + public void setObject(List os) { + selectedRoles.clear(); + selectedRoles.addAll(os); + } + + @Override + public void detach() { + + } + }; + tabs.add(new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.ROLE"), authorization) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer createPanel(String panelId) { + return new FocusTypeAssignmentPopupTabPanel(panelId, ObjectTypes.ROLE, selectedRolesModel){ + private static final long serialVersionUID = 1L; + + @Override + protected void onSelectionPerformed(AjaxRequestTarget target){ + tabLabelPanelUpdate(target); + } + }; + } + + @Override + public String getCount() { + List selectedObjectsList = ((FocusTypeAssignmentPopupTabPanel)this.getPanel()).getObjectListPanel().getSelectedObjects(); + return Integer.toString(selectedObjectsList.size()); + } + }); + + tabs.add( + new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.ORG"), authorization) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer createPanel(String panelId) { + return new FocusTypeAssignmentPopupTabPanel(panelId, ObjectTypes.ORG, Model.ofList(new ArrayList<>())){ + private static final long serialVersionUID = 1L; + + @Override + protected void onSelectionPerformed(AjaxRequestTarget target){ + tabLabelPanelUpdate(target); + } + + }; + } + + @Override + public String getCount() { + List selectedObjectsList = ((FocusTypeAssignmentPopupTabPanel)this.getPanel()).getObjectListPanel().getSelectedObjects(); + return Integer.toString(selectedObjectsList.size()); + } + }); + + tabs.add( + new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.SERVICE"), authorization) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer createPanel(String panelId) { + return new FocusTypeAssignmentPopupTabPanel(panelId, ObjectTypes.SERVICE, Model.ofList(new ArrayList<>())){ + private static final long serialVersionUID = 1L; + + @Override + protected void onSelectionPerformed(AjaxRequestTarget target){ + tabLabelPanelUpdate(target); + } + + }; + } + + @Override + public String getCount() { + List selectedObjectsList = ((FocusTypeAssignmentPopupTabPanel)this.getPanel()).getObjectListPanel().getSelectedObjects(); + return Integer.toString(selectedObjectsList.size()); + } + }); + +// tabs.add( +// new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.RESOURCE"), authorization) { +// +// private static final long serialVersionUID = 1L; +// +// @Override +// public WebMarkupContainer createPanel(String panelId) { +// return new FocusTypeAssignmentPopupTabPanel(panelId, ObjectTypes.RESOURCE); +// } +// +// @Override +// public String getCount() { +// return "0"; +// } +// }); + + return tabs; + } + + private TabbedPanel getTabbedPanel(){ + return (TabbedPanel) get(ID_FORM).get(ID_TABS_PANEL); + } + + private void tabLabelPanelUpdate(AjaxRequestTarget target){ +// TabbedPanel tabbedPanel = getTabbedPanel(); +// Loop tabs = tabbedPanel.getTabsPanel(); +// tabs.forEach(tabPanel -> { +// target.add(tabPanel.get(tabbedPanel.getTabLinkPanelId())); +// }); + + target.add(getTabbedPanel()); + } + + protected void addPerformed(AjaxRequestTarget target) { + getPageBase().hideMainPopup(target); + } + + public int getWidth(){ + return 900; + } + + public int getHeight(){ + return 1200; + } + + public StringResourceModel getTitle(){ + return createStringResource("TypedAssignablePanel.selectObjects"); + } + + public Component getComponent(){ + return this; + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/FocusTypeAssignmentPopupTabPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/FocusTypeAssignmentPopupTabPanel.html new file mode 100644 index 00000000000..65d17870477 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/FocusTypeAssignmentPopupTabPanel.html @@ -0,0 +1,39 @@ + + + + + +
+
+
+ +
+
+
+
+
+
+ +
+ + +
+
+
+
+
+ diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/FocusTypeAssignmentPopupTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/FocusTypeAssignmentPopupTabPanel.java new file mode 100644 index 00000000000..eec6318a5df --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/FocusTypeAssignmentPopupTabPanel.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2010-2018 Evolveum + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.evolveum.midpoint.gui.api.component; + +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +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.assignment.RelationTypes; +import com.evolveum.midpoint.web.component.input.DropDownChoicePanel; +import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnChangeAjaxFormUpdatingBehavior; +import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; + +import java.util.List; + +/** + * Created by honchar + */ +public class FocusTypeAssignmentPopupTabPanel extends AbstractAssignmentPopupTabPanel{ + + private static final long serialVersionUID = 1L; + + private static final String ID_RELATION_CONTAINER = "relationContainer"; + private static final String ID_RELATION = "relation"; + + private static final String DOT_CLASS = FocusTypeAssignmentPopupTabPanel.class.getName(); + private static final Trace LOGGER = TraceManager.getTrace(FocusTypeAssignmentPopupTabPanel.class); + + public FocusTypeAssignmentPopupTabPanel(String id, ObjectTypes type, IModel> selectedObjectsList){ + super(id, type, selectedObjectsList); + } + + @Override + protected void initParametersPanel(){ + WebMarkupContainer relationContainer = new WebMarkupContainer(ID_RELATION_CONTAINER); + relationContainer.setOutputMarkupId(true); + add(relationContainer); + + DropDownChoicePanel relationSelector = WebComponentUtil.createEnumPanel(RelationTypes.class, ID_RELATION, + WebComponentUtil.createReadonlyModelFromEnum(RelationTypes.class), Model.of(RelationTypes.MEMBER), + FocusTypeAssignmentPopupTabPanel.this, false); + relationSelector.getBaseFormComponent().add(new EmptyOnChangeAjaxFormUpdatingBehavior()); + relationSelector.setOutputMarkupId(true); + relationSelector.setOutputMarkupPlaceholderTag(true); + relationContainer.add(relationSelector); + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/tabs/PanelTab.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/tabs/PanelTab.java index 59b49ceffcb..61d27a7709a 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/tabs/PanelTab.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/tabs/PanelTab.java @@ -52,6 +52,10 @@ public WebMarkupContainer getPanel(String panelId) { return panel; } + public WebMarkupContainer getPanel(){ + return panel; + } + public abstract WebMarkupContainer createPanel(String panelId); @Override 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 105d162e272..b4d81830798 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,6 +23,7 @@ import javax.xml.namespace.QName; +import com.evolveum.midpoint.gui.api.component.AssignmentPopup; import com.evolveum.midpoint.prism.PrismContainerValue; import com.evolveum.midpoint.schema.constants.ObjectTypes; import com.evolveum.midpoint.schema.constants.SchemaConstants; @@ -167,8 +168,8 @@ protected void showAllAssignments(AjaxRequestTarget target) { @Override protected void newAssignmentClickPerformed(AjaxRequestTarget target) { - TypedAssignablePanel panel = new TypedAssignablePanel( - getPageBase().getMainPopupBodyId(), getDefaultNewAssignmentFocusType()) { + AssignmentPopup popupPanel = new AssignmentPopup( + getPageBase().getMainPopupBodyId()) { private static final long serialVersionUID = 1L; @@ -178,14 +179,14 @@ protected void addPerformed(AjaxRequestTarget target, List selected, QName relat 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); + popupPanel.setOutputMarkupId(true); + getPageBase().showMainPopup(popupPanel, target); } protected Class getDefaultNewAssignmentFocusType(){ diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint.properties b/gui/admin-gui/src/main/resources/localization/Midpoint.properties index ac4c70cd001..012d2bea6bb 100755 --- a/gui/admin-gui/src/main/resources/localization/Midpoint.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint.properties @@ -3313,6 +3313,7 @@ roleMemberPanel.menu.recompute=Recompute member roleMemberPanel.menu.recomputeAll=Recompute all roleMemberPanel.menu.removeAll=Remove all roleMemberPanel.relation=Relation +AssignmentPanel.newAssignmentParameters=Parameters SearchPanel.more=More... SearchPanel.add=Add SearchPanel.close=Close