Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Jan 20, 2021
2 parents 79878a4 + 256091f commit bdeaf0c
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 34 deletions.
Expand Up @@ -28,7 +28,6 @@
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;
import org.apache.wicket.model.IModel;

import com.evolveum.midpoint.gui.api.GuiStyleConstants;
Expand All @@ -42,8 +41,6 @@
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismContainerValue;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.data.column.ColumnMenuAction;
import com.evolveum.midpoint.web.component.menu.cog.ButtonInlineMenuItem;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
Expand Down Expand Up @@ -72,7 +69,8 @@ public MultivalueContainerListPanel(String id, Class<C> type) {
@Override
protected Search createSearch(Class<? extends C> type) {
PrismContainerDefinition<C> containerDefinition = getPrismContext().getSchemaRegistry().findContainerDefinitionByCompileTimeClass(getType());
return SearchFactory.createContainerSearch(new ContainerTypeSearchItem<C>(new SearchValue(type, containerDefinition.getDisplayName())), null, initSearchableItems(containerDefinition), getPageBase());
return SearchFactory.createContainerSearch(new ContainerTypeSearchItem<C>(new SearchValue(type, containerDefinition.getDisplayName())),
null, initSearchableItems(containerDefinition), getPageBase(), false);
}

protected List<SearchItemDefinition> initSearchableItems(PrismContainerDefinition<C> containerDef){
Expand Down
Expand Up @@ -35,6 +35,8 @@

import org.jetbrains.annotations.NotNull;

import javax.xml.namespace.QName;

public class SearchFactory {

private static final String DOT_CLASS = SearchFactory.class.getName() + ".";
Expand Down Expand Up @@ -175,14 +177,15 @@ public class SearchFactory {
}

public static <C extends Containerable> Search createContainerSearch(ContainerTypeSearchItem<C> type, ModelServiceLocator modelServiceLocator) {
return createContainerSearch(type, null, modelServiceLocator);
return createContainerSearch(type, null, modelServiceLocator, false);
}

public static <C extends Containerable> Search createContainerSearch(ContainerTypeSearchItem<C> type, ItemPath defaultSearchItem, ModelServiceLocator modelServiceLocator) {
return createContainerSearch(type, defaultSearchItem, null, modelServiceLocator);
public static <C extends Containerable> Search createContainerSearch(ContainerTypeSearchItem<C> type, ItemPath defaultSearchItem,
ModelServiceLocator modelServiceLocator, boolean useObjectCollection) {
return createContainerSearch(type, defaultSearchItem, null, modelServiceLocator, useObjectCollection);
}
public static <C extends Containerable> Search createContainerSearch(ContainerTypeSearchItem<C> type, ItemPath defaultSearchItem, List<SearchItemDefinition> defaultAvailableDefs,
ModelServiceLocator modelServiceLocator) {
ModelServiceLocator modelServiceLocator, boolean useObjectCollection) {

PrismContainerDefinition<C> containerDef = modelServiceLocator.getPrismContext().getSchemaRegistry()
.findContainerDefinitionByCompileTimeClass(type.getTypeClass());
Expand All @@ -192,7 +195,14 @@ public static <C extends Containerable> Search createContainerSearch(ContainerTy
}

Search search = new Search(type, availableDefs);
if (defaultSearchItem != null) {

List<SearchItemDefinition> configuredSearchItemDefs = null;
if (useObjectCollection) {
configuredSearchItemDefs = getConfiguredSearchItemDefinitions(availableDefs, modelServiceLocator, containerDef.getTypeName(), null, Search.PanelType.DEFAULT);
}
if (!CollectionUtils.isEmpty(configuredSearchItemDefs)) {
processSearchItemDefFromCompiledView(configuredSearchItemDefs, search, containerDef);
} else if (defaultSearchItem != null) {
ItemDefinition defaultItemDef = containerDef.findItemDefinition(defaultSearchItem);
if (defaultItemDef != null) {
search.addItem(defaultItemDef);
Expand Down Expand Up @@ -228,16 +238,17 @@ public static <T extends ObjectType> Search createSearch(
List<SearchItemDefinition> availableDefs = getAvailableDefinitions(objectDef, availableItemPath, useDefsFromSuperclass);
boolean isFullTextSearchEnabled = isFullTextSearchEnabled(modelServiceLocator, type.getTypeClass());

QName qNametype = WebComponentUtil.classToQName(modelServiceLocator.getPrismContext(), type.getTypeClass());
Search search = new Search(type, availableDefs, isFullTextSearchEnabled,
getDefaultSearchType(modelServiceLocator, type.getTypeClass(), collectionViewName, panelType),
getDefaultSearchType(modelServiceLocator, qNametype, collectionViewName, panelType),
isOidSearchEnabled);

SchemaRegistry registry = modelServiceLocator.getPrismContext().getSchemaRegistry();
PrismObjectDefinition objDef = registry.findObjectDefinitionByCompileTimeClass(type.getTypeClass());

List<SearchItemDefinition> configuredSearchItemDefs = null;
if (useObjectCollection) {
configuredSearchItemDefs = getConfiguredSearchItemDefinitions(availableDefs, modelServiceLocator, type.getTypeClass(), collectionViewName, panelType);
configuredSearchItemDefs = getConfiguredSearchItemDefinitions(availableDefs, modelServiceLocator, qNametype, collectionViewName, panelType);
}
if (useObjectCollection && !CollectionUtils.isEmpty(configuredSearchItemDefs)) {
processSearchItemDefFromCompiledView(configuredSearchItemDefs, search, objDef);
Expand All @@ -254,17 +265,17 @@ public static <T extends ObjectType> Search createSearch(
}
});
}
search.setCanConfigure(isAllowToConfigureSearchItems(modelServiceLocator, type.getTypeClass(), collectionViewName, panelType));
search.setCanConfigure(isAllowToConfigureSearchItems(modelServiceLocator, qNametype, collectionViewName, panelType));
return search;
}

public static void processSearchItemDefFromCompiledView(List<SearchItemDefinition> configuredSearchItemDefs, Search search, PrismObjectDefinition objDef) {
public static void processSearchItemDefFromCompiledView(List<SearchItemDefinition> configuredSearchItemDefs, Search search, PrismContainerDefinition containerDef) {
configuredSearchItemDefs.forEach(searchItemDef -> {
search.addItemToAllDefinitions(searchItemDef);
if (searchItemDef.isVisibleByDefault()) {
SearchItem item = null;
if (searchItemDef.getPath() != null) {
ItemDefinition def = objDef.findItemDefinition(searchItemDef.getPath());
ItemDefinition def = containerDef.findItemDefinition(searchItemDef.getPath());
item = search.addItem(def);
((PropertySearchItem) item).setDisplayName(searchItemDef.getDisplayName());
} else if (searchItemDef.getPredefinedFilter() != null) {
Expand Down Expand Up @@ -304,8 +315,8 @@ public static <T extends ObjectType> PrismObjectDefinition findObjectDefinition(
}
}

public static <T extends ObjectType> List<SearchItemDefinition> getConfiguredSearchItemDefinitions(List<SearchItemDefinition> availableDefinitions,
ModelServiceLocator modelServiceLocator, Class<T> type, String collectionViewName, Search.PanelType panelType) {
public static <C extends Containerable> List<SearchItemDefinition> getConfiguredSearchItemDefinitions(List<SearchItemDefinition> availableDefinitions,
ModelServiceLocator modelServiceLocator, QName type, String collectionViewName, Search.PanelType panelType) {
SearchBoxConfigurationType searchConfig = getSearchBoxConfiguration(modelServiceLocator, type, collectionViewName, panelType);
if (searchConfig == null) {
return null;
Expand Down Expand Up @@ -377,7 +388,7 @@ private static <T extends ObjectType> boolean isFullTextSearchEnabled(ModelServi
}
}

private static <T extends ObjectType> SearchBoxModeType getDefaultSearchType(ModelServiceLocator modelServiceLocator, Class<T> type,
private static <T extends ObjectType> SearchBoxModeType getDefaultSearchType(ModelServiceLocator modelServiceLocator, QName type,
String collectionViewName, Search.PanelType panelType) {
SearchBoxConfigurationType searchConfig = getSearchBoxConfiguration(modelServiceLocator, type, collectionViewName, panelType);
if (searchConfig == null) {
Expand All @@ -386,7 +397,7 @@ private static <T extends ObjectType> SearchBoxModeType getDefaultSearchType(Mod
return searchConfig.getDefaultMode();
}

private static <T extends ObjectType> boolean isAllowToConfigureSearchItems(ModelServiceLocator modelServiceLocator, Class<T> type,
private static <T extends ObjectType> boolean isAllowToConfigureSearchItems(ModelServiceLocator modelServiceLocator, QName type,
String collectionViewName, Search.PanelType panelType) {
SearchBoxConfigurationType searchConfig = getSearchBoxConfiguration(modelServiceLocator, type, collectionViewName, panelType);
if (searchConfig == null || searchConfig.isAllowToConfigureSearchItems() == null) {
Expand All @@ -395,13 +406,12 @@ private static <T extends ObjectType> boolean isAllowToConfigureSearchItems(Mode
return searchConfig.isAllowToConfigureSearchItems();
}

private static <T extends ObjectType> SearchBoxConfigurationType getSearchBoxConfiguration(ModelServiceLocator modelServiceLocator,
Class<T> type, String collectionViewName, Search.PanelType panelType) {
private static <C extends Containerable> SearchBoxConfigurationType getSearchBoxConfiguration(ModelServiceLocator modelServiceLocator,
QName type, String collectionViewName, Search.PanelType panelType) {
OperationResult result = new OperationResult(LOAD_ADMIN_GUI_CONFIGURATION);
try {
CompiledGuiProfile guiConfig = modelServiceLocator.getModelInteractionService().getCompiledGuiProfile(null, result);
CompiledObjectCollectionView view = guiConfig.findObjectCollectionView(
WebComponentUtil.classToQName(modelServiceLocator.getPrismContext(), type), collectionViewName);
CompiledObjectCollectionView view = guiConfig.findObjectCollectionView(type, collectionViewName);
if (view != null) {
if (Search.PanelType.MEMBER_PANEL.equals(panelType) && view.getAdditionalPanels() != null
&& view.getAdditionalPanels().getMemberPanel() != null) {
Expand Down
Expand Up @@ -126,9 +126,9 @@ protected IColumn<SelectableBean<AuditEventRecordType>, String> createIconColumn
@Override
protected Search createSearch(Class<? extends AuditEventRecordType> type) {
AuditLogStorage storage = (AuditLogStorage) getPageStorage();
Search search = SearchFactory.createContainerSearch(new ContainerTypeSearchItem(new SearchValue(type, "")), AuditEventRecordType.F_TIMESTAMP, getPageBase());
Search search = SearchFactory.createContainerSearch(new ContainerTypeSearchItem(new SearchValue(type, "")), AuditEventRecordType.F_TIMESTAMP, getPageBase(), true);
DateSearchItem timestampItem = (DateSearchItem) search.findPropertySearchItem(AuditEventRecordType.F_TIMESTAMP);
if (timestampItem.getFromDate() == null && timestampItem.getToDate() == null && !isCollectionViewPanelForWidget()) {
if (timestampItem != null && timestampItem.getFromDate() == null && timestampItem.getToDate() == null && !isCollectionViewPanelForWidget()) {
Date todayDate = Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant());
timestampItem.setFromDate(MiscUtil.asXMLGregorianCalendar(todayDate));
}
Expand Down
Expand Up @@ -85,7 +85,6 @@
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.dialog.ChooseFocusTypeAndRelationDialogPanel;
import com.evolveum.midpoint.web.component.form.MidpointForm;
import com.evolveum.midpoint.web.component.input.RelationDropDownChoicePanel;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.web.security.GuiAuthorizationConstants;
Expand Down Expand Up @@ -350,7 +349,7 @@ protected PageStorage getPageStorage(String storageKey){
storage = getSession().getSessionStorage().initPageStorage(storageKey);
if (storage instanceof MemberPanelStorage) {
((MemberPanelStorage) storage).setIndirect(defaultIndirectConfiguration.isIndirect());
((MemberPanelStorage) storage).setRelation(defaultRelationConfiguration.getDefaultValue());
((MemberPanelStorage) storage).setRelation(getSupportedRelations().getDefaultRelationAllowAny());
((MemberPanelStorage) storage).setOrgSearchScope(defaultScopeConfiguration.getDefaultValue());
}
}
Expand All @@ -362,7 +361,7 @@ protected Search createSearch(Class<? extends ObjectType> type) {
Search search = null;
if (getMemberPanelStorage() != null) {
if (getMemberPanelStorage().getRelation() == null) {
getMemberPanelStorage().setRelation(getSupportedRelations().getDefaultRelation());
getMemberPanelStorage().setRelation(getSupportedRelations().getDefaultRelationAllowAny());
}
if (getMemberPanelStorage().getSearch() != null) {
search = getMemberPanelStorage().getSearch();
Expand Down Expand Up @@ -594,7 +593,7 @@ public ObjectFilter createFilter(PageBase pageBase, ExpressionVariables variable
return null;
}
Class type = search.getTypeClass();
ObjectReferenceType ref = MemberOperationsHelper.createReference(object, getSupportedRelations().getDefaultRelation());
ObjectReferenceType ref = MemberOperationsHelper.createReference(object, null);
return pageBase.getPrismContext().queryFor(type).isChildOf(ref.asReferenceValue()).buildFilter();
}

Expand Down Expand Up @@ -644,10 +643,10 @@ public ObjectFilter createFilter(PageBase pageBase, ExpressionVariables variable
return null;
}
List relations = new ArrayList();
if (QNameUtil.match(PrismConstants.Q_ANY, getSupportedRelations().getDefaultRelation())) {
if (QNameUtil.match(PrismConstants.Q_ANY, getMemberPanelStorage().getRelation())) {
relations.addAll(getSupportedRelations().getAvailableRelationList());
} else {
relations.add(getSupportedRelations().getDefaultRelation());
relations.add(getMemberPanelStorage().getRelation());
}

ObjectFilter filter;
Expand Down Expand Up @@ -743,10 +742,10 @@ public ObjectFilter createFilter(PageBase pageBase, ExpressionVariables variable
}
PrismContext prismContext = pageBase.getPrismContext();
List relations = new ArrayList();
if (QNameUtil.match(PrismConstants.Q_ANY, getSupportedRelations().getDefaultRelation())) {
if (QNameUtil.match(PrismConstants.Q_ANY, getSupportedRelations().getDefaultRelationAllowAny())) {
relations.addAll(getSupportedRelations().getAvailableRelationList());
} else {
relations.add(getSupportedRelations().getDefaultRelation());
relations.add(getSupportedRelations().getDefaultRelationAllowAny());
}

ObjectFilter filter;
Expand Down Expand Up @@ -847,10 +846,10 @@ public ObjectFilter createFilter(PageBase pageBase, ExpressionVariables variable
}
PrismContext prismContext = pageBase.getPrismContext();
List relations = new ArrayList();
if (QNameUtil.match(PrismConstants.Q_ANY, getSupportedRelations().getDefaultRelation())) {
if (QNameUtil.match(PrismConstants.Q_ANY, getSupportedRelations().getDefaultRelationAllowAny())) {
relations.addAll(getSupportedRelations().getAvailableRelationList());
} else {
relations.add(getSupportedRelations().getDefaultRelation());
relations.add(getSupportedRelations().getDefaultRelationAllowAny());
}

ObjectFilter filter;
Expand Down
Expand Up @@ -7,6 +7,7 @@
package com.evolveum.midpoint.web.page.admin.roles;

import com.evolveum.midpoint.prism.PrismConstants;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RelationSearchItemConfigurationType;

import org.apache.cxf.common.util.CollectionUtils;
Expand Down Expand Up @@ -55,6 +56,10 @@ public void setDefaultRelation(QName defaultRelation) {
}

public QName getDefaultRelation() {
return getDefaultRelation(false);
}

private QName getDefaultRelation(boolean allowAny) {
List<QName> availableRelationList = getAvailableRelationList();
if (availableRelationList != null && availableRelationList.size() == 1) {
return availableRelationList.get(0);
Expand All @@ -66,9 +71,16 @@ public QName getDefaultRelation() {
}
defaultRelation = this.defaultRelation;
}
if (allowAny && QNameUtil.match(defaultRelation, PrismConstants.Q_ANY)){
return defaultRelation;
}
if (availableRelationList != null && availableRelationList.contains(defaultRelation)) {
return defaultRelation;
}
return null;
}

public QName getDefaultRelationAllowAny() {
return getDefaultRelation(true);
}
}

0 comments on commit bdeaf0c

Please sign in to comment.