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 3fa8e93da40..33d97c79496 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 @@ -411,11 +411,11 @@ protected List createObjectOrderings(SortParam sortParam } }; if (options == null){ - if (ResourceType.class.equals(type)) { + if (ResourceType.class.equals(type.getClassDefinition())) { options = SelectorOptions.createCollection(GetOperationOptions.createNoFetch()); } } else { - if (ResourceType.class.equals(type)) { + if (ResourceType.class.equals(type.getClassDefinition())) { GetOperationOptions root = SelectorOptions.findRootOptions(options); root.setNoFetch(Boolean.TRUE); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java index 20de8054c4d..3358f797ab8 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java @@ -2405,7 +2405,7 @@ public static ItemVisibility checkShadowActivationAndPasswordVisibility(ItemWrap } - public static List getCategoryRelationChoices(AreaCategoryType category, OperationResult result, PageBase pageBase){ + public static List getCategoryRelationChoices(AreaCategoryType category, OperationResult result, ModelServiceLocator pageBase){ List relationsList = new ArrayList<>(); List defList = getRelationDefinitions(result, pageBase); if (defList != null) { @@ -2417,8 +2417,16 @@ public static List getCategoryRelationChoices(AreaCategoryType category, } return relationsList; } + + public static List getAllRelations(ModelServiceLocator pageBase) { + OperationResult result = new OperationResult("get all relations"); + List allRelationdefinitions = getRelationDefinitions(result, pageBase); + List allRelationsQName = new ArrayList<>(allRelationdefinitions.size()); + allRelationdefinitions.stream().forEach(relation -> allRelationsQName.add(relation.getRef())); + return allRelationsQName; + } - public static List getRelationDefinitions(OperationResult result, PageBase pageBase){ + public static List getRelationDefinitions(OperationResult result, ModelServiceLocator pageBase){ try { return pageBase.getModelInteractionService().getRelationDefinitions(result); } catch (ObjectNotFoundException | SchemaException ex){ diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanel.java index 348ee81096b..29f39dc1f18 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanel.java @@ -21,7 +21,9 @@ import javax.xml.namespace.QName; +import org.apache.commons.lang3.StringUtils; import org.apache.wicket.AttributeModifier; +import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.markup.html.WebMarkupContainer; @@ -36,6 +38,7 @@ import com.evolveum.midpoint.gui.api.GuiStyleConstants; import com.evolveum.midpoint.gui.api.component.BasePanel; +import com.evolveum.midpoint.gui.api.component.ObjectListPanel; import com.evolveum.midpoint.gui.api.model.LoadableModel; import com.evolveum.midpoint.gui.impl.model.PropertyWrapperFromContainerValueWrapperModel; import com.evolveum.midpoint.gui.impl.util.GuiImplUtil; @@ -50,7 +53,9 @@ import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.web.component.AjaxButton; import com.evolveum.midpoint.web.component.AjaxIconButton; +import com.evolveum.midpoint.web.component.data.BaseSortableDataProvider; import com.evolveum.midpoint.web.component.data.BoxedTablePanel; +import com.evolveum.midpoint.web.component.data.Table; import com.evolveum.midpoint.web.component.data.column.ColumnMenuAction; import com.evolveum.midpoint.web.component.data.column.DoubleButtonColumn; import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem; @@ -61,10 +66,15 @@ import com.evolveum.midpoint.web.component.prism.ObjectWrapper; import com.evolveum.midpoint.web.component.prism.ValueStatus; import com.evolveum.midpoint.web.component.prism.ValueWrapper; +import com.evolveum.midpoint.web.component.search.Search; +import com.evolveum.midpoint.web.component.search.SearchFactory; +import com.evolveum.midpoint.web.component.search.SearchFormPanel; import com.evolveum.midpoint.web.component.util.MultivalueContainerListDataProvider; +import com.evolveum.midpoint.web.component.util.SelectableBean; import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.web.session.PageStorage; import com.evolveum.midpoint.web.session.UserProfileStorage.TableId; +import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; import com.evolveum.midpoint.xml.ns._public.common.common_3.GlobalPolicyRuleType; import com.evolveum.midpoint.xml.ns._public.common.common_3.PolicyRuleType; @@ -88,16 +98,31 @@ public abstract class MultivalueContainerListPanel exte private int itemPerPage; private PageStorage pageStorage; + private LoadableModel searchModel = null; + public MultivalueContainerListPanel(String id, IModel> model, TableId tableId, int itemPerPage, PageStorage pageStorage) { super(id, model); this.tableId = tableId; this.itemPerPage = itemPerPage; this.pageStorage = pageStorage; + + searchModel = new LoadableModel(false) { + + private static final long serialVersionUID = 1L; + + @Override + protected Search load() { + return SearchFactory.createContainerSearch(getModelObject().getItem().getCompileTimeClass(), getPageBase()); + } + }; } @Override protected void onInitialize() { super.onInitialize(); + + + initPaging(); initLayout(); } @@ -181,7 +206,7 @@ protected void saveProviderPaging(ObjectQuery query, ObjectPaging paging) { @Override public ObjectQuery getQuery() { - return createQuery(); + return MultivalueContainerListPanel.this.getQuery(); } @Override @@ -198,6 +223,11 @@ protected List> searchThroughList() { containersProvider, columns, tableId, itemPerPage) { private static final long serialVersionUID = 1L; + @Override + protected WebMarkupContainer createHeader(String headerId) { + return MultivalueContainerListPanel.this.initSearch(headerId); + } + @Override public int getItemsPerPage() { return getPageBase().getSessionStorage().getUserProfile().getTables() @@ -251,6 +281,58 @@ public boolean isVisible() { } + protected WebMarkupContainer initSearch(String headerId) { + SearchFormPanel searchPanel = new SearchFormPanel(headerId, searchModel) { + + private static final long serialVersionUID = 1L; + + @Override + protected void searchPerformed(ObjectQuery query, AjaxRequestTarget target) { + MultivalueContainerListPanel.this.searchPerformed(query, target); + } + }; + return searchPanel; + } + + private void searchPerformed(ObjectQuery query, AjaxRequestTarget target) { + + MultivalueContainerListDataProvider provider = getDataProvider(); + + ObjectQuery customQuery = getQuery(); + + if (customQuery == null || customQuery.getFilter() == null) { + customQuery = createQuery(); + } + + provider.setQuery(customQuery); +// String storageKey = getStorageKey(); +// if (StringUtils.isNotEmpty(storageKey)) { +// PageStorage storage = getPageStorage(storageKey); +// if (storage != null) { +// storage.setSearch(searchModel.getObject()); +// storage.setPaging(null); +// } +// } +// + Table table = getItemTable(); + table.setCurrentPage(null); + target.add((Component) table); + target.add(getPageBase().getFeedbackPanel()); + + } + + private ObjectQuery getQuery() { + Search search = searchModel.getObject(); + ObjectQuery query = search.createObjectQuery(getPageBase().getPrismContext()); +// query = addFilterToContentQuery(query); + return query; + } + + private MultivalueContainerListDataProvider getDataProvider() { + return (MultivalueContainerListDataProvider) getItemTable().getDataTable().getDataProvider(); + } + + private IModel createStyleClassModelForNewObjectIcon() { return new AbstractReadOnlyModel() { private static final long serialVersionUID = 1L; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.java index 0e5331f8e58..258d46560e3 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.java @@ -34,6 +34,9 @@ import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.web.component.objectdetails.FocusMainPanel; import com.evolveum.midpoint.web.component.prism.*; +import com.evolveum.midpoint.web.component.search.Search; +import com.evolveum.midpoint.web.component.search.SearchFactory; +import com.evolveum.midpoint.web.component.search.SearchFormPanel; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.apache.commons.lang.StringUtils; import org.apache.wicket.ajax.AjaxRequestTarget; @@ -152,7 +155,7 @@ protected MultivalueContainerDetailsPanel getMultivalueContainer ListItem> item) { return createMultivalueContainerDetailsPanel(item); } - + }; add(multivalueContainerListPanel); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/ReferencePopupPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/ReferencePopupPanel.html new file mode 100644 index 00000000000..8a2648db32f --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/ReferencePopupPanel.html @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/ReferencePopupPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/ReferencePopupPanel.java new file mode 100644 index 00000000000..8a6282a2272 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/ReferencePopupPanel.java @@ -0,0 +1,66 @@ +package com.evolveum.midpoint.web.component.search; + +import java.io.Serializable; + +import javax.xml.namespace.QName; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; +import org.apache.wicket.markup.html.form.DropDownChoice; +import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.PropertyModel; + +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.web.component.input.QNameObjectTypeChoiceRenderer; + +public class ReferencePopupPanel extends SearchPopupPanel{ + + private static final long serialVersionUID = 1L; + + private static final String ID_OID = "oid"; + private static final String ID_TYPE = "type"; + private static final String ID_RELATION = "relation"; + + + public ReferencePopupPanel(String id, IModel model) { + super(id, model); + } + + @Override + protected void onInitialize() { + super.onInitialize(); + initLayout(); + } + + private void initLayout() { + + TextField oidField = new TextField(ID_OID, new PropertyModel<>(getModel(), SearchValue.F_VALUE + ".oid")); + + oidField.add(new AjaxFormComponentUpdatingBehavior("blur") { + + private static final long serialVersionUID = 1L; + + @Override + protected void onUpdate(AjaxRequestTarget target) { + + } + }); + oidField.setOutputMarkupId(true); + add(oidField); + + DropDownChoice type = new DropDownChoice<>(ID_TYPE, new PropertyModel(getModel(), SearchValue.F_VALUE + ".type"), + WebComponentUtil.createFocusTypeList(), new QNameObjectTypeChoiceRenderer()); + type.setNullValid(true); + type.setOutputMarkupId(true); + add(type); + + DropDownChoice relation = new DropDownChoice<>(ID_RELATION, new PropertyModel(getModel(), SearchValue.F_VALUE + ".relation"), + WebComponentUtil.getAllRelations(getPageBase()), new QNameObjectTypeChoiceRenderer()); + relation.setNullValid(true); + relation.setOutputMarkupId(true); + add(relation); + } + + +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/Search.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/Search.java index 879763a8f4a..af9ebfd7a0a 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/Search.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/Search.java @@ -16,11 +16,29 @@ package com.evolveum.midpoint.web.component.search; -import com.evolveum.midpoint.prism.*; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.builder.ToStringBuilder; + +import com.evolveum.midpoint.prism.Containerable; +import com.evolveum.midpoint.prism.ItemDefinition; +import com.evolveum.midpoint.prism.PrismContext; +import com.evolveum.midpoint.prism.PrismPropertyDefinition; +import com.evolveum.midpoint.prism.PrismReferenceDefinition; +import com.evolveum.midpoint.prism.PrismReferenceValue; import com.evolveum.midpoint.prism.marshaller.QueryConvertor; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.polystring.PolyStringNormalizer; -import com.evolveum.midpoint.prism.query.*; +import com.evolveum.midpoint.prism.query.AndFilter; +import com.evolveum.midpoint.prism.query.ObjectFilter; +import com.evolveum.midpoint.prism.query.ObjectQuery; +import com.evolveum.midpoint.prism.query.OrFilter; import com.evolveum.midpoint.prism.query.builder.QueryBuilder; import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.util.DOMUtil; @@ -30,17 +48,10 @@ import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; import com.evolveum.midpoint.xml.ns._public.common.common_3.SearchBoxModeType; import com.evolveum.prism.xml.ns._public.query_3.SearchFilterType; -import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.builder.ToStringBuilder; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; /** * @author Viliam Repan (lazyman) @@ -64,17 +75,17 @@ public class Search implements Serializable, DebugDumpable { private String advancedError; private String fullText; - private Class type; + private Class type; private Map allDefinitions; private List availableDefinitions = new ArrayList<>(); private List items = new ArrayList<>(); - public Search(Class type, Map allDefinitions) { + public Search(Class type, Map allDefinitions) { this(type, allDefinitions, false, null); } - public Search(Class type, Map allDefinitions, + public Search(Class type, Map allDefinitions, boolean isFullTextSearchEnabled, SearchBoxModeType searchBoxModeType) { this.type = type; this.allDefinitions = allDefinitions; @@ -131,7 +142,11 @@ public SearchItem addItem(ItemDefinition def) { } SearchItem item = new SearchItem(this, path, def); - item.getValues().add(new SearchValue<>()); + if (def instanceof PrismReferenceDefinition) { + item.getValues().add(new SearchValue<>(new ObjectReferenceType())); + } else { + item.getValues().add(new SearchValue<>()); + } items.add(item); if (itemToRemove != null) { @@ -147,7 +162,7 @@ public void delete(SearchItem item) { } } - public Class getType() { + public Class getType() { return type; } @@ -222,7 +237,7 @@ private ObjectFilter createFilterForSearchValue(SearchItem item, DisplayableValu if (definition instanceof PrismReferenceDefinition) { return QueryBuilder.queryFor(ObjectType.class, ctx) - .item(path, definition).ref((PrismReferenceValue) searchValue.getValue()) + .item(path, definition).ref(Arrays.asList(((ObjectReferenceType) searchValue.getValue()).asReferenceValue().clone()), true) .buildFilter(); } @@ -328,7 +343,7 @@ private ObjectFilter createAdvancedObjectFilter(PrismContext ctx) throws SchemaE } SearchFilterType search = ctx.parserFor(advancedQuery).type(SearchFilterType.COMPLEX_TYPE).parseRealValue(); - return QueryConvertor.parseFilter(search, type, ctx); + return QueryConvertor.parseFilter(search, (Class) type, ctx); } public boolean isAdvancedQueryValid(PrismContext ctx) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchFactory.java index a8f72f74c64..49fdf63afa5 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchFactory.java @@ -16,8 +16,20 @@ package com.evolveum.midpoint.web.component.search; +import java.lang.reflect.Modifier; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import com.evolveum.midpoint.gui.api.util.ModelServiceLocator; -import com.evolveum.midpoint.prism.*; +import com.evolveum.midpoint.prism.Containerable; +import com.evolveum.midpoint.prism.ItemDefinition; +import com.evolveum.midpoint.prism.PrismContainerDefinition; +import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.prism.PrismObjectDefinition; +import com.evolveum.midpoint.prism.PrismPropertyDefinition; +import com.evolveum.midpoint.prism.PrismReferenceDefinition; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.schema.SchemaRegistry; import com.evolveum.midpoint.schema.ResourceShadowDiscriminator; @@ -31,13 +43,32 @@ import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.exception.SystemException; -import com.evolveum.midpoint.xml.ns._public.common.common_3.*; - -import java.lang.reflect.Modifier; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractRoleType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.AdminGuiConfigurationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.AuthorizationPhaseType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ConnectorHostType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ConnectorType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ConstructionType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.GenericObjectType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.GuiObjectListViewType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.GuiObjectListViewsType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.LifecycleStateModelType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.LifecycleStateType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.NodeType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectPolicyConfigurationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ReportType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.SearchBoxConfigurationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.SearchBoxModeType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ServiceType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; /** * @author Viliam Repan (lazyman) @@ -123,12 +154,34 @@ public class SearchFactory { new ItemPath(TaskType.F_CATEGORY), new ItemPath(TaskType.F_RESULT_STATUS) )); + + SEARCHABLE_OBJECTS.put(AssignmentType.class, Arrays.asList( + new ItemPath(AssignmentType.F_TARGET_REF), + new ItemPath(AssignmentType.F_CONSTRUCTION, ConstructionType.F_RESOURCE_REF), + new ItemPath(AssignmentType.F_TENANT_REF), + new ItemPath(AssignmentType.F_ORG_REF) + )); + + SEARCHABLE_OBJECTS.put(ObjectPolicyConfigurationType.class, Arrays.asList( + new ItemPath(ObjectPolicyConfigurationType.F_SUBTYPE), + new ItemPath(ObjectPolicyConfigurationType.F_OBJECT_TEMPLATE_REF), + new ItemPath(ObjectPolicyConfigurationType.F_LIFECYCLE_STATE_MODEL, LifecycleStateModelType.F_STATE, LifecycleStateType.F_NAME) + )); } public static Search createSearchForShadow( ResourceShadowDiscriminator discriminator, ModelServiceLocator modelServiceLocator) { return createSearch(ShadowType.class, discriminator, modelServiceLocator, true); } + + public static Search createContainerSearch(Class type, ModelServiceLocator modelServiceLocator) { + + PrismContainerDefinition containerDef = modelServiceLocator.getPrismContext().getSchemaRegistry().findContainerDefinitionByCompileTimeClass(type); + Map availableDefs = getAvailableDefinitions(containerDef, true); + + Search search = new Search(type, availableDefs); + return search; + } public static Search createSearch(Class type, ModelServiceLocator modelServiceLocator) { return createSearch(type, null, modelServiceLocator, true); @@ -184,13 +237,17 @@ private static PrismObjectDefinition findObjectDefinition } } - private static Map getAvailableDefinitions( - PrismObjectDefinition objectDef, boolean useDefsFromSuperclass) { + private static Map getAvailableDefinitions( + PrismContainerDefinition objectDef, boolean useDefsFromSuperclass) { Map map = new HashMap<>(); + if (objectDef == null) { + return map; + } + map.putAll(createExtensionDefinitionList(objectDef)); - Class typeClass = objectDef.getCompileTimeClass(); + Class typeClass = objectDef.getCompileTimeClass(); while (typeClass != null && !com.evolveum.prism.xml.ns._public.types_3.ObjectType.class.equals(typeClass)) { List paths = SEARCHABLE_OBJECTS.get(typeClass); if (paths != null) { @@ -206,7 +263,7 @@ private static Map getAvailable break; } - typeClass = (Class) typeClass.getSuperclass(); + typeClass = (Class) typeClass.getSuperclass(); } return map; @@ -243,14 +300,18 @@ private static SearchBoxModeType getDefaultSearchType(Mod } } - private static Map createExtensionDefinitionList( - PrismObjectDefinition objectDef) { + private static Map createExtensionDefinitionList( + PrismContainerDefinition objectDef) { Map map = new HashMap<>(); ItemPath extensionPath = new ItemPath(ObjectType.F_EXTENSION); PrismContainerDefinition ext = objectDef.findContainerDefinition(ObjectType.F_EXTENSION); + if (ext == null) { + return map; + } + for (ItemDefinition def : (List) ext.getDefinitions()) { if (!(def instanceof PrismPropertyDefinition) && !(def instanceof PrismReferenceDefinition)) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchItem.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchItem.java index 8ade52ee725..8f41c96299b 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchItem.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchItem.java @@ -40,7 +40,7 @@ public class SearchItem implements Serializable { public static final String F_VALUES = "values"; public enum Type { - TEXT, BOOLEAN, ENUM, BROWSER + TEXT, BOOLEAN, ENUM, BROWSER, REFERENCE } private Search search; @@ -98,7 +98,7 @@ public String getName() { public Type getType() { if (definition instanceof PrismReferenceDefinition) { - return Type.BROWSER; + return Type.REFERENCE; } PrismPropertyDefinition def = (PrismPropertyDefinition) definition; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchItemPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchItemPanel.java index f2fe660b652..36dd8dc9d78 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchItemPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchItemPanel.java @@ -203,9 +203,12 @@ private SearchPopupPanel createPopoverFragment(IModel data) { IModel choices = null; switch (item.getType()) { - case BROWSER: - popup = new BrowserPopupPanel(ID_VALUE, data); - break; + case REFERENCE: + popup = new ReferencePopupPanel(ID_VALUE, data); + break; +// case BROWSER: +// popup = new BrowserPopupPanel(ID_VALUE, data); +// break; case BOOLEAN: choices = createBooleanChoices(); case ENUM: diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchPanel.java index 5b1498bd6c1..dc914f5c465 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchPanel.java @@ -421,7 +421,7 @@ private void debugPerformed() { Search search = getModelObject(); PageRepositoryQuery pageQuery; if (search != null) { - ObjectTypes type = search.getType() != null ? ObjectTypes.getObjectType(search.getType()) : null; + ObjectTypes type = search.getType() != null ? ObjectTypes.getObjectType(search.getType().getSimpleName()) : null; QName typeName = type != null ? type.getTypeQName() : null; String inner = search.getAdvancedQuery(); if (StringUtils.isNotBlank(inner)) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchValue.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchValue.java index 80a9700e09a..c0fa93e84bf 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchValue.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchValue.java @@ -17,6 +17,8 @@ package com.evolveum.midpoint.web.component.search; import com.evolveum.midpoint.util.DisplayableValue; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; + import org.apache.commons.lang.NotImplementedException; import org.apache.commons.lang.builder.ToStringBuilder; @@ -64,7 +66,22 @@ public String getLabel() { if (displayName != null) { return displayName; } else if (value != null){ - + if (value instanceof ObjectReferenceType) { + String valueToShow = ""; + ObjectReferenceType ort = (ObjectReferenceType) value; + if (ort.getOid() != null) { + valueToShow += "oid=" + ort.getOid() + "/"; + } + + if (ort.getType() != null) { + valueToShow += "type=" + ort.getType().getLocalPart() +"/"; + } + + if (ort.getRelation() != null) { + valueToShow += "relation=" + ort.getRelation().getLocalPart(); + } + return valueToShow; + } return value.toString(); } } diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/builder/R_AtomicFilter.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/builder/R_AtomicFilter.java index 6da5e097aa1..26feedff474 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/builder/R_AtomicFilter.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/builder/R_AtomicFilter.java @@ -251,7 +251,11 @@ public S_AtomicFilterExit ref(Collection values) { @Override public S_AtomicFilterExit ref(Collection values, boolean nullTypeAsAny) { RefFilter filter = RefFilter.createReferenceEqual(itemPath, referenceDefinition, values); - filter.setTargetTypeNullAsAny(nullTypeAsAny); +// if (nullTypeAsAny) { + filter.setTargetTypeNullAsAny(nullTypeAsAny); + filter.setOidNullAsAny(nullTypeAsAny); + filter.setRelationNullAsAny(nullTypeAsAny); +// } return new R_AtomicFilter(this, filter); } diff --git a/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd b/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd index e2ccae56a53..4f209e076af 100755 --- a/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd +++ b/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd @@ -14893,6 +14893,8 @@ + +