Skip to content

Commit

Permalink
Merge branch 'support-4.4' of https://github.com/Evolveum/midpoint in…
Browse files Browse the repository at this point in the history
…to support-4.4
  • Loading branch information
Kateryna Honchar committed Aug 23, 2022
2 parents b73df86 + fadef6e commit 6d3c923
Show file tree
Hide file tree
Showing 41 changed files with 674 additions and 178 deletions.
2 changes: 1 addition & 1 deletion gui/admin-gui/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,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 @@ -70,13 +70,13 @@ public class DefaultGuiConfigurationCompiler implements GuiProfileCompilable {
"com.evolveum.midpoint.web.page.admin.users"
};

private final Map<String, Class<? extends Panel>> panelsMap = new HashMap<>();
private static final Map<Object, Collection<Class<?>>> SCANNED_CLASSES_MAP = new HashMap<>();

private final Map<String, SimpleCounter> countersMap = new HashMap<>();
private static final Map<String, Class<? extends Panel>> PANELS_MAP = new HashMap<>();

private Boolean experimentalFeaturesEnabled = false;
private static final Map<String, SimpleCounter> COUNTERS_MAP = new HashMap<>();

private static final Map<Object, Collection<Class<?>>> SCANNED_CLASSES_MAP = new HashMap<>();
private Boolean experimentalFeaturesEnabled = false;

private static synchronized Collection<Class<?>> getClassesForAnnotation(Class<? extends Annotation> annotation, String additionalPackagesToScan) {
Collection<Class<?>> result = SCANNED_CLASSES_MAP.get(annotation);
Expand Down Expand Up @@ -121,31 +121,29 @@ private Collection<Class<?>> getPanelTypeClasses() {
return getClassesForAnnotation(PanelType.class, additionalPackagesToScan);
}

@Override
@PostConstruct
public void register() {
public void init() {
fillInPanelsMap();
fillInCountersMap();

registry.registerCompiler(this);
}

public Class<? extends Panel> findPanel(String identifier) {
return panelsMap.get(identifier);
return PANELS_MAP.get(identifier);
}

public SimpleCounter findCounter(String identifier) {
return countersMap.get(identifier);
return COUNTERS_MAP.get(identifier);
}

@Override
public void postProcess(CompiledGuiProfile compiledGuiProfile) {
experimentalFeaturesEnabled = compiledGuiProfile.isEnableExperimentalFeatures();

fillInPanelsMap();
fillInCountersMap();

compileDefaultDetailsPages(compiledGuiProfile);
mergeCollectionViewsWithDefault(compiledGuiProfile);
processShadowPanels(compiledGuiProfile);

}

private void compileDefaultDetailsPages(CompiledGuiProfile compiledGuiProfile) {
Expand Down Expand Up @@ -262,8 +260,8 @@ private void processShadowPanels(CompiledGuiProfile compiledGuiProfile) {
}
}

private void fillInPanelsMap() {
if (!panelsMap.isEmpty()) {
private synchronized void fillInPanelsMap() {
if (!PANELS_MAP.isEmpty()) {
return;
}
for (Class<?> clazz : getPanelTypeClasses()) {
Expand All @@ -272,7 +270,7 @@ private void fillInPanelsMap() {
continue;
}
//noinspection unchecked
panelsMap.put(panelType.name(), (Class<? extends Panel>) clazz);
PANELS_MAP.put(panelType.name(), (Class<? extends Panel>) clazz);
}
}

Expand All @@ -289,18 +287,19 @@ private boolean isNotPanelTypeDefinition(Class<?> clazz, PanelType panelType) {
return false;
}

private void fillInCountersMap() {
if (!countersMap.isEmpty()) {
private synchronized void fillInCountersMap() {
if (!COUNTERS_MAP.isEmpty()) {
return;
}

for (Class<?> clazz : getPanelInstanceClasses()) {
Counter counterDefinition = clazz.getAnnotation(Counter.class);
if (counterDefinition != null) {
Class<? extends SimpleCounter> counterProvider = counterDefinition.provider();
try {
PanelInstance panelInstance = clazz.getAnnotation(PanelInstance.class);
if (panelInstance != null) {
countersMap.put(panelInstance.identifier(), counterProvider.getDeclaredConstructor().newInstance());
COUNTERS_MAP.put(panelInstance.identifier(), counterProvider.getDeclaredConstructor().newInstance());
}
} catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
//TODO log at least
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -979,9 +979,6 @@ public String getDescribe() {
@Override
public String getObject() {
String subscriptionId = getSubscriptionId();
if (StringUtils.isEmpty(subscriptionId)) {
return "";
}
if (!WebComponentUtil.isSubscriptionIdCorrect(subscriptionId)) {
return " " + createStringResource("PageBase.nonActiveSubscriptionMessage").getString();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.schema.constants.ExpressionConstants;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.expression.TypedValue;
import com.evolveum.midpoint.schema.expression.VariablesMap;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.MiscSchemaUtil;
Expand Down Expand Up @@ -520,11 +521,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 @@ -666,6 +670,9 @@ protected Collection<String> evaluateExpression(C rowValue, Item<?, ?> columnIte
variablesMap.put(ExpressionConstants.VAR_OBJECT, rowValue, rowValue.getClass());
if (columnItem != null) {
variablesMap.put(ExpressionConstants.VAR_INPUT, columnItem, columnItem.getDefinition());
} else {
// TODO: Is this correct?
variablesMap.put(ExpressionConstants.VAR_INPUT, new TypedValue<>(null, Item.class));
}
return ExpressionUtil.evaluateStringExpression(variablesMap, getPageBase().getPrismContext(), expression,
MiscSchemaUtil.getExpressionProfile(), getPageBase().getExpressionFactory(), "evaluate column expression",
Expand Down Expand Up @@ -1139,6 +1146,7 @@ public void clearCache() {
WebComponentUtil.clearProviderCache(getDataProvider());
}

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

private String getItemDisplayName(GuiObjectColumnType column){
ItemDefinition itemDefinition = getPageBase().getPrismContext().getSchemaRegistry()
.findContainerDefinitionByCompileTimeClass(getType()).findItemDefinition(column.getPath().getItemPath());
var 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 @@ -77,7 +77,7 @@ public MultivalueContainerListPanel(String id, Class<C> type, ContainerPanelConf
@Override
protected Search createSearch(Class<C> type) {
PrismContainerDefinition<C> containerDefinition = getTypeDefinitionForSearch();
return SearchFactory.createContainerSearch(createTypeSearchItem(type, containerDefinition), getTypeDefinitionForSearch(),
return SearchFactory.createContainerSearch(createTypeSearchItem(type, containerDefinition), containerDefinition,
getDefaultSearchItem(), initSearchableItems(containerDefinition), getPageBase(), false);
}

Expand Down Expand Up @@ -173,6 +173,7 @@ public List<InlineMenuItem> getDefaultMenuActions() {
menuItems.add(new ButtonInlineMenuItem(createStringResource("pageAdminFocus.button.delete")) {
private static final long serialVersionUID = 1L;

@Override
public CompositedIconBuilder getIconCompositedBuilder(){
return getDefaultCompositedIconBuilder(GuiStyleConstants.CLASS_DELETE_MENU_ITEM);
}
Expand Down Expand Up @@ -265,6 +266,7 @@ public void deleteItemPerformed(AjaxRequestTarget target, List<PrismContainerVal

protected abstract boolean isCreateNewObjectVisible();

@Override
public boolean isListPanelVisible(){
return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.checkerframework.common.returnsreceiver.qual.This;

import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.api.component.AssignmentPopup;
Expand All @@ -42,6 +43,8 @@
import com.evolveum.midpoint.gui.impl.component.icon.CompositedIconBuilder;
import com.evolveum.midpoint.gui.impl.component.icon.IconCssStyle;
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.query.ObjectFilter;
Expand Down Expand Up @@ -88,11 +91,15 @@ public abstract class AbstractAssignmentTypePanel extends MultivalueContainerLis
protected static final String OPERATION_LOAD_ASSIGNMENTS_TARGET_OBJ = DOT_CLASS + "loadAssignmentsTargetRefObject";
protected static final String OPERATION_LOAD_ASSIGNMENT_TARGET_RELATIONS = DOT_CLASS + "loadAssignmentTargetRelations";

public static final ItemPath TARGET_REF_OBJ = ItemPath.create(AssignmentType.F_TARGET_REF, PrismConstants.T_OBJECT_REFERENCE);
private static final ItemPath TARGET_REF_EXTENSION = ItemPath.create(AssignmentType.F_TARGET_REF, PrismConstants.T_OBJECT_REFERENCE, ObjectType.F_EXTENSION);

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 @@ -629,9 +636,39 @@ protected List<SearchItemDefinition> initSearchableItems(PrismContainerDefinitio
return createSearchableItems(containerDef);
}


@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();
}

@Override
protected Search createSearch(Class<AssignmentType> type) {
Search search = super.createSearch(type);
search.getType().setContainerDefinition(getTypeDefinitionForSearch());
search.setFullTextSearchEnabled(isRepositorySearchEnabled());
return search;
}
Expand All @@ -645,6 +682,12 @@ protected List<SearchItemDefinition> createSearchableItems(PrismContainerDefinit

defs.addAll(SearchFactory.createExtensionDefinitionList(containerDef));

// We can determine indexed extensions if getAssignmentType() != null
if (getAssignmentType() != null) {
var objectExt = SearchFactory.createExtensionDefinitionList(containerDef, TARGET_REF_EXTENSION);
LOGGER.debug("Adding extension properties from targetRef/@: {}", objectExt);
defs.addAll(objectExt);
}
return defs;

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,23 @@
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.web.component.search.SearchFactory;
import com.evolveum.midpoint.web.component.search.SearchItemDefinition;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractRoleType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentHolderType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ContainerPanelConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.PolicyRuleType;

public abstract class AbstractRoleAssignmentPanel<AH extends AssignmentHolderType> extends AbstractAssignmentPanel<AH> {

public AbstractRoleAssignmentPanel(String id, IModel<PrismObjectWrapper<AH>> model, ContainerPanelConfigurationType config) {
super(id, model, config);
}

@Override
protected List<IColumn<PrismContainerValueWrapper<AssignmentType>, String>> initColumns() {
List<IColumn<PrismContainerValueWrapper<AssignmentType>, String>> columns = new ArrayList<>();

Expand Down Expand Up @@ -73,4 +78,14 @@ private <AR extends AbstractRoleType> IModel<String> getIdentifierLabelModel(Pri
}
return Model.of("");
}

@Override
protected void addSpecificSearchableItems(PrismContainerDefinition<AssignmentType> containerDef,
List<SearchItemDefinition> defs) {
super.addSpecificSearchableItems(containerDef, defs);
if (isRepositorySearchEnabled()) {
SearchFactory.addSearchPropertyDef(containerDef, TARGET_REF_OBJ.append(AbstractRoleType.F_NAME), defs);
SearchFactory.addSearchPropertyDef(containerDef, TARGET_REF_OBJ.append(AbstractRoleType.F_DISPLAY_NAME), defs);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,13 @@
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.prism.PrismContainerDefinition;
import com.evolveum.midpoint.web.application.PanelDisplay;
import com.evolveum.midpoint.web.application.PanelInstance;
import com.evolveum.midpoint.web.application.PanelType;
import com.evolveum.midpoint.web.component.search.SearchFactory;
import com.evolveum.midpoint.web.component.search.SearchItemDefinition;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractRoleType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentHolderType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ContainerPanelConfigurationType;
Expand All @@ -44,4 +48,12 @@ protected QName getAssignmentType() {
return null;
}

@Override
protected void addSpecificSearchableItems(PrismContainerDefinition<AssignmentType> containerDef,
List<SearchItemDefinition> defs) {
super.addSpecificSearchableItems(containerDef, defs);
if (isRepositorySearchEnabled()) {
SearchFactory.addSearchPropertyDef(containerDef, TARGET_REF_OBJ.append(AbstractRoleType.F_NAME), defs);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,25 @@
*/
package com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.component.assignmentType.assignment;

import java.util.List;

import javax.xml.namespace.QName;

import org.apache.wicket.model.IModel;

import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.component.AssignmentHolderAssignmentPanel;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.web.application.PanelDisplay;
import com.evolveum.midpoint.web.application.PanelInstance;
import com.evolveum.midpoint.web.application.PanelType;
import com.evolveum.midpoint.web.component.search.SearchFactory;
import com.evolveum.midpoint.web.component.search.SearchItemDefinition;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractRoleType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentHolderType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ContainerPanelConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType;
Expand All @@ -36,4 +44,15 @@ public OrgAssignmentsPanel(String id, IModel<PrismObjectWrapper<AH>> model, Cont
protected QName getAssignmentType() {
return OrgType.COMPLEX_TYPE;
}

@Override
protected void addSpecificSearchableItems(PrismContainerDefinition<AssignmentType> containerDef,
List<SearchItemDefinition> defs) {
super.addSpecificSearchableItems(containerDef, defs);
if (isRepositorySearchEnabled()) {
SearchFactory.addSearchPropertyDef(containerDef, TARGET_REF_OBJ.append(OrgType.F_COST_CENTER), defs);
//SearchFactory.addSearchRefDef(containerDef, TARGET_REF_OBJ.append(OrgType.F_PARENT_ORG_REF), defs, getPageBase());
SearchFactory.addSearchPropertyDef(containerDef, TARGET_REF_OBJ.append(OrgType.F_LOCALITY), defs);
}
}
}

0 comments on commit 6d3c923

Please sign in to comment.