Skip to content

Commit

Permalink
MID-8965 request access better support for requesting with more relat…
Browse files Browse the repository at this point in the history
…ions, wip
  • Loading branch information
1azyman committed Aug 16, 2023
1 parent 39090cf commit f1ef048
Show file tree
Hide file tree
Showing 7 changed files with 198 additions and 114 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,6 @@
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.gui.api.prism.ItemStatus;
import com.evolveum.midpoint.gui.impl.page.admin.org.PageOrgHistory;
import com.evolveum.midpoint.gui.impl.page.admin.role.PageRoleHistory;
import com.evolveum.midpoint.gui.impl.page.admin.service.PageServiceHistory;

import com.evolveum.midpoint.gui.impl.page.admin.user.PageUserHistory;

import com.evolveum.midpoint.gui.impl.page.login.PageLogin;
import com.evolveum.midpoint.model.api.ActivityCustomization;
import com.evolveum.midpoint.prism.delta.*;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.web.security.MidPointAuthWebSession;
import com.evolveum.midpoint.web.component.dialog.Popupable;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
Expand Down Expand Up @@ -99,6 +85,7 @@
import com.evolveum.midpoint.gui.api.model.ReadOnlyModel;
import com.evolveum.midpoint.gui.api.page.PageAdminLTE;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.prism.ItemStatus;
import com.evolveum.midpoint.gui.api.prism.wrapper.*;
import com.evolveum.midpoint.gui.impl.GuiChannel;
import com.evolveum.midpoint.gui.impl.component.data.provider.BaseSortableDataProvider;
Expand All @@ -120,14 +107,19 @@
import com.evolveum.midpoint.gui.impl.page.admin.objectcollection.PageObjectCollection;
import com.evolveum.midpoint.gui.impl.page.admin.objecttemplate.PageObjectTemplate;
import com.evolveum.midpoint.gui.impl.page.admin.org.PageOrg;
import com.evolveum.midpoint.gui.impl.page.admin.org.PageOrgHistory;
import com.evolveum.midpoint.gui.impl.page.admin.report.PageReport;
import com.evolveum.midpoint.gui.impl.page.admin.resource.PageResource;
import com.evolveum.midpoint.gui.impl.page.admin.resource.PageShadow;
import com.evolveum.midpoint.gui.impl.page.admin.role.PageRole;
import com.evolveum.midpoint.gui.impl.page.admin.role.PageRoleHistory;
import com.evolveum.midpoint.gui.impl.page.admin.service.PageService;
import com.evolveum.midpoint.gui.impl.page.admin.service.PageServiceHistory;
import com.evolveum.midpoint.gui.impl.page.admin.simulation.PageSimulationResult;
import com.evolveum.midpoint.gui.impl.page.admin.task.PageTask;
import com.evolveum.midpoint.gui.impl.page.admin.user.PageUser;
import com.evolveum.midpoint.gui.impl.page.admin.user.PageUserHistory;
import com.evolveum.midpoint.gui.impl.page.login.PageLogin;
import com.evolveum.midpoint.gui.impl.page.self.PageOrgSelfProfile;
import com.evolveum.midpoint.gui.impl.page.self.PageRoleSelfProfile;
import com.evolveum.midpoint.gui.impl.page.self.PageServiceSelfProfile;
Expand All @@ -143,6 +135,10 @@
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.crypto.EncryptionException;
import com.evolveum.midpoint.prism.crypto.Protector;
import com.evolveum.midpoint.prism.delta.ChangeType;
import com.evolveum.midpoint.prism.delta.ItemDelta;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.delta.PropertyDelta;
import com.evolveum.midpoint.prism.path.ItemName;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.path.ItemPathCollectionsUtil;
Expand Down Expand Up @@ -186,6 +182,7 @@
import com.evolveum.midpoint.web.component.data.SelectableDataTable;
import com.evolveum.midpoint.web.component.data.Table;
import com.evolveum.midpoint.web.component.data.column.ColumnMenuAction;
import com.evolveum.midpoint.web.component.dialog.Popupable;
import com.evolveum.midpoint.web.component.input.DisplayableValueChoiceRenderer;
import com.evolveum.midpoint.web.component.input.DropDownChoicePanel;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
Expand All @@ -208,6 +205,7 @@
import com.evolveum.midpoint.web.page.admin.users.PageUsers;
import com.evolveum.midpoint.web.page.admin.workflow.dto.EvaluatedTriggerGroupDto;
import com.evolveum.midpoint.web.security.MidPointApplication;
import com.evolveum.midpoint.web.security.MidPointAuthWebSession;
import com.evolveum.midpoint.web.session.SessionStorage;
import com.evolveum.midpoint.web.util.DateValidator;
import com.evolveum.midpoint.web.util.InfoTooltipBehavior;
Expand All @@ -231,6 +229,8 @@ public final class WebComponentUtil {

private static final Trace LOGGER = TraceManager.getTrace(WebComponentUtil.class);

private static final String DEFAULT_RELATION_ICON = "fa-solid fa-user";

private static final String KEY_BOOLEAN_NULL = "Boolean.NULL";
private static final String KEY_BOOLEAN_TRUE = "Boolean.TRUE";
private static final String KEY_BOOLEAN_FALSE = "Boolean.FALSE";
Expand Down Expand Up @@ -2106,6 +2106,68 @@ private static PolyStringType getRelationLabel(RelationDefinitionType definition
return displayType.getLabel();
}

public static RelationDefinitionType getRelationDefinition(QName relation, List<RelationDefinitionType> relations) {
if (relations == null) {
return null;
}

for (RelationDefinitionType rel : relations) {
if (relation.equals(rel.getRef())) {
return rel;
}
}

return null;
}

public static String getRelationIcon(QName relation, List<RelationDefinitionType> relations) {
final String defaultIcon = getDefaultRelationIcon(relation);

RelationDefinitionType rel = getRelationDefinition(relation, relations);
if (rel == null || rel.getDisplay() == null) {
return defaultIcon;
}

DisplayType display = rel.getDisplay();

IconType it = display.getIcon();
if (it == null || it.getCssClass() == null) {
return defaultIcon;
}

return it.getCssClass();
}

public static PolyString getRelationLabel(QName relation, List<RelationDefinitionType> relations) {
final PolyString defaultLabel = new PolyString(relation.getLocalPart());

RelationDefinitionType rel = getRelationDefinition(relation, relations);
if (rel == null) {
return defaultLabel;
}

DisplayType display = rel.getDisplay();
if (display == null || display.getLabel() == null) {
return defaultLabel;
}

return display.getLabel().toPolyString();
}

public static String getDefaultRelationIcon(QName name) {
if (SchemaConstants.ORG_DEFAULT.equals(name)) {
return "fa-solid fa-user";
} else if (SchemaConstants.ORG_MANAGER.equals(name)) {
return "fa-solid fa-user-tie";
} else if (SchemaConstants.ORG_APPROVER.equals(name)) {
return "fa-solid fa-clipboard-check";
} else if (SchemaConstants.ORG_OWNER.equals(name)) {
return "fa-solid fa-crown";
}

return DEFAULT_RELATION_ICON;
}

public static String createUserIcon(PrismObject<UserType> object) {
UserType user = object.asObjectable();

Expand Down Expand Up @@ -2661,6 +2723,7 @@ public static Class<? extends PageBase> getNewlyCreatedObjectPage(Class<? extend
public static Class<? extends PageBase> getObjectListPage(Class<? extends ObjectType> type) {
return OBJECT_LIST_PAGE_MAP.get(type);
}

public static Class<? extends PageBase> getPageHistoryDetailsPage(Class<?> page) {
return OBJECT_HISTORY_PAGE_MAP.get(page);
}
Expand Down Expand Up @@ -5674,7 +5737,7 @@ public static String createMappingIcon(PrismContainerValueWrapper<? extends Cont

if (object.getParentContainerValue(ResourceActivationDefinitionType.class) != null
|| object.getParentContainerValue(ResourcePasswordDefinitionType.class) != null) {
if (QNameUtil.match(def.getTypeName(), MappingType.COMPLEX_TYPE)){
if (QNameUtil.match(def.getTypeName(), MappingType.COMPLEX_TYPE)) {

PrismContainerValueWrapper parent =
object.getParentContainerValue(ResourceBidirectionalMappingType.class);
Expand Down Expand Up @@ -5730,7 +5793,7 @@ public static LookupTableType loadLookupTable(String lookupTableOid, PageBase pa
PrismObject<LookupTableType> prismLookupTable =
WebModelServiceUtils.loadObject(LookupTableType.class, lookupTableOid, options, pageBase, task, result);
if (prismLookupTable != null) {
return prismLookupTable.asObjectable();
return prismLookupTable.asObjectable();
}
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
Expand All @@ -42,13 +43,15 @@
import com.evolveum.midpoint.gui.api.component.wizard.WizardModel;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.LocalizationUtil;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.gui.impl.component.data.provider.ListDataProvider;
import com.evolveum.midpoint.gui.impl.page.self.PageRequestAccess;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.xml.XmlTypeConverter;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.RelationRegistry;
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.result.OperationResult;
Expand All @@ -60,6 +63,7 @@
import com.evolveum.midpoint.web.component.form.MidpointForm;
import com.evolveum.midpoint.web.component.util.EnableBehaviour;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.web.security.MidPointApplication;
import com.evolveum.midpoint.web.util.TooltipBehavior;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

Expand Down Expand Up @@ -91,15 +95,29 @@ public class CartSummaryPanel extends BasePanel<RequestAccess> implements Access

private final WizardModel wizard;

private IModel<List<RelationDefinitionType>> systemRelations;

public CartSummaryPanel(String id, WizardModel wizard, IModel<RequestAccess> model, PageBase page) {
super(id, model);

this.wizard = wizard;
this.page = page;

initModels();
initLayout();
}

private void initModels() {
systemRelations = new LoadableDetachableModel<>() {

@Override
protected List<RelationDefinitionType> load() {
RelationRegistry registry = MidPointApplication.get().getRelationRegistry();
return registry.getRelationDefinitions();
}
};
}

@Override
protected void onConfigure() {
super.onConfigure();
Expand Down Expand Up @@ -402,7 +420,17 @@ protected IResource load() {

@Override
public void populateItem(Item<ICellPopulator<ShoppingCartItem>> item, String id, IModel<ShoppingCartItem> model) {
item.add(new Label(id, () -> model.getObject().getName()));
item.add(new Label(id, () -> {
ShoppingCartItem cartItem = model.getObject();

List<RelationDefinitionType> systemRelations = CartSummaryPanel.this.systemRelations.getObject();
String relation = LocalizationUtil.translatePolyString(
WebComponentUtil.getRelationLabel(cartItem.getRelation(), systemRelations));

return LocalizationUtil.translate(
"ShoppingCartPanel.accessNameValue", new Object[] {
cartItem.getName(), relation });
}));
}
});
columns.add(new AbstractColumn<>(createStringResource("ShoppingCartPanel.selectedUsers")) {
Expand Down

0 comments on commit f1ef048

Please sign in to comment.