diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AbstractPopupTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AbstractPopupTabPanel.java index c3b5fe4e78e..e1fcee298aa 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AbstractPopupTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AbstractPopupTabPanel.java @@ -62,16 +62,18 @@ protected void onInitialize(){ protected Component initObjectListPanel(){ PopupObjectListPanel listPanel = new PopupObjectListPanel(ID_OBJECT_LIST_PANEL, (Class)getObjectType().getClassDefinition(), - null, true, getPageBase(), getPreselectedObjects()) { + true, getPageBase()) { private static final long serialVersionUID = 1L; @Override - protected void onUpdateCheckbox(AjaxRequestTarget target) { - getPreselectedObjects().clear(); - getPreselectedObjects().addAll(getSelectedObjectsList()); + protected void onUpdateCheckbox(AjaxRequestTarget target, IModel> rowModel) { + onSelectionPerformed(target, rowModel); + } - onSelectionPerformed(target); + @Override + protected List getPreselectedObjectList(){ + return getPreselectedObjects(); } @Override @@ -99,22 +101,22 @@ public boolean isVisible(){ protected abstract void initParametersPanel(Fragment parametersPanel); protected List getPreselectedObjects(){ - return preSelectedObjects; + return null; } protected List getSelectedObjectsList(){ - PopupObjectListPanel objectListPanel = (PopupObjectListPanel)getObjectListPanel(); + PopupObjectListPanel objectListPanel = getObjectListPanel(); if (objectListPanel == null){ return new ArrayList(); } return objectListPanel.getSelectedObjects(); } - protected Component getObjectListPanel(){ - return get(ID_OBJECT_LIST_PANEL); + protected PopupObjectListPanel getObjectListPanel(){ + return (PopupObjectListPanel)get(ID_OBJECT_LIST_PANEL); } - protected void onSelectionPerformed(AjaxRequestTarget target){} + protected void onSelectionPerformed(AjaxRequestTarget target, IModel> rowModel){} protected IModel getObjectSelectCheckBoxEnableModel(IModel> rowModel){ return Model.of(true); 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 index eba525a2e2a..2942c9f8f72 100644 --- 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 @@ -23,8 +23,8 @@ import com.evolveum.midpoint.web.component.TabbedPanel; import com.evolveum.midpoint.web.component.dialog.Popupable; import com.evolveum.midpoint.web.component.util.EnableBehaviour; +import com.evolveum.midpoint.web.component.util.SelectableBean; import com.evolveum.midpoint.web.component.util.VisibleBehaviour; -import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; @@ -34,8 +34,6 @@ import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.model.IModel; import org.apache.wicket.model.StringResourceModel; -import org.apache.wicket.protocol.http.ClientProperties; -import org.apache.wicket.protocol.http.WebSession; import java.util.*; @@ -123,11 +121,11 @@ protected List createAssignmentTabs() { @Override public WebMarkupContainer createPanel(String panelId) { - return new FocusTypeAssignmentPopupTabPanel(panelId, ObjectTypes.ROLE){ + return new FocusTypeAssignmentPopupTabPanel(panelId, ObjectTypes.ROLE){ private static final long serialVersionUID = 1L; @Override - protected void onSelectionPerformed(AjaxRequestTarget target){ + protected void onSelectionPerformed(AjaxRequestTarget target, IModel> rowModel){ tabLabelPanelUpdate(target); } @@ -152,11 +150,12 @@ public String getCount() { @Override public WebMarkupContainer createPanel(String panelId) { - return new FocusTypeAssignmentPopupTabPanel(panelId, ObjectTypes.ORG){ + return new FocusTypeAssignmentPopupTabPanel(panelId, ObjectTypes.ORG){ private static final long serialVersionUID = 1L; @Override - protected void onSelectionPerformed(AjaxRequestTarget target){ + protected void onSelectionPerformed(AjaxRequestTarget target, IModel> rowModel){ + selectedOrgsListUpdate(rowModel); tabLabelPanelUpdate(target); } @@ -169,7 +168,6 @@ protected ObjectTypes getObjectType(){ protected List getPreselectedObjects(){ return selectedOrgsList; } - }; } @@ -191,7 +189,8 @@ public WebMarkupContainer createPanel(String panelId) { private static final long serialVersionUID = 1L; @Override - protected void onOrgTreeCheckBoxSelectionPerformed(AjaxRequestTarget target){ + protected void onSelectionPerformed(AjaxRequestTarget target, IModel> rowModel){ + selectedOrgsListUpdate(rowModel); tabLabelPanelUpdate(target); } @@ -216,7 +215,7 @@ public String getCount() { @Override public WebMarkupContainer createPanel(String panelId) { - return new FocusTypeAssignmentPopupTabPanel(panelId, ObjectTypes.SERVICE){ + return new FocusTypeAssignmentPopupTabPanel(panelId, ObjectTypes.SERVICE){ private static final long serialVersionUID = 1L; @Override @@ -225,7 +224,7 @@ protected ObjectTypes getObjectType(){ } @Override - protected void onSelectionPerformed(AjaxRequestTarget target){ + protected void onSelectionPerformed(AjaxRequestTarget target, IModel> rowModel){ tabLabelPanelUpdate(target); } @@ -250,8 +249,8 @@ public WebMarkupContainer createPanel(String panelId) { private static final long serialVersionUID = 1L; @Override - protected void onSelectionPerformed(AjaxRequestTarget target){ - super.onSelectionPerformed(target); + protected void onSelectionPerformed(AjaxRequestTarget target, IModel> rowModel){ + super.onSelectionPerformed(target, rowModel); tabLabelPanelUpdate(target); } }; @@ -287,6 +286,17 @@ private void tabLabelPanelUpdate(AjaxRequestTarget target){ target.add(get(ID_FORM).get(ID_ASSIGN_BUTTON)); } + private void selectedOrgsListUpdate(IModel> rowModel){ + if (rowModel == null){ + return; + } + if (rowModel.getObject().isSelected()){ + selectedOrgsList.add(rowModel.getObject().getValue()); + } else { + selectedOrgsList.removeIf((OrgType org) -> org.getOid().equals(rowModel.getObject().getValue().getOid())); + } + } + private TabbedPanel getTabbedPanel(){ return (TabbedPanel) get(ID_FORM).get(ID_TABS_PANEL); } @@ -305,8 +315,8 @@ protected String load() { } private boolean isAssignButtonEnabled(){ - TabbedPanel tabbedPanel = getTabbedPanel(); - List tabs = (List) tabbedPanel.getTabs().getObject(); + TabbedPanel tabbedPanel = getTabbedPanel(); + List tabs = tabbedPanel.getTabs().getObject(); for (ITab tab : tabs){ WebMarkupContainer assignmentPanel = ((CountablePanelTab)tab).getPanel(); if (assignmentPanel == null){ diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ChooseMemberPopup.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ChooseMemberPopup.java index d45f9800cb8..225ec138c2b 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ChooseMemberPopup.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ChooseMemberPopup.java @@ -34,6 +34,7 @@ import com.evolveum.midpoint.web.component.TabbedPanel; import com.evolveum.midpoint.web.component.dialog.Popupable; import com.evolveum.midpoint.web.component.util.EnableBehaviour; +import com.evolveum.midpoint.web.component.util.SelectableBean; import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.apache.wicket.Component; @@ -148,11 +149,11 @@ protected List createAssignmentTabs() { @Override public WebMarkupContainer createPanel(String panelId) { - return new MemberPopupTabPanel(panelId, availableRelationList){ + return new MemberPopupTabPanel(panelId, availableRelationList){ private static final long serialVersionUID = 1L; @Override - protected void onSelectionPerformed(AjaxRequestTarget target){ + protected void onSelectionPerformed(AjaxRequestTarget target, IModel> rowModel){ tabLabelPanelUpdate(target); } @@ -180,11 +181,11 @@ public String getCount() { @Override public WebMarkupContainer createPanel(String panelId) { - return new MemberPopupTabPanel(panelId, availableRelationList){ + return new MemberPopupTabPanel(panelId, availableRelationList){ private static final long serialVersionUID = 1L; @Override - protected void onSelectionPerformed(AjaxRequestTarget target){ + protected void onSelectionPerformed(AjaxRequestTarget target, IModel> rowModel){ tabLabelPanelUpdate(target); } @@ -213,11 +214,11 @@ public String getCount() { @Override public WebMarkupContainer createPanel(String panelId) { - return new MemberPopupTabPanel(panelId, availableRelationList){ + return new MemberPopupTabPanel(panelId, availableRelationList){ private static final long serialVersionUID = 1L; @Override - protected void onSelectionPerformed(AjaxRequestTarget target){ + protected void onSelectionPerformed(AjaxRequestTarget target, IModel> rowModel){ tabLabelPanelUpdate(target); } @@ -285,7 +286,7 @@ public String getCount() { @Override public WebMarkupContainer createPanel(String panelId) { - return new MemberPopupTabPanel(panelId, availableRelationList){ + return new MemberPopupTabPanel(panelId, availableRelationList){ private static final long serialVersionUID = 1L; @Override @@ -299,7 +300,7 @@ protected ObjectTypes getObjectType(){ } @Override - protected void onSelectionPerformed(AjaxRequestTarget target){ + protected void onSelectionPerformed(AjaxRequestTarget target, IModel> rowModel){ tabLabelPanelUpdate(target); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ChooseOrgMemberPopup.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ChooseOrgMemberPopup.java index 3a1821fb802..d9beb18140d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ChooseOrgMemberPopup.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ChooseOrgMemberPopup.java @@ -23,11 +23,13 @@ * Created by honchar */ +import com.evolveum.midpoint.web.component.util.SelectableBean; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType; 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.model.IModel; import javax.xml.namespace.QName; import java.util.List; @@ -48,11 +50,11 @@ protected List createAssignmentTabs() { @Override public WebMarkupContainer createPanel(String panelId) { - return new MultiTypesMemberPopupTabPanel(panelId, availableRelationList){ + return new MultiTypesMemberPopupTabPanel(panelId, availableRelationList){ private static final long serialVersionUID = 1L; @Override - protected void onSelectionPerformed(AjaxRequestTarget target){ + protected void onSelectionPerformed(AjaxRequestTarget target, IModel> rowModel){ tabLabelPanelUpdate(target); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectBrowserPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectBrowserPanel.java index 643890f635f..a4ba0404bd6 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectBrowserPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectBrowserPanel.java @@ -178,7 +178,7 @@ private ObjectListPanel createObjectListPanel(ObjectTypes type, final boolean Class typeClass = type.getClassDefinition(); PopupObjectListPanel listPanel = new PopupObjectListPanel(ID_TABLE, typeClass, getOptions(), - multiselect, parentPage, selectedObjectsList) { + multiselect, parentPage) { private static final long serialVersionUID = 1L; @@ -197,6 +197,11 @@ protected ObjectQuery addFilterToContentQuery(ObjectQuery query) { } return query; } + + @Override + protected List getPreselectedObjectList(){ + return selectedObjectsList; + } }; listPanel.setOutputMarkupId(true); return listPanel; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectListPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectListPanel.java index fd7ff150b5e..8d1fcfb22cb 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectListPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectListPanel.java @@ -93,8 +93,6 @@ public abstract class ObjectListPanel extends BasePanel private TableId tableId; - protected List selectedObjects = null; - private String addutionalBoxCssClasses; public Class getType() { @@ -106,24 +104,23 @@ public Class getType() { */ public ObjectListPanel(String id, Class defaultType, TableId tableId, Collection> options, PageBase parentPage) { - this(id, defaultType, tableId, options, false, parentPage, null); + this(id, defaultType, tableId, options, false, parentPage); } /** * @param defaultType specifies type of the object that will be selected by default. It can be changed. */ ObjectListPanel(String id, Class defaultType, TableId tableId, boolean multiselect, PageBase parentPage) { - this(id, defaultType, tableId, null, multiselect, parentPage, null); + this(id, defaultType, tableId, null, multiselect, parentPage); } public ObjectListPanel(String id, Class defaultType, TableId tableId, Collection> options, - boolean multiselect, PageBase parentPage, List selectedObjectsList) { + boolean multiselect, PageBase parentPage) { super(id); this.type = defaultType != null ? ObjectTypes.getObjectType(defaultType) : null; this.parentPage = parentPage; this.options = options; this.multiselect = multiselect; - this.selectedObjects = selectedObjectsList; this.tableId = tableId; initLayout(); } @@ -134,7 +131,7 @@ public boolean isMultiselect() { public int getSelectedObjectsCount(){ List selectedList = getSelectedObjects(); - return selectedList == null ? 0 : selectedList.size(); + return selectedList.size(); } @SuppressWarnings("unchecked") @@ -383,9 +380,9 @@ protected List, String>> initColumns() { } protected BaseSortableDataProvider> initProvider() { - Set selectedObjectsSet = selectedObjects == null ? null : new HashSet<>(selectedObjects); + List preSelectedObjectList = getPreselectedObjectList(); SelectableBeanObjectDataProvider provider = new SelectableBeanObjectDataProvider( - parentPage, (Class) type.getClassDefinition(), selectedObjectsSet) { + parentPage, (Class) type.getClassDefinition(), preSelectedObjectList == null ? null : new HashSet<>(preSelectedObjectList)) { private static final long serialVersionUID = 1L; @Override @@ -439,6 +436,10 @@ protected List createObjectOrderings(SortParam sortParam return provider; } + protected List getPreselectedObjectList(){ + return null; + } + protected List createCustomOrdering(SortParam sortParam) { return null; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/OrgTreeAssignmentPopupTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/OrgTreeAssignmentPopupTabPanel.java index 31c73db50c5..a9f4bfe5fd4 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/OrgTreeAssignmentPopupTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/OrgTreeAssignmentPopupTabPanel.java @@ -46,36 +46,23 @@ public OrgTreeAssignmentPopupTabPanel(String id){ protected void onInitialize() { super.onInitialize(); OrgTreeAssignablePanel orgTreePanel = new OrgTreeAssignablePanel( - ID_ORG_TREE_VIEW_PANEL, true, getPageBase(), getPreselectedObjects()) { + ID_ORG_TREE_VIEW_PANEL, true, getPageBase()) { private static final long serialVersionUID = 1L; @Override protected void onOrgTreeCheckBoxSelectionPerformed(AjaxRequestTarget target, IModel> rowModel) { - if (rowModel != null && rowModel.getObject() != null) { - List preselectedObjects = getPreselectedObjects(); - if (preselectedObjects == null) { - preselectedObjects = new ArrayList<>(); - } - boolean isAlreadyInList = false; - Iterator it = preselectedObjects.iterator(); - while (it.hasNext()){ - OrgType org = it.next(); - if (org.getOid().equals(rowModel.getObject().getValue().getOid())) { - isAlreadyInList = true; - it.remove(); - } - } - if (!isAlreadyInList){ - preselectedObjects.add(rowModel.getObject().getValue()); - } - } - OrgTreeAssignmentPopupTabPanel.this.onOrgTreeCheckBoxSelectionPerformed(target); + onSelectionPerformed(target, rowModel); } @Override protected boolean isAssignButtonVisible(){ return false; } + + @Override + protected List getPreselectedOrgsList(){ + return getPreselectedObjects(); + } }; orgTreePanel.setOutputMarkupId(true); add(orgTreePanel); @@ -92,9 +79,11 @@ protected boolean isObjectListPanelVisible(){ return false; } - protected List getSelectedObjectsList(){ - return getPreselectedObjects(); + protected List getSelectedObjectsList(){ + if (get(ID_ORG_TREE_VIEW_PANEL) == null){ + return null; + } + return ((OrgTreeAssignablePanel)get(ID_ORG_TREE_VIEW_PANEL)).getAllTabPanelsSelectedOrgs(); } - protected void onOrgTreeCheckBoxSelectionPerformed(AjaxRequestTarget target){} } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/OrgTreeMemberPopupTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/OrgTreeMemberPopupTabPanel.java index 4c1d2ab1457..619e7305b1d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/OrgTreeMemberPopupTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/OrgTreeMemberPopupTabPanel.java @@ -45,7 +45,7 @@ public OrgTreeMemberPopupTabPanel(String id, List availableRelationList){ protected void onInitialize() { super.onInitialize(); OrgTreeAssignablePanel orgTreePanel = new OrgTreeAssignablePanel( - ID_ORG_TREE_VIEW_PANEL, true, getPageBase(), getPreselectedObjects()) { + ID_ORG_TREE_VIEW_PANEL, true, getPageBase()) { private static final long serialVersionUID = 1L; @Override @@ -71,6 +71,11 @@ protected void onOrgTreeCheckBoxSelectionPerformed(AjaxRequestTarget target, IMo OrgTreeMemberPopupTabPanel.this.onOrgTreeCheckBoxSelectionPerformed(target); } + @Override + protected List getPreselectedOrgsList(){ + return getPreselectedObjects(); + } + @Override protected boolean isAssignButtonVisible(){ return false; @@ -86,7 +91,7 @@ protected boolean isObjectListPanelVisible(){ return false; } - protected List getSelectedObjectsList(){ + protected List getSelectedObjectsList(){ return getPreselectedObjects(); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/PopupObjectListPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/PopupObjectListPanel.java index 2d452a5241c..9a01817040b 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/PopupObjectListPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/PopupObjectListPanel.java @@ -50,9 +50,8 @@ public PopupObjectListPanel(String id, Class defaultType, boolean m } public PopupObjectListPanel(String id, Class defaultType, Collection> options, - boolean multiselect, PageBase parentPage, List selectedObjectsList) { - super(id, defaultType, null, options, multiselect, parentPage, selectedObjectsList); - + boolean multiselect, PageBase parentPage) { + super(id, defaultType, null, options, multiselect, parentPage); } @Override @@ -62,42 +61,21 @@ protected IColumn, String> createCheckboxColumn() { private static final long serialVersionUID = 1L; @Override - protected void onUpdateRow(AjaxRequestTarget target, DataTable table, IModel> rowModel) { - super.onUpdateRow(target, table, rowModel); - onUpdateCheckbox(target); + protected void onUpdateRow(AjaxRequestTarget target, DataTable table, IModel> rowModel, IModel selected) { + super.onUpdateRow(target, table, rowModel, selected); + onUpdateCheckbox(target, rowModel); }; @Override protected void onUpdateHeader(AjaxRequestTarget target, boolean selected, DataTable table) { super.onUpdateHeader(target, selected, table); - onUpdateCheckbox(target); + onUpdateCheckbox(target, null); } @Override protected IModel getEnabled(IModel> rowModel) { return PopupObjectListPanel.this.getCheckBoxEnableModel(rowModel); } - - @Override - protected IModel getCheckBoxValueModel(IModel> rowModel){ - IModel model = super.getCheckBoxValueModel(rowModel); - if (selectedObjects != null && rowModel != null) { - boolean isInList = false; - for (O selectedObject : selectedObjects){ - if (rowModel.getObject().getValue().getOid().equals(selectedObject.getOid())){ - isInList = true; - break; - } - } - if (isInList){ - model.setObject(true); - } else { - model.setObject(false); - } - } - return model; - } - }; } return null; @@ -150,7 +128,7 @@ protected void addCustomActions(@NotNull List actionsList, Suppl } - protected void onUpdateCheckbox(AjaxRequestTarget target){ + protected void onUpdateCheckbox(AjaxRequestTarget target, IModel> rowModel){ } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ResourceTypeAssignmentPopupTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ResourceTypeAssignmentPopupTabPanel.java index 103dcfb3f41..2cf15f560b0 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ResourceTypeAssignmentPopupTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ResourceTypeAssignmentPopupTabPanel.java @@ -30,10 +30,7 @@ import com.evolveum.midpoint.web.component.util.SelectableBean; import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnChangeAjaxFormUpdatingBehavior; -import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowKindType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.markup.html.WebMarkupContainer; @@ -192,7 +189,7 @@ protected ObjectTypes getObjectType(){ } @Override - protected void onSelectionPerformed(AjaxRequestTarget target){ + protected void onSelectionPerformed(AjaxRequestTarget target, IModel> rowModel){ target.add(getObjectListPanel()); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/TypedAssignablePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/TypedAssignablePanel.java index 33fc2f84b1b..d4eefd45f3d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/TypedAssignablePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/TypedAssignablePanel.java @@ -415,7 +415,7 @@ private PopupObjectListPanel createObjectListPanel(String id, final String co private static final long serialVersionUID = 1L; @Override - protected void onUpdateCheckbox(AjaxRequestTarget target) { + protected void onUpdateCheckbox(AjaxRequestTarget target, IModel> rowModel) { if (type.equals(ObjectTypes.RESOURCE)) { target.add(TypedAssignablePanel.this); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/TabbedPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/TabbedPanel.java index 19f0050460a..96e017103c3 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/TabbedPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/TabbedPanel.java @@ -16,6 +16,7 @@ package com.evolveum.midpoint.web.component; +import com.evolveum.midpoint.gui.api.component.BasePanel; import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; import org.apache.wicket.WicketRuntimeException; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/CheckBoxColumn.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/CheckBoxColumn.java index 86509116e24..51aedf6081c 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/CheckBoxColumn.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/CheckBoxColumn.java @@ -56,7 +56,7 @@ public void populateItem(final Item> cellItem, String componen @Override public void onUpdate(AjaxRequestTarget target) { DataTable table = findParent(DataTable.class); - onUpdateRow(target, table, rowModel); + onUpdateRow(target, table, rowModel, selected); //updating table row // target.add(cellItem.findParent(SelectableDataTable.SelectableRowItem.class)); @@ -89,7 +89,7 @@ public void setEnabled(boolean enabled) { this.enabled.setObject(enabled); } - protected void onUpdateRow(AjaxRequestTarget target, DataTable table, IModel rowModel) { + protected void onUpdateRow(AjaxRequestTarget target, DataTable table, IModel rowModel, IModel selected) { } protected String getPropertyExpression() { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/CheckBoxHeaderColumn.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/CheckBoxHeaderColumn.java index 99ee356d73b..c2b9d4cc2de 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/CheckBoxHeaderColumn.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/CheckBoxHeaderColumn.java @@ -160,7 +160,7 @@ protected boolean isTableRowSelected(T object){ * This method is called after checkbox in row is updated */ @Override - protected void onUpdateRow(AjaxRequestTarget target, DataTable table, IModel rowModel) { + protected void onUpdateRow(AjaxRequestTarget target, DataTable table, IModel rowModel, IModel selected) { //update header checkbox IsolatedCheckBoxPanel header = findCheckBoxColumnHeader(table); if (header == null) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/orgs/OrgTreeAssignablePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/orgs/OrgTreeAssignablePanel.java index 2f94db98b05..346c3410866 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/orgs/OrgTreeAssignablePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/orgs/OrgTreeAssignablePanel.java @@ -15,8 +15,7 @@ */ package com.evolveum.midpoint.web.page.admin.orgs; -import java.util.ArrayList; -import java.util.List; +import java.util.*; import com.evolveum.midpoint.gui.api.model.LoadableModel; import com.evolveum.midpoint.web.session.UsersStorage; @@ -50,29 +49,26 @@ public class OrgTreeAssignablePanel extends BasePanel implements Popupa private static final String ID_ORG_TABS = "orgTabs"; private static final String ID_ASSIGN = "assign"; private boolean selectable; - private List selectedOrgsList; + List allTabsSelectedOrgs = new ArrayList<>(); public OrgTreeAssignablePanel(String id, boolean selectable, PageBase parentPage) { - this(id, selectable, parentPage, null); - } - - public OrgTreeAssignablePanel(String id, boolean selectable, PageBase parentPage, List selectedOrgsList){ super(id); this.selectable = selectable; - this.selectedOrgsList = selectedOrgsList; setParent(parentPage); initLayout(); } private void initLayout() { - + if (getPreselectedOrgsList() != null) { + allTabsSelectedOrgs.addAll(getPreselectedOrgsList()); + } AbstractOrgTabPanel tabbedPanel = new AbstractOrgTabPanel(ID_ORG_TABS, getPageBase()) { private static final long serialVersionUID = 1L; @Override protected Panel createTreePanel(String id, Model model, PageBase pageBase) { - OrgTreePanel panel = new OrgTreePanel(id, model, selectable, pageBase) { + OrgTreePanel panel = new OrgTreePanel(id, model, selectable, pageBase, "", allTabsSelectedOrgs) { private static final long serialVersionUID = 1L; @Override @@ -81,22 +77,32 @@ protected IModel getCheckBoxValueModel(IModel> @Override public Boolean load() { - boolean isSelected = false; - if (selectedOrgsList != null) { - for (OrgType org : selectedOrgsList) - if (rowModel.getObject().getValue().getOid().equals(org.getOid())){ - isSelected = true; - break; - } + for (OrgType org : allTabsSelectedOrgs){ + if (rowModel.getObject().getValue().getOid().equals(org.getOid())) { + return true; } - return isSelected; - + } + return false; } }; } @Override protected void onOrgTreeCheckBoxSelectionPerformed(AjaxRequestTarget target, IModel> rowModel){ + if (rowModel != null && rowModel.getObject() != null) { + boolean isAlreadyInList = false; + Iterator it = allTabsSelectedOrgs.iterator(); + while (it.hasNext()){ + OrgType org = it.next(); + if (org.getOid().equals(rowModel.getObject().getValue().getOid())) { + isAlreadyInList = true; + it.remove(); + } + } + if (!isAlreadyInList){ + allTabsSelectedOrgs.add(rowModel.getObject().getValue()); + } + } OrgTreeAssignablePanel.this.onOrgTreeCheckBoxSelectionPerformed(target, rowModel); } }; @@ -127,14 +133,7 @@ protected UsersStorage getUsersSessionStorage(){ @Override public void onClick(AjaxRequestTarget target) { - AbstractOrgTabPanel orgPanel = (AbstractOrgTabPanel) getParent().get(ID_ORG_TABS); - Panel treePanel = orgPanel.getPanel(); - List selectedOrgs = new ArrayList<>(); - if (treePanel != null && treePanel instanceof OrgTreePanel) { - selectedOrgs = ((OrgTreePanel)treePanel).getSelectedOrgs(); - } - assignSelectedOrgPerformed(selectedOrgs, target); - + assignSelectedOrgPerformed(getAllTabPanelsSelectedOrgs(), target); } }; assignButton.setOutputMarkupId(true); @@ -158,10 +157,18 @@ protected void assignSelectedOrgPerformed(List selectedOrgs, AjaxReques } + public List getAllTabPanelsSelectedOrgs(){ + return allTabsSelectedOrgs; + } + protected void onItemSelect(SelectableBean selected, AjaxRequestTarget target) { } + protected List getPreselectedOrgsList(){ + return null; + } + protected void onOrgTreeCheckBoxSelectionPerformed(AjaxRequestTarget target, IModel> rowModel){} @Override diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/orgs/OrgTreePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/orgs/OrgTreePanel.java index 4fd5f000210..658c72812b3 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/orgs/OrgTreePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/orgs/OrgTreePanel.java @@ -70,6 +70,7 @@ public class OrgTreePanel extends AbstractTreeTablePanel { private boolean selectable; private String treeTitleKey = ""; SessionStorage storage; + List preselecteOrgsList = new ArrayList<>(); public OrgTreePanel(String id, IModel rootOid, boolean selectable, ModelServiceLocator serviceLocator) { @@ -77,6 +78,11 @@ public OrgTreePanel(String id, IModel rootOid, boolean selectable, Model } public OrgTreePanel(String id, IModel rootOid, boolean selectable, ModelServiceLocator serviceLocator, String treeTitleKey) { + this(id, rootOid, selectable, serviceLocator, "", new ArrayList<>()); + } + + public OrgTreePanel(String id, IModel rootOid, boolean selectable, ModelServiceLocator serviceLocator, String treeTitleKey, + List preselecteOrgsList) { super(id, rootOid); MidPointAuthWebSession session = OrgTreePanel.this.getSession(); @@ -84,6 +90,9 @@ public OrgTreePanel(String id, IModel rootOid, boolean selectable, Model this.treeTitleKey = treeTitleKey; this.selectable = selectable; + if (preselecteOrgsList != null){ + this.preselecteOrgsList.addAll(preselecteOrgsList); + } selected = new LoadableModel>() { private static final long serialVersionUID = 1L; @@ -139,7 +148,7 @@ private void initLayout(ModelServiceLocator serviceLocator) { new Model<>((Serializable) createTreeMenuInternal(serviceLocator.getAdminGuiConfiguration()))); treeHeader.add(treeMenu); - ISortableTreeProvider provider = new OrgTreeProvider(this, getModel()) { + ISortableTreeProvider provider = new OrgTreeProvider(this, getModel(), preselecteOrgsList) { private static final long serialVersionUID = 1L; @Override @@ -159,8 +168,9 @@ protected IModel getCheckBoxValueModel(IModel> } @Override - protected void onUpdateRow(AjaxRequestTarget target, DataTable table, IModel> rowModel) { - super.onUpdateRow(target, table, rowModel); + protected void onUpdateRow(AjaxRequestTarget target, DataTable table, IModel> rowModel, IModel selected) { + super.onUpdateRow(target, table, rowModel, selected); + rowModel.getObject().setSelected(selected.getObject()); onOrgTreeCheckBoxSelectionPerformed(target, rowModel); } }); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTasks.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTasks.java index 425925e9261..a4259f33764 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTasks.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTasks.java @@ -526,7 +526,7 @@ private List> initTaskColumns() { private static final long serialVersionUID = 1L; @Override - protected void onUpdateRow(AjaxRequestTarget target, DataTable table, IModel rowModel) { + protected void onUpdateRow(AjaxRequestTarget target, DataTable table, IModel rowModel, IModel selectedModel) { TaskDtoProvider taskTableProvider = (TaskDtoProvider) table.getDataProvider(); List objects = taskTableProvider.getAvailableData(); if (objects == null || objects.isEmpty()) { @@ -538,7 +538,7 @@ protected void onUpdateRow(AjaxRequestTarget target, DataTable table, IModel rootOid; private SelectableBean root; + private List selectedOrgs = new ArrayList<>(); - private List> availableData; + private Map> availableData; - public OrgTreeProvider(Component component, IModel rootOid) { + public OrgTreeProvider(Component component, IModel rootOid, List selectedOrgs) { this.component = component; this.rootOid = rootOid; + if (selectedOrgs != null) { + this.selectedOrgs.addAll(selectedOrgs); + } } - public List> getAvailableData() { + public Map> getAvailableData() { if (availableData == null){ - availableData = new ArrayList<>(); + availableData = new HashMap<>(); } return availableData; } @@ -139,7 +143,9 @@ public int compare(PrismObject o1, PrismObject o2) { getPageBase().showResult(result); throw new RestartResponseException(PageOrgTree.class); } - getAvailableData().addAll(children); + children.forEach(orgUnit -> { + getAvailableData().putIfAbsent(orgUnit.getValue().getOid(), orgUnit); + }); } LOGGER.debug("Finished getting children."); lastFetchOperation = System.currentTimeMillis(); @@ -192,8 +198,8 @@ public Iterator> getRoots() { List> list = new ArrayList<>(); if (root != null) { list.add(root); - if (!getAvailableData().contains(root)){ - getAvailableData().add(root); + if (!getAvailableData().containsKey(root.getValue().getOid())){ + getAvailableData().put(root.getValue().getOid(), root); } } @@ -211,13 +217,12 @@ public IModel> model(SelectableBean object) { } public List getSelectedObjects(){ - List selectedOrgs = new ArrayList<>(); - for (SelectableBean selected : getAvailableData()){ + List selectedOrgs = new ArrayList<>(); + for (SelectableBean selected : getAvailableData().values()){ if (selected.isSelected() && selected.getValue() != null) { selectedOrgs.add(selected.getValue()); } } - return selectedOrgs; } }