From 8eae163bcba499b25aac92edea7359f1508f64dd Mon Sep 17 00:00:00 2001 From: honchar Date: Tue, 20 Jun 2017 13:45:03 +0200 Subject: [PATCH] MID-3687 fix (Setting target as shadow at audit log results into NPE) --- .../gui/api/component/ObjectBrowserPanel.java | 53 ++++++++++++------- .../gui/api/component/ObjectListPanel.java | 5 +- .../api/component/PopupObjectListPanel.java | 9 ++-- .../admin/users/component/OrgMemberPanel.java | 1 + 4 files changed, 45 insertions(+), 23 deletions(-) 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 97e42c136d8..829e39f9eab 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 @@ -16,13 +16,19 @@ package com.evolveum.midpoint.gui.api.component; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import javax.xml.namespace.QName; +import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.query.ObjectFilter; import com.evolveum.midpoint.prism.query.ObjectQuery; +import com.evolveum.midpoint.schema.GetOperationOptions; +import com.evolveum.midpoint.schema.SelectorOptions; +import com.evolveum.midpoint.schema.constants.ObjectTypes; +import com.evolveum.midpoint.web.component.data.SelectableBeanObjectDataProvider; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.OnChangeAjaxBehavior; @@ -42,7 +48,7 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; -public class ObjectBrowserPanel extends BasePanel implements Popupable{ +public class ObjectBrowserPanel extends BasePanel implements Popupable { private static final long serialVersionUID = 1L; private static final String ID_TYPE = "type"; @@ -61,7 +67,7 @@ public class ObjectBrowserPanel extends BasePanel imple * @param defaultType specifies type of the object that will be selected by default */ public ObjectBrowserPanel(String id, final Class defaultType, List supportedTypes, boolean multiselect, - PageBase parentPage) { + PageBase parentPage) { this(id, defaultType, supportedTypes, multiselect, parentPage, null); } @@ -69,15 +75,15 @@ public ObjectBrowserPanel(String id, final Class defaultType, List< * @param defaultType specifies type of the object that will be selected by default */ public ObjectBrowserPanel(String id, final Class defaultType, List supportedTypes, boolean multiselect, - PageBase parentPage, ObjectFilter queryFilter) { + PageBase parentPage, ObjectFilter queryFilter) { this(id, defaultType, supportedTypes, multiselect, parentPage, null, new ArrayList()); } public ObjectBrowserPanel(String id, final Class defaultType, List supportedTypes, boolean multiselect, - PageBase parentPage, ObjectFilter queryFilter, List selectedData) { + PageBase parentPage, ObjectFilter queryFilter, List selectedData) { super(id); this.parentPage = parentPage; - this.queryFilter = queryFilter; + this.queryFilter = queryFilter; this.selectedObjectsList = selectedData; typeModel = new LoadableModel(false) { private static final long serialVersionUID = 1L; @@ -98,6 +104,7 @@ private void initLayout(Class type, final List supportedType typePanel.setOutputMarkupId(true); typePanel.add(new VisibleEnableBehaviour() { private static final long serialVersionUID = 1L; + @Override public boolean isVisible() { return supportedTypes.size() != 1; @@ -129,6 +136,7 @@ protected void onUpdate(AjaxRequestTarget target) { createStringResource("userBrowserDialog.button.addButton")) { private static final long serialVersionUID = 1L; + @Override public void onClick(AjaxRequestTarget target) { List selected = ((PopupObjectListPanel) getParent().get(ID_TABLE)).getSelectedObjects(); @@ -159,25 +167,26 @@ protected void onSelectPerformed(AjaxRequestTarget target, O focus) { private ObjectListPanel createObjectListPanel(Class type, final boolean multiselect) { - PopupObjectListPanel listPanel = new PopupObjectListPanel(ID_TABLE, type, multiselect, - parentPage, selectedObjectsList) { + PopupObjectListPanel listPanel = new PopupObjectListPanel(ID_TABLE, type, getOptions(), + multiselect, parentPage, selectedObjectsList) { private static final long serialVersionUID = 1L; + @Override protected void onSelectPerformed(AjaxRequestTarget target, O object) { ObjectBrowserPanel.this.onSelectPerformed(target, object); } - @Override - protected ObjectQuery addFilterToContentQuery(ObjectQuery query) { - if (queryFilter != null){ - if (query == null){ - query = new ObjectQuery(); - } - query.addFilter(queryFilter); - } - return query; - } - }; + @Override + protected ObjectQuery addFilterToContentQuery(ObjectQuery query) { + if (queryFilter != null) { + if (query == null) { + query = new ObjectQuery(); + } + query.addFilter(queryFilter); + } + return query; + } + }; listPanel.setOutputMarkupId(true); return listPanel; } @@ -190,6 +199,14 @@ private Class qnameToCompileTimeClass(QName typeName) { return parentPage.getPrismContext().getSchemaRegistry().getCompileTimeClassForObjectType(typeName); } + private Collection> getOptions() { + if (ObjectTypes.SHADOW.getTypeQName().equals(typeModel.getObject())) { + return SelectorOptions.createCollection(new ItemPath(), GetOperationOptions.createRaw()); + } + return null; + + } + private QName compileTimeClassToQName(Class type) { PrismObjectDefinition def = parentPage.getPrismContext().getSchemaRegistry() .findObjectDefinitionByCompileTimeClass(type); 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 7ac3f13dc3b..5544d0e49dc 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 @@ -110,11 +110,12 @@ public ObjectListPanel(String id, Class defaultType, TableId tableI initLayout(); } - public ObjectListPanel(String id, Class defaultType, boolean multiselect, - PageBase parentPage, List selectedObjectsList) { + public ObjectListPanel(String id, Class defaultType, Collection> options, + boolean multiselect, PageBase parentPage, List selectedObjectsList) { super(id); this.type = defaultType; this.parentPage = parentPage; + this.options = options; this.multiselect = multiselect; this.selectedObjects = selectedObjectsList; initLayout(); 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 d4b52b1b1d8..89c6857c921 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 @@ -15,8 +15,11 @@ */ package com.evolveum.midpoint.gui.api.component; +import java.util.Collection; import java.util.List; +import com.evolveum.midpoint.schema.GetOperationOptions; +import com.evolveum.midpoint.schema.SelectorOptions; import org.apache.commons.lang3.StringUtils; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable; @@ -43,9 +46,9 @@ public PopupObjectListPanel(String id, Class defaultType, boolean m } - public PopupObjectListPanel(String id, Class defaultType, boolean multiselect, - PageBase parentPage, List selectedObjectsList) { - super(id, defaultType, multiselect, parentPage, selectedObjectsList); + public PopupObjectListPanel(String id, Class defaultType, Collection> options, + boolean multiselect, PageBase parentPage, List selectedObjectsList) { + super(id, defaultType, options, multiselect, parentPage, selectedObjectsList); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java index 710f6836dc9..0901df32c47 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java @@ -124,6 +124,7 @@ protected void initSearch(Form form) { /// TODO: move to utils class?? List objectTypes = new ArrayList<>(Arrays.asList(ObjectTypes.values())); + //fix for MID-3629 (we don't know the resource to search shadows on) objectTypes.remove(ObjectTypes.SHADOW); Collections.sort(objectTypes, new Comparator() {