From dda8fa29f9f0b32ee536cfc1f43dec3c68cadf8d Mon Sep 17 00:00:00 2001 From: Viliam Repan Date: Tue, 15 Mar 2016 14:30:35 -0400 Subject: [PATCH] debug list search improved --- .../web/component/search/SearchFactory.java | 51 +++++++- .../admin/configuration/PageDebugList.html | 4 +- .../admin/configuration/PageDebugList.java | 109 +++++------------- .../configuration/dto/DebugSearchDto.java | 12 +- 4 files changed, 74 insertions(+), 102 deletions(-) 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 d81e163a83d..29588a0d536 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 @@ -47,14 +47,55 @@ public class SearchFactory { SEARCHABLE_OBJECTS.put(RoleType.class, Arrays.asList( new ItemPath(RoleType.F_NAME), new ItemPath(RoleType.F_DISPLAY_NAME), -// new ItemPath(RoleType.F_OWNER_REF), - new ItemPath(RoleType.F_REQUESTABLE), new ItemPath(RoleType.F_ROLE_TYPE))); + SEARCHABLE_OBJECTS.put(ConnectorHostType.class, Arrays.asList( + new ItemPath(ConnectorHostType.F_HOSTNAME) + )); + SEARCHABLE_OBJECTS.put(ConnectorType.class, Arrays.asList( + new ItemPath(ConnectorType.F_CONNECTOR_BUNDLE), + new ItemPath(ConnectorType.F_CONNECTOR_VERSION), + new ItemPath(ConnectorType.F_CONNECTOR_TYPE) + )); + SEARCHABLE_OBJECTS.put(AbstractRoleType.class, Arrays.asList( + new ItemPath(RoleType.F_REQUESTABLE) + )); + SEARCHABLE_OBJECTS.put(OrgType.class, Arrays.asList( + new ItemPath(OrgType.F_DISPLAY_NAME), + new ItemPath(OrgType.F_COST_CENTER), + new ItemPath(OrgType.F_IDENTIFIER), + new ItemPath(OrgType.F_ORG_TYPE), + new ItemPath(OrgType.F_TENANT), + new ItemPath(OrgType.F_LOCALITY) + )); + SEARCHABLE_OBJECTS.put(GenericObjectType.class, Arrays.asList( + new ItemPath(GenericObjectType.F_OBJECT_TYPE) + )); + SEARCHABLE_OBJECTS.put(NodeType.class, Arrays.asList( + new ItemPath(NodeType.F_NODE_IDENTIFIER) + )); + SEARCHABLE_OBJECTS.put(ReportType.class, Arrays.asList( + new ItemPath(ReportType.F_PARENT) + )); + SEARCHABLE_OBJECTS.put(ShadowType.class, Arrays.asList( + new ItemPath(ShadowType.F_OBJECT_CLASS), + new ItemPath(ShadowType.F_DEAD), + new ItemPath(ShadowType.F_INTENT), + new ItemPath(ShadowType.F_EXISTS) + )); + SEARCHABLE_OBJECTS.put(TaskType.class, Arrays.asList( + new ItemPath(TaskType.F_TASK_IDENTIFIER), + new ItemPath(TaskType.F_NODE), + new ItemPath(TaskType.F_CATEGORY), + new ItemPath(TaskType.F_RESULT_STATUS) + )); + } - //todo add other object types and properties which can be used in search + public static Search createSearch(Class type, PrismContext ctx) { + return createSearch(type, ctx, true); } - public static Search createSearch(Class type, PrismContext ctx, boolean useDefsFromSuperclass) { + public static Search createSearch(Class type, PrismContext ctx, + boolean useDefsFromSuperclass) { Map availableDefs = getAvailableDefinitions(type, ctx, useDefsFromSuperclass); Search search = new Search(type, availableDefs); @@ -80,7 +121,7 @@ private static Map getAvailable if (pathList != null) { map.putAll(createAvailableDefinitions(typeClass, ctx, pathList)); } - if (!useDefsFromSuperclass){ + if (!useDefsFromSuperclass) { break; } typeClass = (Class) typeClass.getSuperclass(); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageDebugList.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageDebugList.html index f180493c80a..c4c0d76a358 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageDebugList.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageDebugList.html @@ -50,9 +50,7 @@ -
- -
+
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageDebugList.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageDebugList.java index 445bda3ac31..0d6602033d8 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageDebugList.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageDebugList.java @@ -27,7 +27,6 @@ import com.evolveum.midpoint.web.component.search.Search; import com.evolveum.midpoint.web.component.search.SearchFactory; import com.evolveum.midpoint.web.component.search.SearchPanel; -import org.apache.commons.lang.StringUtils; import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; @@ -63,9 +62,7 @@ import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismProperty; import com.evolveum.midpoint.prism.PrismPropertyDefinition; -import com.evolveum.midpoint.prism.match.PolyStringNormMatchingRule; import com.evolveum.midpoint.prism.path.ItemPath; -import com.evolveum.midpoint.prism.polystring.PolyStringNormalizer; import com.evolveum.midpoint.prism.query.AndFilter; import com.evolveum.midpoint.prism.query.EqualFilter; import com.evolveum.midpoint.prism.query.InOidFilter; @@ -75,7 +72,6 @@ import com.evolveum.midpoint.prism.query.ObjectQuery; import com.evolveum.midpoint.prism.query.QueryJaxbConvertor; import com.evolveum.midpoint.prism.query.RefFilter; -import com.evolveum.midpoint.prism.query.SubstringFilter; import com.evolveum.midpoint.schema.GetOperationOptions; import com.evolveum.midpoint.schema.SelectorOptions; import com.evolveum.midpoint.schema.constants.ObjectTypes; @@ -93,7 +89,6 @@ import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.web.application.AuthorizationAction; import com.evolveum.midpoint.web.application.PageDescriptor; -import com.evolveum.midpoint.web.component.BasicSearchPanel; import com.evolveum.midpoint.web.component.data.BoxedTablePanel; import com.evolveum.midpoint.web.component.data.RepositoryObjectDataProvider; import com.evolveum.midpoint.web.component.data.Table; @@ -102,7 +97,6 @@ import com.evolveum.midpoint.web.component.data.column.InlineMenuable; import com.evolveum.midpoint.web.component.data.column.LinkColumn; import com.evolveum.midpoint.web.component.data.column.TwoValueLinkPanel; -import com.evolveum.midpoint.web.component.dialog.ConfirmationDialog; import com.evolveum.midpoint.web.component.dialog.DeleteAllDialog; import com.evolveum.midpoint.web.component.dialog.DeleteAllDto; import com.evolveum.midpoint.web.component.input.ChoiceableChoiceRenderer; @@ -127,38 +121,6 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; import com.evolveum.prism.xml.ns._public.query_3.QueryType; -import org.apache.commons.lang.StringUtils; -import org.apache.wicket.AttributeModifier; -import org.apache.wicket.Component; -import org.apache.wicket.MarkupContainer; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; -import org.apache.wicket.ajax.form.OnChangeAjaxBehavior; -import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox; -import org.apache.wicket.behavior.Behavior; -import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; -import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; -import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn; -import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable; -import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; -import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.basic.Label; -import org.apache.wicket.markup.html.form.DropDownChoice; -import org.apache.wicket.markup.html.form.Form; -import org.apache.wicket.markup.html.form.IChoiceRenderer; -import org.apache.wicket.markup.html.list.ListItem; -import org.apache.wicket.markup.html.list.PropertyListView; -import org.apache.wicket.markup.html.panel.Fragment; -import org.apache.wicket.markup.repeater.Item; -import org.apache.wicket.model.*; -import org.apache.wicket.model.util.ListModel; -import org.apache.wicket.request.mapper.parameter.PageParameters; - -import javax.swing.text.html.ListView; -import javax.xml.namespace.QName; - -import java.util.*; /** * @author lazyman @@ -184,7 +146,6 @@ public class PageDebugList extends PageAdminConfiguration { private static final String ID_EXPORT = "export"; private static final String ID_EXPORT_ALL = "exportAll"; private static final String ID_SEARCH_FORM = "searchForm"; - private static final String ID_BASIC_SEARCH = "basicSearch"; private static final String ID_DELETE_ALL_DIALOG = "confirmDeleteAll"; private static final String ID_RESOURCE = "resource"; private static final String ID_TABLE_HEADER = "tableHeader"; @@ -208,9 +169,9 @@ public PageDebugList(boolean clearPagingInSession) { @Override protected DebugSearchDto load() { ConfigurationStorage storage = getSessionStorage().getConfiguration(); + DebugSearchDto dto = storage.getDebugSearchDto(); - Search search = SearchFactory.createSearch(UserType.class, getPrismContext(), true); - dto.setSearch(search); + setupSearchDto(dto); return dto; } @@ -306,7 +267,6 @@ private void initDownload(AjaxRequestTarget target, Class } private void addOrReplaceTable(RepositoryObjectDataProvider provider) { - provider.setQuery(createQuery()); Form mainForm = (Form) get(ID_MAIN_FORM); BoxedTablePanel table = new BoxedTablePanel(ID_TABLE, provider, initColumns(provider.getType()), @@ -505,12 +465,31 @@ private Table getListTable() { return (Table) get(createComponentPath(ID_MAIN_FORM, ID_TABLE)); } + /** + * called when object type is changed, search panel will be refreshed + */ private void listObjectsPerformed(AjaxRequestTarget target) { + DebugSearchDto dto = searchModel.getObject(); + setupSearchDto(dto); + + Search search = dto.getSearch(); + ObjectQuery query = search.createObjectQuery(getPrismContext()); + + listObjectsPerformed(query, target); + } + + private void setupSearchDto(DebugSearchDto dto) { + ObjectTypes type = dto.getType(); + Search search = SearchFactory.createSearch(type.getClassDefinition(), getPrismContext(), true); + dto.setSearch(search); + } + + private void listObjectsPerformed(ObjectQuery query, AjaxRequestTarget target) { DebugSearchDto dto = searchModel.getObject(); ObjectTypes selected = dto.getType(); RepositoryObjectDataProvider provider = getTableDataProvider(); - provider.setQuery(createQuery()); + provider.setQuery(createQuery(query)); if (selected != null) { provider.setType(selected.getClassDefinition()); @@ -525,7 +504,7 @@ private void listObjectsPerformed(AjaxRequestTarget target) { target.add((Component) table); } - private ObjectQuery createQuery() { + private ObjectQuery createQuery(ObjectQuery searchQuery) { DebugSearchDto dto = searchModel.getObject(); List filters = new ArrayList<>(); @@ -536,14 +515,8 @@ private ObjectQuery createQuery() { filters.add(ref); } - if (StringUtils.isNotEmpty(dto.getText())) { - String nameText = dto.getText(); - PolyStringNormalizer normalizer = getPrismContext().getDefaultPolyStringNormalizer(); - String normalizedString = normalizer.normalize(nameText); - - ObjectFilter substring = SubstringFilter.createSubstring(ObjectType.F_NAME, ObjectType.class, - getPrismContext(), PolyStringNormMatchingRule.NAME, normalizedString); - filters.add(substring); + if (searchQuery != null && searchQuery.getFilter() != null) { + filters.add(searchQuery.getFilter()); } if (filters.isEmpty()) { @@ -781,13 +754,6 @@ private void deleteSelectedConfirmed(AjaxRequestTarget target, List> resourcesModel) { final IModel model = (IModel) getDefaultModel(); - BasicSearchPanel basicSearch = new BasicSearchPanel( - ID_BASIC_SEARCH, model) { - - @Override - protected IModel createSearchTextModel() { - return new PropertyModel<>(model, DebugSearchDto.F_TEXT); - } - - @Override - protected void searchPerformed(AjaxRequestTarget target) { - PageDebugList page = (PageDebugList) getPage(); - page.listObjectsPerformed(target); - } - - @Override - protected void clearSearchPerformed(AjaxRequestTarget target) { - PageDebugList page = (PageDebugList) getPage(); - page.clearSearchPerformed(target); - } - }; - searchForm.add(basicSearch); - EnumChoiceRenderer renderer = new EnumChoiceRenderer() { protected String resourceKey(ObjectTypes object) { @@ -1001,8 +945,7 @@ protected void onUpdate(AjaxRequestTarget target) { @Override public void searchPerformed(ObjectQuery query, AjaxRequestTarget target) { PageDebugList page = (PageDebugList) getPage(); - //todo fix search button [lazyman] -// page.listObjectsPerformed(query, target); + page.listObjectsPerformed(query, target); } }; searchForm.add(search); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/DebugSearchDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/DebugSearchDto.java index b1a0ae82b50..02a01dbab52 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/DebugSearchDto.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/DebugSearchDto.java @@ -27,27 +27,17 @@ */ public class DebugSearchDto implements Serializable { - public static final String F_TEXT = "text"; public static final String F_TYPE = "type"; public static final String F_RESOURCE_OID = "resource"; public static final String F_SEARCH = "search"; - private String text; private ObjectTypes type; private ObjectViewDto resource; private Search search; - public String getText() { - return text; - } - - public void setText(String text) { - this.text = text; - } - public ObjectTypes getType() { if (type == null) { - return ObjectTypes.SYSTEM_CONFIGURATION; + type = ObjectTypes.SYSTEM_CONFIGURATION; } return type; }