Skip to content

Commit

Permalink
MID-3687 fix (Setting target as shadow at audit log results into NPE)
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Jun 20, 2017
1 parent 664a61f commit 8eae163
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 23 deletions.
Expand Up @@ -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;
Expand All @@ -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<O extends ObjectType> extends BasePanel<O> implements Popupable{
public class ObjectBrowserPanel<O extends ObjectType> extends BasePanel<O> implements Popupable {

private static final long serialVersionUID = 1L;
private static final String ID_TYPE = "type";
Expand All @@ -61,23 +67,23 @@ public class ObjectBrowserPanel<O extends ObjectType> extends BasePanel<O> imple
* @param defaultType specifies type of the object that will be selected by default
*/
public ObjectBrowserPanel(String id, final Class<? extends O> defaultType, List<QName> supportedTypes, boolean multiselect,
PageBase parentPage) {
PageBase parentPage) {
this(id, defaultType, supportedTypes, multiselect, parentPage, null);
}

/**
* @param defaultType specifies type of the object that will be selected by default
*/
public ObjectBrowserPanel(String id, final Class<? extends O> defaultType, List<QName> supportedTypes, boolean multiselect,
PageBase parentPage, ObjectFilter queryFilter) {
PageBase parentPage, ObjectFilter queryFilter) {
this(id, defaultType, supportedTypes, multiselect, parentPage, null, new ArrayList<O>());
}

public ObjectBrowserPanel(String id, final Class<? extends O> defaultType, List<QName> supportedTypes, boolean multiselect,
PageBase parentPage, ObjectFilter queryFilter, List<O> selectedData) {
PageBase parentPage, ObjectFilter queryFilter, List<O> selectedData) {
super(id);
this.parentPage = parentPage;
this.queryFilter = queryFilter;
this.queryFilter = queryFilter;
this.selectedObjectsList = selectedData;
typeModel = new LoadableModel<QName>(false) {
private static final long serialVersionUID = 1L;
Expand All @@ -98,6 +104,7 @@ private void initLayout(Class<? extends O> type, final List<QName> supportedType
typePanel.setOutputMarkupId(true);
typePanel.add(new VisibleEnableBehaviour() {
private static final long serialVersionUID = 1L;

@Override
public boolean isVisible() {
return supportedTypes.size() != 1;
Expand Down Expand Up @@ -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<O> selected = ((PopupObjectListPanel) getParent().get(ID_TABLE)).getSelectedObjects();
Expand Down Expand Up @@ -159,25 +167,26 @@ protected void onSelectPerformed(AjaxRequestTarget target, O focus) {

private ObjectListPanel<O> createObjectListPanel(Class<? extends O> type, final boolean multiselect) {

PopupObjectListPanel<O> listPanel = new PopupObjectListPanel<O>(ID_TABLE, type, multiselect,
parentPage, selectedObjectsList) {
PopupObjectListPanel<O> listPanel = new PopupObjectListPanel<O>(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;
}
Expand All @@ -190,6 +199,14 @@ private Class qnameToCompileTimeClass(QName typeName) {
return parentPage.getPrismContext().getSchemaRegistry().getCompileTimeClassForObjectType(typeName);
}

private Collection<SelectorOptions<GetOperationOptions>> getOptions() {
if (ObjectTypes.SHADOW.getTypeQName().equals(typeModel.getObject())) {
return SelectorOptions.createCollection(new ItemPath(), GetOperationOptions.createRaw());
}
return null;

}

private QName compileTimeClassToQName(Class<? extends O> type) {
PrismObjectDefinition def = parentPage.getPrismContext().getSchemaRegistry()
.findObjectDefinitionByCompileTimeClass(type);
Expand Down
Expand Up @@ -110,11 +110,12 @@ public ObjectListPanel(String id, Class<? extends O> defaultType, TableId tableI
initLayout();
}

public ObjectListPanel(String id, Class<? extends O> defaultType, boolean multiselect,
PageBase parentPage, List<O> selectedObjectsList) {
public ObjectListPanel(String id, Class<? extends O> defaultType, Collection<SelectorOptions<GetOperationOptions>> options,
boolean multiselect, PageBase parentPage, List<O> selectedObjectsList) {
super(id);
this.type = defaultType;
this.parentPage = parentPage;
this.options = options;
this.multiselect = multiselect;
this.selectedObjects = selectedObjectsList;
initLayout();
Expand Down
Expand Up @@ -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;
Expand All @@ -43,9 +46,9 @@ public PopupObjectListPanel(String id, Class<? extends O> defaultType, boolean m

}

public PopupObjectListPanel(String id, Class<? extends O> defaultType, boolean multiselect,
PageBase parentPage, List<O> selectedObjectsList) {
super(id, defaultType, multiselect, parentPage, selectedObjectsList);
public PopupObjectListPanel(String id, Class<? extends O> defaultType, Collection<SelectorOptions<GetOperationOptions>> options,
boolean multiselect, PageBase parentPage, List<O> selectedObjectsList) {
super(id, defaultType, options, multiselect, parentPage, selectedObjectsList);

}

Expand Down
Expand Up @@ -124,6 +124,7 @@ protected void initSearch(Form form) {

/// TODO: move to utils class??
List<ObjectTypes> 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<ObjectTypes>() {

Expand Down

0 comments on commit 8eae163

Please sign in to comment.