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
katkav committed Sep 28, 2021
2 parents 7dce257 + a79d963 commit 4070caa
Show file tree
Hide file tree
Showing 88 changed files with 3,258 additions and 1,607 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,30 @@
import java.util.*;
import javax.annotation.PostConstruct;

import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView;
import com.evolveum.midpoint.prism.polystring.PolyString;

import com.evolveum.midpoint.schema.util.MiscSchemaUtil;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringTranslationType;

import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;

import org.apache.commons.lang3.BooleanUtils;
import org.apache.wicket.markup.html.panel.Panel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.evolveum.midpoint.model.api.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.model.api.authentication.CompiledGuiProfile;
import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView;
import com.evolveum.midpoint.model.api.authentication.GuiProfileCompilable;
import com.evolveum.midpoint.model.api.authentication.GuiProfileCompilerRegistry;
import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.polystring.PolyString;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.util.MiscSchemaUtil;
import com.evolveum.midpoint.util.ClassPathUtil;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.web.application.*;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.prism.xml.ns._public.types_3.ItemPathType;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringTranslationType;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;

@Component
public class DefaultGuiConfigurationCompiler implements GuiProfileCompilable {
Expand All @@ -46,40 +43,39 @@ public class DefaultGuiConfigurationCompiler implements GuiProfileCompilable {
@Autowired private PrismContext prismContext;
@Autowired private AdminGuiConfigurationMergeManager adminGuiConfigurationMergeManager;

@SuppressWarnings("SpellCheckingInspection")
private static final String[] PANEL_PACKAGES_TO_SCAN = {
"com.evolveum.midpoint.web.component.objectdetails", //Old panels
"com.evolveum.midpoint.web.component.assignment", //Assignments
"com.evolveum.midpoint.gui.impl.page.admin",
"com.evolveum.midpoint.gui.impl.page.admin.component",
"com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.component",
"com.evolveum.midpoint.gui.impl.page.admin.abstractrole.component",
"com.evolveum.midpoint.gui.impl.page.admin.focus.component",
"com.evolveum.midpoint.gui.impl.page.admin.resource.component",
"com.evolveum.midpoint.gui.impl.page.admin.task.component",
"com.evolveum.midpoint.gui.impl.component.assignment",
"com.evolveum.midpoint.gui.impl.page.admin.archetype.component",
"com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.component",
"com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.component.assignmentType.assignment",
"com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.component.assignmentType.inducement",
"com.evolveum.midpoint.gui.impl.page.admin.org.component",
"com.evolveum.midpoint.gui.impl.page.admin.cases.component",
"com.evolveum.midpoint.gui.impl.page.admin.user.component",
"com.evolveum.midpoint.gui.impl.page.admin.component",
"com.evolveum.midpoint.gui.impl.page.admin.focus.component",
"com.evolveum.midpoint.gui.impl.page.admin.objectcollection.component",
"com.evolveum.midpoint.gui.impl.page.admin.objecttemplate.component",
"com.evolveum.midpoint.gui.impl.page.admin.archetype.component",
"com.evolveum.midpoint.gui.impl.page.admin.report.component"
"com.evolveum.midpoint.gui.impl.page.admin.org.component",
"com.evolveum.midpoint.gui.impl.page.admin.report.component",
"com.evolveum.midpoint.gui.impl.page.admin.resource.component",
"com.evolveum.midpoint.gui.impl.page.admin.task.component",
"com.evolveum.midpoint.gui.impl.page.admin.user.component",
"com.evolveum.midpoint.web.component.assignment", //Assignments
"com.evolveum.midpoint.web.component.objectdetails" //Old panels
};

private static final String[] COLLECTION_PACKAGES_TO_SCAN = {
"com.evolveum.midpoint.web.page.admin.users",
"com.evolveum.midpoint.web.page.admin.services",
"com.evolveum.midpoint.web.page.admin.tasks",
"com.evolveum.midpoint.web.page.admin.roles",
"com.evolveum.midpoint.web.page.admin.resources",
"com.evolveum.midpoint.web.page.admin.reports",
"com.evolveum.midpoint.web.page.admin.orgs",
"com.evolveum.midpoint.web.page.admin.objectTemplate",
"com.evolveum.midpoint.web.page.admin.objectCollection",
"com.evolveum.midpoint.web.page.admin.archetype",
"com.evolveum.midpoint.web.page.admin.cases",
"com.evolveum.midpoint.web.page.admin.archetype"
"com.evolveum.midpoint.web.page.admin.objectCollection",
"com.evolveum.midpoint.web.page.admin.objectTemplate",
"com.evolveum.midpoint.web.page.admin.orgs",
"com.evolveum.midpoint.web.page.admin.reports",
"com.evolveum.midpoint.web.page.admin.resources",
"com.evolveum.midpoint.web.page.admin.roles",
"com.evolveum.midpoint.web.page.admin.services",
"com.evolveum.midpoint.web.page.admin.users"
};

private final Map<String, Class<? extends Panel>> panelsMap = new HashMap<>();
Expand Down Expand Up @@ -217,6 +213,7 @@ private void fillInPanelsMap(Set<Class<?>> classes) {
if (isNotPanelTypeDefinition(clazz, panelType)) {
continue;
}
//noinspection unchecked
panelsMap.put(panelType.name(), (Class<? extends Panel>) clazz);
}
}
Expand Down Expand Up @@ -335,7 +332,7 @@ private boolean isNotApplicableFor(Class<? extends ObjectType> objectType, Panel
}

if (panelInstance.excludeTypes() != null && panelInstance.excludeTypes().length > 0) {
return Arrays.stream(panelInstance.excludeTypes()).anyMatch(o -> o.equals(objectType));
return Arrays.asList(panelInstance.excludeTypes()).contains(objectType);
}

return !panelInstance.applicableForType().isAssignableFrom(objectType);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import com.evolveum.midpoint.prism.PrismReferenceDefinition;
import com.evolveum.midpoint.prism.path.ItemName;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.prism.util.PolyStringUtils;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.schema.constants.ExpressionConstants;
Expand Down Expand Up @@ -70,13 +71,20 @@
import com.evolveum.midpoint.web.session.UserProfileStorage;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.export.AbstractExportableColumn;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
Expand Down Expand Up @@ -185,6 +193,13 @@ protected UserProfileStorage.TableId getTableId() {
return AbstractRoleMemberPanel.this.getTableId(getComplexTypeQName());
}

@Override
protected List<IColumn<SelectableBean<AH>, String>> createDefaultColumns() {
List<IColumn<SelectableBean<AH>, String>> columns = super.createDefaultColumns();
columns.add(createRelationColumn());
return columns;
}

@Override
protected boolean isObjectDetailsEnabled(IModel<SelectableBean<AH>> rowModel) {
if (rowModel == null || rowModel.getObject() == null
Expand Down Expand Up @@ -267,6 +282,50 @@ public ContainerPanelConfigurationType getPanelConfiguration() {
memberContainer.add(childrenListPanel);
}

private <AH extends AssignmentHolderType> IColumn<SelectableBean<AH>, String> createRelationColumn() {
return new AbstractExportableColumn<>(
createStringResource("roleMemberPanel.relation")) {
private static final long serialVersionUID = 1L;

@Override
public void populateItem(Item<ICellPopulator<SelectableBean<AH>>> cellItem,
String componentId, IModel<SelectableBean<AH>> rowModel) {
cellItem.add(new Label(componentId,
getRelationValue(rowModel.getObject().getValue())));
}

@Override
public IModel<String> getDataModel(IModel<SelectableBean<AH>> rowModel) {
return Model.of(getRelationValue(rowModel.getObject().getValue()));
}

};
}

private <AH extends AssignmentHolderType> String getRelationValue(AH value) {
List<String> relations = new ArrayList<>();
for (ObjectReferenceType roleMembershipRef : value.getRoleMembershipRef()) {
List<QName> defaultRelations = getDefaultRelationsForActions();
if (roleMembershipRef.getOid().equals(getModelObject().getOid())
&& (defaultRelations.contains(roleMembershipRef.getRelation())
|| defaultRelations.contains(PrismConstants.Q_ANY))) {
String relation = roleMembershipRef.getRelation().getLocalPart();
RelationDefinitionType relationDef = WebComponentUtil.getRelationDefinition(roleMembershipRef.getRelation());
if (relationDef != null) {
DisplayType display = relationDef.getDisplay();
if (display != null) {
PolyStringType label = display.getLabel();
if (PolyStringUtils.isNotEmpty(label)) {
relation = WebComponentUtil.getTranslatedPolyString(label);
}
}
}
relations.add(relation);
}
}
return String.join(", ", relations);
}

private CompiledObjectCollectionView getCompiledCollectionViewFromPanelConfiguration() {
if (compiledCollectionViewFromPanelConfiguration != null) {
return compiledCollectionViewFromPanelConfiguration;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,21 @@
import java.util.*;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.prism.util.PolyStringUtils;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.export.AbstractExportableColumn;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
Expand Down Expand Up @@ -154,6 +162,13 @@ protected UserProfileStorage.TableId getTableId() {
return AbstractRoleMemberPanel.this.getTableId(getComplexTypeQName());
}

@Override
protected List<IColumn<SelectableBean<AH>, String>> createDefaultColumns() {
List<IColumn<SelectableBean<AH>, String>> columns = super.createDefaultColumns();
columns.add(createRelationColumn());
return columns;
}

@Override
protected boolean isObjectDetailsEnabled(IModel<SelectableBean<AH>> rowModel) {
if (rowModel == null || rowModel.getObject() == null
Expand Down Expand Up @@ -233,6 +248,50 @@ protected LoadableModel<MultiFunctinalButtonDto> loadButtonDescriptions() {
memberContainer.add(childrenListPanel);
}

private <AH extends AssignmentHolderType> IColumn<SelectableBean<AH>, String> createRelationColumn() {
return new AbstractExportableColumn<>(
createStringResource("roleMemberPanel.relation")) {
private static final long serialVersionUID = 1L;

@Override
public void populateItem(Item<ICellPopulator<SelectableBean<AH>>> cellItem,
String componentId, IModel<SelectableBean<AH>> rowModel) {
cellItem.add(new Label(componentId,
getRelationValue(rowModel.getObject().getValue())));
}

@Override
public IModel<String> getDataModel(IModel<SelectableBean<AH>> rowModel) {
return Model.of(getRelationValue(rowModel.getObject().getValue()));
}

};
}

private <AH extends AssignmentHolderType> String getRelationValue(AH value) {
List<String> relations = new ArrayList<>();
for (ObjectReferenceType roleMembershipRef : value.getRoleMembershipRef()) {
List<QName> defaultRelations = getDefaultRelationsForActions();
if (roleMembershipRef.getOid().equals(AbstractRoleMemberPanel.this.getModelObject().getOid())
&& (defaultRelations.contains(roleMembershipRef.getRelation())
|| defaultRelations.contains(PrismConstants.Q_ANY))) {
String relation = roleMembershipRef.getRelation().getLocalPart();
RelationDefinitionType relationDef = WebComponentUtil.getRelationDefinition(roleMembershipRef.getRelation());
if (relationDef != null) {
DisplayType display = relationDef.getDisplay();
if (display != null) {
PolyStringType label = display.getLabel();
if (PolyStringUtils.isNotEmpty(label)) {
relation = WebComponentUtil.getTranslatedPolyString(label);
}
}
}
relations.add(relation);
}
}
return String.join(", ", relations);
}

private <AH extends AssignmentHolderType> Class<AH> getDefaultObjectTypeClass() {
QName objectTypeQname = getMemberPanelStorage().getDefaultObjectType();
return ObjectTypes.getObjectTypeClass(objectTypeQname);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ public ObjectTreeDeltas<T> clone() {
return clone;
}

public Set<? extends Map.Entry<ResourceShadowDiscriminator, ObjectDelta<ShadowType>>> getProjectionChangeMapEntries() {
public Set<Map.Entry<ResourceShadowDiscriminator, ObjectDelta<ShadowType>>> getProjectionChangeMapEntries() {
return projectionChangeMap.entrySet();
}

Expand All @@ -123,9 +123,7 @@ private ObjectTreeDeltasType toObjectTreeDeltasType() throws SchemaException {
if (getFocusChange() != null) {
jaxb.setFocusPrimaryDelta(DeltaConvertor.toObjectDeltaType(getFocusChange()));
}
//noinspection unchecked
Set<Map.Entry<ResourceShadowDiscriminator, ObjectDelta<ShadowType>>> entries =
(Set<Map.Entry<ResourceShadowDiscriminator, ObjectDelta<ShadowType>>>) getProjectionChangeMapEntries();
Set<Map.Entry<ResourceShadowDiscriminator, ObjectDelta<ShadowType>>> entries = getProjectionChangeMapEntries();
for (Map.Entry<ResourceShadowDiscriminator, ObjectDelta<ShadowType>> entry : entries) {
ProjectionObjectDeltaType projChange = new ProjectionObjectDeltaType();
projChange.setResourceShadowDiscriminator(entry.getKey().toResourceShadowDiscriminatorType());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,10 @@ public class ResourceShadowDiscriminator implements Serializable, DebugDumpable,

private static final long serialVersionUID = 346600684011645741L;

private String resourceOid;
private final String resourceOid;
private ShadowKindType kind = ShadowKindType.ACCOUNT;
private String intent;
private String tag;
private final String tag;
private QName objectClass;
private boolean tombstone;
private int order = 0;
Expand Down Expand Up @@ -75,39 +75,38 @@ public ResourceShadowDiscriminator(ShadowDiscriminatorType accRefType, String de
this.tombstone = false;
setIntent(accRefType.getIntent());
setKind(kind);
this.tag = null;
}

public ResourceShadowDiscriminator(String resourceOid) {
this.resourceOid = resourceOid;
this.tag = null;
}

public ResourceShadowDiscriminator(String resourceOid, QName objectClass) {
this.resourceOid = resourceOid;
this.objectClass = objectClass;
this.kind = null;
this.tag = null;
}

public String getResourceOid() {
return resourceOid;
}

public void setResourceOid(String resourceOid) {
this.resourceOid = resourceOid;
}

public ShadowKindType getKind() {
return kind;
}

public void setKind(ShadowKindType kind) {
private void setKind(ShadowKindType kind) {
this.kind = kind;
}

public String getIntent() {
return intent;
}

public void setIntent(String intent) {
private void setIntent(String intent) {
// if (intent == null) {
// intent = SchemaConstants.INTENT_DEFAULT;
// }
Expand All @@ -118,10 +117,6 @@ public String getTag() {
return tag;
}

public void setTag(String tag) {
this.tag = tag;
}

public QName getObjectClass() {
return objectClass;
}
Expand Down

0 comments on commit 4070caa

Please sign in to comment.