Skip to content

Commit

Permalink
debug list search improved
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Mar 15, 2016
1 parent 8ea32d8 commit dda8fa2
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 102 deletions.
Expand Up @@ -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 <T extends ObjectType> Search createSearch(Class<T> type, PrismContext ctx) {
return createSearch(type, ctx, true);
}

public static <T extends ObjectType> Search createSearch(Class<T> type, PrismContext ctx, boolean useDefsFromSuperclass) {
public static <T extends ObjectType> Search createSearch(Class<T> type, PrismContext ctx,
boolean useDefsFromSuperclass) {
Map<ItemPath, ItemDefinition> availableDefs = getAvailableDefinitions(type, ctx, useDefsFromSuperclass);

Search search = new Search(type, availableDefs);
Expand All @@ -80,7 +121,7 @@ private static <T extends ObjectType> Map<ItemPath, ItemDefinition> getAvailable
if (pathList != null) {
map.putAll(createAvailableDefinitions(typeClass, ctx, pathList));
}
if (!useDefsFromSuperclass){
if (!useDefsFromSuperclass) {
break;
}
typeClass = (Class<T>) typeClass.getSuperclass();
Expand Down
Expand Up @@ -50,9 +50,7 @@
</div>
</wicket:enclosure>

<div wicket:id="basicSearch"/>

<div wicket:id="search"/>
<div class="form-group" wicket:id="search"/>
</form>
</wicket:fragment>
</wicket:extend>
Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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
Expand All @@ -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";
Expand All @@ -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;
}
Expand Down Expand Up @@ -306,7 +267,6 @@ private void initDownload(AjaxRequestTarget target, Class<? extends ObjectType>
}

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()),
Expand Down Expand Up @@ -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());
Expand All @@ -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<ObjectFilter> filters = new ArrayList<>();
Expand All @@ -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()) {
Expand Down Expand Up @@ -781,13 +754,6 @@ private void deleteSelectedConfirmed(AjaxRequestTarget target, List<DebugObjectI
target.add(getFeedbackPanel());
}

private void clearSearchPerformed(AjaxRequestTarget target) {
DebugSearchDto dto = searchModel.getObject();
dto.setText(null);

listObjectsPerformed(target);
}

private void deleteAllShadowsOnResource(AjaxRequestTarget target) {
DebugSearchDto dto = searchModel.getObject();
if (dto.getResource() == null) {
Expand Down Expand Up @@ -921,28 +887,6 @@ private void initLayout(IModel<List<ObjectViewDto>> resourcesModel) {

final IModel<DebugSearchDto> model = (IModel) getDefaultModel();

BasicSearchPanel<DebugSearchDto> basicSearch = new BasicSearchPanel<DebugSearchDto>(
ID_BASIC_SEARCH, model) {

@Override
protected IModel<String> 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<ObjectTypes> renderer = new EnumChoiceRenderer<ObjectTypes>() {

protected String resourceKey(ObjectTypes object) {
Expand Down Expand Up @@ -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);
Expand Down
Expand Up @@ -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;
}
Expand Down

0 comments on commit dda8fa2

Please sign in to comment.