Skip to content

Commit

Permalink
Merge branch 'master' of github.com:Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Sep 28, 2022
2 parents 6a08d0b + 49cce7a commit 253c038
Show file tree
Hide file tree
Showing 17 changed files with 442 additions and 52 deletions.
2 changes: 1 addition & 1 deletion gui/admin-gui/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@
<groupId>com.evolveum.midpoint.model</groupId>
<artifactId>model-impl</artifactId>
<version>${project.version}</version>
<scope>runtime</scope>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.evolveum.midpoint.model</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -548,11 +548,14 @@ private boolean nothingToTransform(GuiObjectColumnType customColumn) {
return customColumn.getPath() == null && (customColumn.getExport() == null || customColumn.getExport().getExpression() == null);
}

protected PrismContainerDefinition<C> getContainerDefinitionForColumns() {
return getPageBase().getPrismContext().getSchemaRegistry()
.findContainerDefinitionByCompileTimeClass(getType());
}

private boolean noItemDefinitionFor(ItemPath columnPath, GuiObjectColumnType customColumn) {
if (columnPath != null) {
ItemDefinition itemDefinition = getPageBase().getPrismContext().getSchemaRegistry()
.findContainerDefinitionByCompileTimeClass(getType())
.findItemDefinition(columnPath);
ItemDefinition itemDefinition = getContainerDefinitionForColumns().findItemDefinition(columnPath);
if (itemDefinition == null) { // TODO check && expression == null) {
LOGGER.warn("Unknown path '{}' in a definition of column '{}'", columnPath, customColumn.getName());
return true;
Expand Down Expand Up @@ -1187,6 +1190,7 @@ public void clearCache() {
WebComponentUtil.clearProviderCache(getDataProvider());
}

@Override
public StringResourceModel createStringResource(String resourceKey, Object... objects) {
return PageBase.createStringResourceStatic(resourceKey, objects);
}
Expand Down Expand Up @@ -1220,8 +1224,7 @@ private boolean shouldIncludeDefaultColumns() {
}

private String getItemDisplayName(GuiObjectColumnType column) {
ItemDefinition itemDefinition = getPageBase().getPrismContext().getSchemaRegistry()
.findContainerDefinitionByCompileTimeClass(getType()).findItemDefinition(column.getPath().getItemPath());
ItemDefinition itemDefinition = getContainerDefinitionForColumns().findItemDefinition(column.getPath().getItemPath());
return itemDefinition == null ? "" : itemDefinition.getDisplayName();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ public enum PanelType {
private String fullText;

private SearchConfigurationWrapper searchConfigurationWrapper;
private PrismContainerDefinition<C> containerDefinitionOverride;

public Search(SearchConfigurationWrapper searchConfigurationWrapper) {
this.searchConfigurationWrapper = searchConfigurationWrapper;
Expand Down Expand Up @@ -124,8 +125,11 @@ private ObjectFilter createAdvancedObjectFilter(PrismContext ctx) throws SchemaE
if (StringUtils.isEmpty(dslQuery)) {
return null;
}
return ctx.createQueryParser(ctx.getSchemaRegistry().staticNamespaceContext().allPrefixes())
.parseFilter(getTypeClass(), dslQuery);
var parser = ctx.createQueryParser(ctx.getSchemaRegistry().staticNamespaceContext().allPrefixes());
if (containerDefinitionOverride == null) {
return parser.parseFilter(getTypeClass(), dslQuery);
}
return parser.parseFilter(containerDefinitionOverride, dslQuery);
}

return null;
Expand Down Expand Up @@ -471,5 +475,13 @@ public String toString() {
'}';
}

public void setContainerDefinition(PrismContainerDefinition<C> typeDefinitionForSearch) {
containerDefinitionOverride = typeDefinitionForSearch;
}

public PrismContainerDefinition<C> getContainerDefinitionOverride() {
return containerDefinitionOverride;
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -1098,25 +1098,28 @@ public static <C extends Containerable> List<SearchItemDefinition> createExtensi

public static <C extends Containerable> List<AbstractSearchItemWrapper> createSearchableExtensionWrapperList(
PrismContainerDefinition<C> objectDef, ModelServiceLocator modelServiceLocator) {
return createSearchableExtensionWrapperList(objectDef, modelServiceLocator, ObjectType.F_EXTENSION);
}

List<AbstractSearchItemWrapper> searchItemWrappers = new ArrayList<>();

ItemPath extensionPath = ObjectType.F_EXTENSION;
public static <C extends Containerable> List<AbstractSearchItemWrapper> createSearchableExtensionWrapperList(
PrismContainerDefinition<C> objectDef, ModelServiceLocator modelServiceLocator, ItemPath extensionPath) {

PrismContainerDefinition ext = objectDef.findContainerDefinition(ObjectType.F_EXTENSION);
List<AbstractSearchItemWrapper> searchItemWrappers = new ArrayList<>();
PrismContainerDefinition ext = objectDef.findContainerDefinition(extensionPath);
if (ext == null) {
return searchItemWrappers;
}
if (ext != null && ext.getDefinitions() != null) {
List<ItemDefinition<?>> defs = ((List<ItemDefinition<?>>) ext.getDefinitions()).stream()
.filter(def -> (def instanceof PrismReferenceDefinition || def instanceof PrismPropertyDefinition)
&& isIndexed(def)).collect(Collectors.toList());
List<SearchItemType> searchItems = new ArrayList<>();
defs.forEach(def -> searchItems.add(new SearchItemType()
.path(new ItemPathType(ItemPath.create(extensionPath, def.getItemName())))
.displayName(WebComponentUtil.getItemDefinitionDisplayNameOrName(def, null))));
searchItems.forEach(searchItem -> searchItemWrappers.add(createPropertySearchItemWrapper(objectDef.getCompileTimeClass(),
searchItem, null, null, modelServiceLocator)));
for(ItemDefinition<?> def : defs) {
var searchItem = new SearchItemType()
.path(new ItemPathType(ItemPath.create(extensionPath, def.getItemName())))
.displayName(WebComponentUtil.getItemDefinitionDisplayNameOrName(def, null));
searchItemWrappers.add(createPropertySearchItemWrapper(objectDef.getCompileTimeClass(),
searchItem, def, null, modelServiceLocator));
}
}
return searchItemWrappers;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

import com.evolveum.midpoint.gui.impl.component.data.column.PrismContainerWrapperColumn;
import com.evolveum.midpoint.gui.impl.component.search.AbstractSearchItemWrapper;

import com.evolveum.midpoint.gui.impl.component.search.Search;
import com.evolveum.midpoint.web.component.data.column.ColumnUtils;

import org.apache.commons.collections4.CollectionUtils;
Expand Down Expand Up @@ -41,8 +41,11 @@
import com.evolveum.midpoint.gui.impl.component.MultivalueContainerListPanelWithDetailsPanel;
import com.evolveum.midpoint.gui.impl.component.icon.CompositedIconBuilder;
import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismReferenceValueWrapperImpl;
import com.evolveum.midpoint.model.impl.schema.transform.TransformableContainerDefinition;
import com.evolveum.midpoint.model.impl.schema.transform.TransformableReferenceDefinition;
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.path.ObjectReferencePathSegment;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.prism.query.RefFilter;
Expand Down Expand Up @@ -82,12 +85,13 @@ public abstract class AbstractAssignmentTypePanel extends MultivalueContainerLis
protected static final String OPERATION_LOAD_ASSIGNMENTS_LIMIT = DOT_CLASS + "loadAssignmentsLimit";
protected static final String OPERATION_LOAD_ASSIGNMENTS_TARGET_OBJ = DOT_CLASS + "loadAssignmentsTargetRefObject";
protected static final String OPERATION_LOAD_ASSIGNMENT_TARGET_RELATIONS = DOT_CLASS + "loadAssignmentTargetRelations";

private IModel<PrismContainerWrapper<AssignmentType>> model;
protected int assignmentsRequestsLimit = -1;

private Class<? extends Objectable> objectType;
private String objectOid;
private PrismContainerDefinition<AssignmentType> searchDefinition;


public AbstractAssignmentTypePanel(String id, IModel<PrismContainerWrapper<AssignmentType>> model, ContainerPanelConfigurationType config, Class<? extends Objectable> type, String oid) {
super(id, AssignmentType.class, config);
Expand Down Expand Up @@ -584,6 +588,13 @@ protected boolean isEntitlementAssignment() {
@Override
protected abstract UserProfileStorage.TableId getTableId();

@Override
protected Search createSearch(Class<AssignmentType> type) {
Search search = super.createSearch(type);
search.setContainerDefinition(getTypeDefinitionForSearch());
return search;
}

@Override
protected List<SearchItemDefinition> initSearchableItems(PrismContainerDefinition<AssignmentType> containerDef) {
return createSearchableItems(containerDef);
Expand Down Expand Up @@ -619,10 +630,47 @@ protected List<? super AbstractSearchItemWrapper> createSearchableItemWrappers(P

defs.addAll(SearchFactory.createSearchableExtensionWrapperList(containerDef, getPageBase()));

if (getAssignmentType() != null) {
var targetExtensionPath = ItemPath.create(AssignmentType.F_TARGET_REF, new ObjectReferencePathSegment(getAssignmentType()), ObjectType.F_EXTENSION);
var objectExt = SearchFactory.createSearchableExtensionWrapperList(containerDef, getPageBase(), targetExtensionPath);
LOGGER.debug("Adding extension properties from targetRef/@: {}", objectExt);
defs.addAll(objectExt);
}
return defs;

}


@Override
protected PrismContainerDefinition<AssignmentType> getTypeDefinitionForSearch() {
if (searchDefinition != null) {
return searchDefinition;
}
PrismContainerDefinition<AssignmentType> orig = super.getTypeDefinitionForSearch();
if (getAssignmentType() == null) {
searchDefinition = orig;
} else {
// We have more concrete assignment type, we should replace targetRef definition
// with one with concrete assignment type.
var transformed = TransformableContainerDefinition.of(orig);
var targetRef = TransformableReferenceDefinition.of(orig.getComplexTypeDefinition().findReferenceDefinition(AssignmentType.F_TARGET_REF));
targetRef.setTargetTypeName(getAssignmentType());
transformed.getComplexTypeDefinition().replaceDefinition(AssignmentType.F_TARGET_REF, targetRef);
searchDefinition = transformed;
}

return searchDefinition;
}


@Override
protected PrismContainerDefinition<AssignmentType> getContainerDefinitionForColumns() {
// In columns model we can benefit for same targetType expansion as in container model.
return getTypeDefinitionForSearch();
}



@Deprecated
protected abstract void addSpecificSearchableItems(PrismContainerDefinition<AssignmentType> containerDef, List<SearchItemDefinition> defs);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.component.AssignmentHolderAssignmentPanel;

import com.evolveum.midpoint.web.application.PanelDisplay;
import com.evolveum.midpoint.web.application.PanelInstance;
import com.evolveum.midpoint.web.application.PanelType;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.model.api.authentication.CompiledGuiProfile;
import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.util.DisplayableValue;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
Expand Down Expand Up @@ -37,6 +38,7 @@ public class ContainerTypeSearchItem<C extends Containerable> extends SearchItem
private Class<C> oldType;
private boolean visible = false;
private ObjectTypeSearchItemConfigurationType configuration = null;
private PrismContainerDefinition<C> containerDef;

public ContainerTypeSearchItem(Class<C> typeClass) {
this(new SearchValue<>(typeClass, ""), null);
Expand Down Expand Up @@ -132,4 +134,12 @@ public boolean isTypeChanged(){
public void setConfiguration(ObjectTypeSearchItemConfigurationType configuration) {
this.configuration = configuration;
}

public PrismContainerDefinition<C> getContainerDefinition() {
return containerDef;
}

public void setContainerDefinition(PrismContainerDefinition<C> containerDef) {
this.containerDef = containerDef;
}
}

0 comments on commit 253c038

Please sign in to comment.