Skip to content

Commit

Permalink
different fixes connected with search config wrapper usage
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Feb 8, 2022
1 parent 131d416 commit 55c508b
Show file tree
Hide file tree
Showing 9 changed files with 131 additions and 63 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,10 @@ private SearchConfigurationWrapper<C> createSearchConfigWrapper(Class<C> type) {
SearchBoxConfigurationType searchBoxConfig = SearchFactory.createDefaultSearchBoxConfiguration(type, null, getPageBase());
SearchConfigurationWrapper<C> searchConfigWrapper = new SearchConfigurationWrapper<>(type, searchBoxConfig);
PrismContainerDefinition<C> containerDefinition = getTypeDefinitionForSearch();
searchConfigWrapper.getItemsList().addAll((List<AbstractSearchItemWrapper>)initSearchableItemWrappers(containerDefinition));
List<AbstractSearchItemWrapper> items = (List<AbstractSearchItemWrapper>)initSearchableItemWrappers(containerDefinition);
if (items != null) {
searchConfigWrapper.getItemsList().addAll(items);
}
return searchConfigWrapper;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ public ObjectFilter createFilter(PageBase pageBase, VariablesMap variables) {
}

Class type = getSearchConfig().getTypeClass();
SearchBoxScopeType scope = getSearchConfig().getConfig().getScopeConfiguration().getDefaultValue();
if (SearchBoxScopeType.SUBTREE == scope) {
ScopeSearchItemWrapper scope = getScopeSearchItemWrapper();
if (scope != null && SearchBoxScopeType.SUBTREE.equals(scope.getValue().getValue())) {
ObjectReferenceType ref = ObjectTypeUtil.createObjectRef(object, (QName) null);
return pageBase.getPrismContext().queryFor(type).isChildOf(ref.asReferenceValue()).buildFilter();
}
Expand Down Expand Up @@ -107,6 +107,56 @@ public SearchConfigurationWrapper getSearchConfig() {
return searchConfig;
}

private ScopeSearchItemWrapper getScopeSearchItemWrapper() {
List<AbstractSearchItemWrapper> items = searchConfig.getItemsList();
for (AbstractSearchItemWrapper item : items) {
if (item instanceof ScopeSearchItemWrapper) {
return (ScopeSearchItemWrapper) item;
}
}
return null;
}

private RelationSearchItemWrapper getRelationSearchItemWrapper() {
List<AbstractSearchItemWrapper> items = searchConfig.getItemsList();
for (AbstractSearchItemWrapper item : items) {
if (item instanceof RelationSearchItemWrapper) {
return (RelationSearchItemWrapper) item;
}
}
return null;
}

private IndirectSearchItemWrapper getIndirectSearchItemWrapper() {
List<AbstractSearchItemWrapper> items = searchConfig.getItemsList();
for (AbstractSearchItemWrapper item : items) {
if (item instanceof IndirectSearchItemWrapper) {
return (IndirectSearchItemWrapper) item;
}
}
return null;
}

private ProjectSearchItemWrapper getProjectSearchItemWrapper() {
List<AbstractSearchItemWrapper> items = searchConfig.getItemsList();
for (AbstractSearchItemWrapper item : items) {
if (item instanceof ProjectSearchItemWrapper) {
return (ProjectSearchItemWrapper) item;
}
}
return null;
}

private TenantSearchItemWrapper getTenantSearchItemWrapper() {
List<AbstractSearchItemWrapper> items = searchConfig.getItemsList();
for (AbstractSearchItemWrapper item : items) {
if (item instanceof TenantSearchItemWrapper) {
return (TenantSearchItemWrapper) item;
}
}
return null;
}

// public void setSearchConfig(SearchConfigurationWrapper searchConfig) {
// this.searchConfig = searchConfig;
// }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,15 @@ public ObjectTypeSearchItemPanel(String id, IModel<ObjectTypeSearchItemWrapper>
protected Component initSearchItemField() {
DropDownChoicePanel choices = new DropDownChoicePanel(ID_SEARCH_ITEM_FIELD, new PropertyModel(getModel(), ObjectTypeSearchItemWrapper.F_VALUE),
Model.ofList(getModelObject().getAvailableValues()),
new QNameObjectTypeChoiceRenderer());
new QNameObjectTypeChoiceRenderer(), getModelObject().isAllowAllTypesSearch()) {

private static final long serialVersionUID = 1L;

@Override
protected String getNullValidDisplayValue() {
return getString("ObjectTypes.all");
}
};
// choices.getBaseFormComponent().add(WebComponentUtil.getSubmitOnEnterKeyDownBehavior("searchSimple"));
choices.getBaseFormComponent().add(new OnChangeAjaxBehavior() {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,15 @@ public class ObjectTypeSearchItemWrapper extends AbstractSearchItemWrapper<QName
ObjectTypeSearchItemConfigurationType config;
private QName oldType;
private boolean typeChanged;
private boolean allowAllTypesSearch;

public ObjectTypeSearchItemWrapper(ObjectTypeSearchItemConfigurationType config) {
this(config, false);
}

public ObjectTypeSearchItemWrapper(ObjectTypeSearchItemConfigurationType config, boolean allowAllTypesSearch) {
this.config = config;
this.allowAllTypesSearch = allowAllTypesSearch;
}

public Class<ObjectTypeSearchItemPanel> getSearchItemPanelClass() {
Expand Down Expand Up @@ -93,4 +99,12 @@ public ObjectFilter createFilter(PageBase pageBase, VariablesMap variables) {
return PrismContext.get().queryFor((Class<? extends Containerable>) WebComponentUtil.qnameToClass(PrismContext.get(), config.getDefaultValue()))
.buildFilter();
}

public boolean isAllowAllTypesSearch() {
return allowAllTypesSearch;
}

public void setAllowAllTypesSearch(boolean allowAllTypesSearch) {
this.allowAllTypesSearch = allowAllTypesSearch;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ private ObjectFilter createAdvancedObjectFilter(PrismContext ctx) throws SchemaE

public Class<C> getTypeClass() {
ObjectTypeSearchItemWrapper objectTypeWrapper = findObjectTypeSearchItemWrapper();
if (objectTypeWrapper != null) {
if (objectTypeWrapper != null && objectTypeWrapper.getValue().getValue() != null) {
return (Class<C>) WebComponentUtil.qnameToClass(PrismContext.get(), objectTypeWrapper.getValue().getValue());
}
return SearchBoxModeType.OID.equals(getSearchMode()) ? (Class<C> ) ObjectType.class
Expand Down Expand Up @@ -182,7 +182,7 @@ public ObjectQuery createObjectQuery(VariablesMap variables, PageBase pageBase,
if (SearchBoxModeType.OID.equals(getSearchMode())) {
query = createObjectQueryOid(pageBase);
} else {
query = createQueryFromDefaultItems(pageBase, variables);
query = createObjectTypeItemQuery(pageBase);
ObjectQuery searchTypeQuery = null;
if (SearchBoxModeType.ADVANCED.equals(searchMode) || SearchBoxModeType.AXIOM_QUERY.equals(searchMode)) {
searchTypeQuery = createObjectQueryAdvanced(pageBase);
Expand Down Expand Up @@ -266,15 +266,15 @@ public ObjectTypeSearchItemWrapper findObjectTypeSearchItemWrapper() {
return null;
}

private ObjectQuery createQueryFromDefaultItems(PageBase pageBase, VariablesMap variables) {
private ObjectQuery createObjectTypeItemQuery(PageBase pageBase) {
// List<SearchItem> specialItems = getSpecialItems();
// if (specialItems.isEmpty()) {
// if (compositedSpecialItems == null) {
// return null;
// }
// }

List<ObjectFilter> conditions = new ArrayList<>();
// List<ObjectFilter> conditions = new ArrayList<>();
// if (compositedSpecialItems instanceof AbstractRoleCompositedSearchItem) {
// ObjectFilter filter = ((AbstractRoleCompositedSearchItem) compositedSpecialItems).createFilter(pageBase, variables);
// if (filter != null) {
Expand Down Expand Up @@ -310,15 +310,15 @@ private ObjectQuery createQueryFromDefaultItems(PageBase pageBase, VariablesMap
} else {
query = pageBase.getPrismContext().queryFactory().createQuery();
}
switch (conditions.size()) {
case 0:
query = null;
break;
default:
for (ObjectFilter filter : conditions) {
query.addFilter(filter);
}
}
// switch (conditions.size()) {
// case 0:
// query = null;
// break;
// default:
// for (ObjectFilter filter : conditions) {
// query.addFilter(filter);
// }
// }
return query;
}

Expand Down Expand Up @@ -357,14 +357,19 @@ private ObjectQuery createObjectQuerySimple(VariablesMap defaultVariables, PageB

List<ObjectFilter> conditions = new ArrayList<>();
ObjectQuery query = null;
boolean abstractRoleFilterCheck = false;
for (AbstractSearchItemWrapper item : getItems()) {
if (!item.isApplyFilter(getSearchMode())) {
if (!item.isApplyFilter(getSearchMode()) ||
(item instanceof AbstractRoleSearchItemWrapper && abstractRoleFilterCheck)) {
continue;
}
ObjectFilter filter = item.createFilter(pageBase, defaultVariables);
if (filter != null) {
conditions.add(filter);
}
if (item instanceof AbstractRoleSearchItemWrapper) {
abstractRoleFilterCheck = true;
}
}
if (query == null) {
if (getTypeClass() != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public class SearchConfigurationWrapper<C extends Containerable> implements Seri
private List<AbstractSearchItemWrapper> itemsList = new ArrayList<>();
private SearchBoxModeType searchBoxMode;
private String collectionViewName;
private boolean allowAllTypeSearch;

public static final String F_INDIRECT = "config.indirectConfiguration.indirect";
public static final String F_SCOPE = "config.scopeConfiguration.defaultValue";
Expand Down Expand Up @@ -134,4 +135,12 @@ public boolean isTenantEmpty() {
public boolean isProjectEmpty() {
return projectRef == null || projectRef.getOid() == null || projectRef.getOid() == null || projectRef.asReferenceValue().isEmpty();
}

public boolean isAllowAllTypeSearch() {
return allowAllTypeSearch;
}

public void setAllowAllTypeSearch(boolean allowAllTypeSearch) {
this.allowAllTypeSearch = allowAllTypeSearch;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,9 @@ private SearchConfigurationWrapper createSearchConfigWrapper() {
searchConfig.setProjectConfiguration(searchBoxCofig.getDefaultProjectConfiguration());
searchConfig.setTenantConfiguration(searchBoxCofig.getDefaultTenantConfiguration());
}
return new SearchConfigurationWrapper(getDefaultObjectTypeClass(), searchConfig);
SearchConfigurationWrapper searchConfigWrapper = new SearchConfigurationWrapper(getDefaultObjectTypeClass(), searchConfig);
searchConfigWrapper.setAllowAllTypeSearch(true);
return searchConfigWrapper;
}

private <AH extends AssignmentHolderType> ContainerTypeSearchItem<AH> createSearchTypeItem(SearchBoxConfigurationHelper searchBoxConfigurationHelper) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -372,22 +372,9 @@ public static <C extends Containerable> com.evolveum.midpoint.gui.impl.component
}

public static <C extends Containerable> com.evolveum.midpoint.gui.impl.component.search.Search<C> createSearch(Class<C> type, String collectionViewName, ModelServiceLocator modelServiceLocator) {
return createSearchNew(type, collectionViewName, null, null, modelServiceLocator);
}

public static <C extends Containerable> com.evolveum.midpoint.gui.impl.component.search.Search<C> createSearchNew(Class<C> type, String collectionViewName,
SearchBoxConfigurationType config, ModelServiceLocator modelServiceLocator) {
return createSearchNew(type, collectionViewName, config, null, modelServiceLocator);
}

public static <C extends Containerable> com.evolveum.midpoint.gui.impl.component.search.Search<C> createSearchNew(Class<C> type, String collectionViewName,
List<? super AbstractSearchItemWrapper> searchItemWrappers, ModelServiceLocator modelServiceLocator) {
return createSearchNew(type, collectionViewName, null, searchItemWrappers, modelServiceLocator);
}

public static <C extends Containerable> com.evolveum.midpoint.gui.impl.component.search.Search<C> createSearchNew(Class<C> type, String collectionViewName,
SearchBoxConfigurationType config, List<? super AbstractSearchItemWrapper> searchItemWrappers, ModelServiceLocator modelServiceLocator) {
return createSearchNew(type, collectionViewName, config, searchItemWrappers, null, modelServiceLocator, Search.PanelType.DEFAULT);
SearchConfigurationWrapper<C> searchConfigWrapper = new SearchConfigurationWrapper(type,
createDefaultSearchBoxConfiguration(type, null, modelServiceLocator), collectionViewName);
return createSearch(searchConfigWrapper, modelServiceLocator);
}

/**
Expand All @@ -399,43 +386,31 @@ public static <C extends Containerable> com.evolveum.midpoint.gui.impl.component
*/
public static <C extends Containerable> com.evolveum.midpoint.gui.impl.component.search.Search<C> createSearch(
SearchConfigurationWrapper<C> searchConfig, ModelServiceLocator modelServiceLocator) {
return createSearchNew(searchConfig.getTypeClass(), searchConfig.getCollectionViewName(),
searchConfig.getConfig(), searchConfig.getItemsList(), null, modelServiceLocator, Search.PanelType.DEFAULT);
}

public static <C extends Containerable> com.evolveum.midpoint.gui.impl.component.search.Search<C> createMemberPanelSearch(Class<C> type, ModelServiceLocator modelServiceLocator) {
return createMemberPanelSearch(type, null, modelServiceLocator);
}

public static <C extends Containerable> com.evolveum.midpoint.gui.impl.component.search.Search<C> createMemberPanelSearch(Class<C> type,
SearchBoxConfigurationType config, ModelServiceLocator modelServiceLocator) {
return createSearchNew(type, null, config, null, null, modelServiceLocator, Search.PanelType.MEMBER_PANEL);
return createSearchNew(searchConfig, null, modelServiceLocator, Search.PanelType.DEFAULT);
}

public static <C extends Containerable> com.evolveum.midpoint.gui.impl.component.search.Search<C> createMemberPanelSearch(
SearchConfigurationWrapper<C> searchConfig, ModelServiceLocator modelServiceLocator) {
return createSearchNew(searchConfig.getTypeClass(), searchConfig.getCollectionViewName(),
searchConfig.getConfig(), searchConfig.getItemsList(), null, modelServiceLocator, Search.PanelType.MEMBER_PANEL);
return createSearchNew(searchConfig, null, modelServiceLocator, Search.PanelType.MEMBER_PANEL);
}

private static <C extends Containerable> com.evolveum.midpoint.gui.impl.component.search.Search<C> createSearchNew(Class<C> type, String collectionViewName, SearchBoxConfigurationType panelConfig,
List<? super AbstractSearchItemWrapper> searchItemWrappers, ResourceShadowDiscriminator discriminator, ModelServiceLocator modelServiceLocator, Search.PanelType panelType) {
SearchBoxConfigurationType searchBoxConfig = createDefaultSearchBoxConfiguration(type, discriminator, modelServiceLocator);
searchBoxConfig = combineSearchBoxConfiguration(searchBoxConfig, panelConfig);
private static <C extends Containerable> com.evolveum.midpoint.gui.impl.component.search.Search<C> createSearchNew(
SearchConfigurationWrapper<C> searchConfigurationWrapper, ResourceShadowDiscriminator discriminator, ModelServiceLocator modelServiceLocator, Search.PanelType panelType) {
SearchBoxConfigurationType searchBoxConfig = createDefaultSearchBoxConfiguration(searchConfigurationWrapper.getTypeClass(), discriminator, modelServiceLocator);
searchBoxConfig = combineSearchBoxConfiguration(searchBoxConfig, searchConfigurationWrapper.getConfig());

if (type.isAssignableFrom(ObjectType.class)) {
if (searchConfigurationWrapper.getTypeClass().isAssignableFrom(ObjectType.class)) {
SearchBoxConfigurationType configuredSearchBoxConfig = getSearchBoxConfiguration(modelServiceLocator,
WebComponentUtil.classToQName(PrismContext.get(), (Class<? extends ObjectType>) type), collectionViewName, panelType);
WebComponentUtil.classToQName(PrismContext.get(), (Class<? extends ObjectType>) searchConfigurationWrapper.getTypeClass()),
searchConfigurationWrapper.getCollectionViewName(), panelType);
searchBoxConfig = combineSearchBoxConfiguration(searchBoxConfig, configuredSearchBoxConfig);
}
SearchConfigurationWrapper<C> searchConfigurationWrapper = new SearchConfigurationWrapper<>(type, searchBoxConfig);
createSearchItemWrapperList(type, searchConfigurationWrapper, discriminator, modelServiceLocator);
if (searchItemWrappers != null) {
searchConfigurationWrapper.getItemsList().addAll((List<AbstractSearchItemWrapper>)searchItemWrappers);
if (Search.PanelType.MEMBER_PANEL.equals(panelType)) {
//todo add additional panel config here
}
// if (Search.PanelType.MEMBER_PANEL.equals(panelType)) {
// searchConfigurationWrapper.getItemsList().addAll(createAbstractRoleSearchItemWrapperList(searchConfigurationWrapper));
// }
searchConfigurationWrapper.setConfig(searchBoxConfig);
searchConfigurationWrapper.setSearchBoxMode(searchBoxConfig.getDefaultMode());
createSearchItemWrapperList(searchConfigurationWrapper.getTypeClass(), searchConfigurationWrapper, discriminator, modelServiceLocator);
com.evolveum.midpoint.gui.impl.component.search.Search search =
new com.evolveum.midpoint.gui.impl.component.search.Search(Model.of(searchConfigurationWrapper));
return search;
Expand All @@ -448,7 +423,7 @@ private static <C extends Containerable> void createSearchItemWrapperList(Class<
}
SearchBoxConfigurationType config = searchConfigWrapper.getConfig();
if (config.getObjectTypeConfiguration() != null) {
searchConfigWrapper.addSearchItem(new ObjectTypeSearchItemWrapper(config.getObjectTypeConfiguration()));
searchConfigWrapper.addSearchItem(new ObjectTypeSearchItemWrapper(config.getObjectTypeConfiguration(), searchConfigWrapper.isAllowAllTypeSearch()));
}
if (config.getSearchItems() != null && config.getSearchItems().getSearchItem() != null) {
config.getSearchItems().getSearchItem().forEach(item -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,9 @@ private <C extends Containerable> SearchConfigurationWrapper<C> createSearchConf
searchConfig.setTenantConfiguration(searchBoxCofig.getDefaultTenantConfiguration());
}

return new SearchConfigurationWrapper(getDefaultObjectTypeClass(), searchConfig);
SearchConfigurationWrapper searchConfigWrapper = new SearchConfigurationWrapper(getDefaultObjectTypeClass(), searchConfig);
searchConfigWrapper.setAllowAllTypeSearch(true);
return searchConfigWrapper;
}

private <AH extends AssignmentHolderType> ContainerTypeSearchItem<AH> createSearchTypeItem(SearchBoxConfigurationHelper memberPanelStorage) {
Expand Down

0 comments on commit 55c508b

Please sign in to comment.