From 8d8dbb9c44801d1042880efb3d9af687c3d5d753 Mon Sep 17 00:00:00 2001 From: Pavol Mederly Date: Mon, 1 Aug 2016 14:33:36 +0200 Subject: [PATCH] MID-3233: Cleanup: object details page redirects --- .../api/component/MainObjectListPanel.java | 15 ++- .../result/OperationResultPanel.java | 2 +- .../gui/api/util/WebComponentUtil.java | 111 ++++++++++-------- .../data/column/ObjectNameColumn.java | 46 ++++---- .../prism/show/SceneItemValuePanel.java | 2 +- .../web/component/prism/show/ScenePanel.java | 3 +- .../web/component/wf/WorkItemsPanel.java | 4 +- .../certification/CertDecisionHelper.java | 4 +- .../admin/resources/ResourceContentPanel.java | 8 +- .../server/handlers/DefaultHandlerPanel.java | 2 +- .../component/AbstractRoleMemberPanel.java | 110 +++++------------ .../admin/users/component/TreeTablePanel.java | 81 ++----------- .../admin/workflow/ProcessInstancesPanel.java | 4 +- 13 files changed, 146 insertions(+), 246 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MainObjectListPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MainObjectListPanel.java index fe26ee41443..0e7c796b230 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MainObjectListPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MainObjectListPanel.java @@ -29,9 +29,7 @@ import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.schema.GetOperationOptions; import com.evolveum.midpoint.schema.SelectorOptions; -import com.evolveum.midpoint.web.component.data.Table; import com.evolveum.midpoint.web.component.data.column.CheckBoxHeaderColumn; -import com.evolveum.midpoint.web.component.data.column.LinkColumn; import com.evolveum.midpoint.web.component.data.column.ObjectNameColumn; import com.evolveum.midpoint.web.component.util.SelectableBean; import com.evolveum.midpoint.web.page.admin.configuration.PageImportObject; @@ -68,10 +66,19 @@ public void onClick(AjaxRequestTarget target, IModel> rowModel O object = rowModel.getObject().getValue(); MainObjectListPanel.this.objectDetailsPerformed(target, object); } - }; + + @Override + public boolean isClickable(IModel> rowModel) { + return MainObjectListPanel.this.isClickable(rowModel); + } + }; } - protected abstract void objectDetailsPerformed(AjaxRequestTarget target, O object); + protected boolean isClickable(IModel> rowModel) { + return true; + } + + protected abstract void objectDetailsPerformed(AjaxRequestTarget target, O object); protected abstract void newObjectPerformed(AjaxRequestTarget target); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/OperationResultPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/OperationResultPanel.java index f0b3297d40d..96046a3756c 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/OperationResultPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/OperationResultPanel.java @@ -158,7 +158,7 @@ public void onClick(AjaxRequestTarget target) { return; // just for safety } ObjectReferenceType ref = ObjectTypeUtil.createObjectRef(oid, ObjectTypes.TASK); - WebComponentUtil.dispatchToObjectDetailsPage(ref, getPageBase()); + WebComponentUtil.dispatchToObjectDetailsPage(ref, getPageBase(), false); } }; backgroundTask.add(new VisibleEnableBehaviour() { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java index 14d9a1011e1..fd57c570fc5 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java @@ -22,15 +22,10 @@ import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; import java.lang.management.RuntimeMXBean; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Locale; +import java.util.*; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; @@ -75,7 +70,6 @@ import com.evolveum.midpoint.gui.api.model.LoadableModel; import com.evolveum.midpoint.gui.api.model.NonEmptyModel; import com.evolveum.midpoint.gui.api.page.PageBase; -import com.evolveum.midpoint.model.api.ModelInteractionService; import com.evolveum.midpoint.prism.Objectable; import com.evolveum.midpoint.prism.PrismContainer; import com.evolveum.midpoint.prism.PrismContainerValue; @@ -195,6 +189,19 @@ public final class WebComponentUtil { private static final Trace LOGGER = TraceManager.getTrace(WebComponentUtil.class); private static DatatypeFactory df = null; + private static Map, Class> objectDetailsMap; + + static { + objectDetailsMap = new HashMap<>(); + objectDetailsMap.put(UserType.class, PageUser.class); + objectDetailsMap.put(OrgType.class, PageOrgUnit.class); + objectDetailsMap.put(RoleType.class, PageRole.class); + objectDetailsMap.put(ServiceType.class, PageService.class); + objectDetailsMap.put(ResourceType.class, PageResource.class); + objectDetailsMap.put(TaskType.class, PageTaskEdit.class); + objectDetailsMap.put(ReportType.class, PageReport.class); + } + public enum Channel { // TODO: move this to schema component LIVE_SYNC(SchemaConstants.CHANGE_CHANNEL_LIVE_SYNC_URI), @@ -1510,29 +1517,52 @@ public static T getObjectFromReference(ObjectReferenceTyp return (T) object; } - public static void dispatchToObjectDetailsPage(ObjectReferenceType objectRef, PageBase page) { + public static void dispatchToObjectDetailsPage(ObjectReferenceType objectRef, Component component, boolean failIfUnsupported) { if (objectRef == null) { return; // should not occur } - QName type = objectRef.getType(); + Validate.notNull(objectRef.getOid(), "No OID in objectRef"); + Validate.notNull(objectRef.getType(), "No type in objectRef"); + Class targetClass = ObjectTypes.getObjectTypeFromTypeQName(objectRef.getType()).getClassDefinition(); + dispatchToObjectDetailsPage(targetClass, objectRef.getOid(), component, failIfUnsupported); + } + + // shows the actual object that is passed via parameter (not its state in repository) + public static void dispatchToObjectDetailsPage(PrismObject obj, Component component) { + Class newObjectPageClass = objectDetailsMap.get(obj.getCompileTimeClass()); + if (newObjectPageClass == null) { + throw new IllegalArgumentException("Cannot determine details page for "+obj.getCompileTimeClass()); + } + + Constructor constructor; + try { + constructor = newObjectPageClass.getConstructor(PrismObject.class); + + } catch (NoSuchMethodException | SecurityException e) { + throw new SystemException("Unable to locate constructor (PrismObject) in " + newObjectPageClass + + ": " + e.getMessage(), e); + } + + PageBase page; + try { + page = (PageBase) constructor.newInstance(obj); + } catch (InstantiationException | IllegalAccessException | IllegalArgumentException + | InvocationTargetException e) { + throw new SystemException("Error instantiating " + newObjectPageClass + ": " + e.getMessage(), e); + } + + component.setResponsePage(page); + } + + public static void dispatchToObjectDetailsPage(Class objectClass, String oid, Component component, boolean failIfUnsupported) { PageParameters parameters = new PageParameters(); - parameters.add(OnePageParameterEncoder.PARAMETER, objectRef.getOid()); - if (RoleType.COMPLEX_TYPE.equals(type)) { - page.setResponsePage(PageRole.class, parameters); - } else if (OrgType.COMPLEX_TYPE.equals(type)) { - page.setResponsePage(PageOrgUnit.class, parameters); - } else if (ServiceType.COMPLEX_TYPE.equals(type)) { - page.setResponsePage(PageService.class, parameters); - } else if (UserType.COMPLEX_TYPE.equals(type)) { - page.setResponsePage(PageUser.class, parameters); - } else if (ResourceType.COMPLEX_TYPE.equals(type)) { - page.setResponsePage(PageResource.class, parameters); - } else if (TaskType.COMPLEX_TYPE.equals(type)) { - page.setResponsePage(PageTaskEdit.class, parameters); - } else if (ReportType.COMPLEX_TYPE.equals(type)) { - page.setResponsePage(PageReport.class, parameters); - } else { - // nothing to do + parameters.add(OnePageParameterEncoder.PARAMETER, oid); + Class page = objectDetailsMap.get(objectClass); + if (page != null) { + component.setResponsePage(page, parameters); + } else if (failIfUnsupported) { + // todo maybe we could use "error" + RestartResponseException, as it was e.g. in AbstractRoleMemberPanel before refactoring (MID-3233) + throw new SystemException("Cannot determine details page for "+objectClass); } } @@ -1542,12 +1572,7 @@ public static boolean hasDetailsPage(PrismObject object) { } public static boolean hasDetailsPage(Class clazz) { - if (clazz == null) { - return false; - } - return AbstractRoleType.class.isAssignableFrom(clazz) || UserType.class.isAssignableFrom(clazz) - || ResourceType.class.isAssignableFrom(clazz) || TaskType.class.isAssignableFrom(clazz) - || ReportType.class.isAssignableFrom(clazz); + return objectDetailsMap.containsKey(clazz); } public static boolean hasDetailsPage(ObjectReferenceType ref) { @@ -1690,22 +1715,4 @@ public static void setSelectedTabFromPageParameters(TabbedPanel tabbed, PagePara tabbed.setSelectedTab(tabIndex); } - public static Class getObjectDetailsPage(Class type) { - if (type == UserType.class) { - return PageUser.class; - } else if (type == OrgType.class) { - return PageOrgUnit.class; - } else if (type == RoleType.class) { - return PageRole.class; - } else if (type == ServiceType.class) { - return PageService.class; - } else if (type == ResourceType.class) { - return PageResource.class; - } else if (type == TaskType.class) { - return PageTaskEdit.class; - } else { - throw new IllegalArgumentException("Cannot determine details page for "+type); - } - } - } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/ObjectNameColumn.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/ObjectNameColumn.java index 5e22945d2c1..18b1cb50dae 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/ObjectNameColumn.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/ObjectNameColumn.java @@ -19,6 +19,7 @@ import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn; +import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; @@ -76,34 +77,33 @@ public String getObject() { } } }; - - cellItem.add(new LinkPanel(componentId, labelModel) { - private static final long serialVersionUID = 1L; - - @Override - public void onClick(AjaxRequestTarget target) { - SelectableBean selectableBean = rowModel.getObject(); - O value = selectableBean.getValue(); - if (value == null) { - OperationResult result = selectableBean.getResult(); - throw new RestartResponseException(new PageOperationResult(result)); - } else { - if (selectableBean.getResult() != null){ - throw new RestartResponseException(new PageOperationResult(selectableBean.getResult())); + + if (isClickable(rowModel)) { // beware: rowModel is very probably resolved at this moment; but it seems to cause no problems + cellItem.add(new LinkPanel(componentId, labelModel) { + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + SelectableBean selectableBean = rowModel.getObject(); + O value = selectableBean.getValue(); + if (value == null) { + OperationResult result = selectableBean.getResult(); + throw new RestartResponseException(new PageOperationResult(result)); } else { - ObjectNameColumn.this.onClick(target, rowModel); + if (selectableBean.getResult() != null) { + throw new RestartResponseException(new PageOperationResult(selectableBean.getResult())); + } else { + ObjectNameColumn.this.onClick(target, rowModel); + } } } - } - - @Override - public boolean isEnabled() { - return ObjectNameColumn.this.isEnabled(rowModel); - } - }); + }); + } else { + cellItem.add(new Label(componentId, labelModel)); + } } - public boolean isEnabled(IModel> rowModel) { + public boolean isClickable(IModel> rowModel) { return true; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/show/SceneItemValuePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/show/SceneItemValuePanel.java index ccb9136a8f6..35c7632d94e 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/show/SceneItemValuePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/show/SceneItemValuePanel.java @@ -82,7 +82,7 @@ public void onClick(AjaxRequestTarget target) { PrismReferenceValue refValue = (PrismReferenceValue) getModelObject().getSourceValue(); ObjectReferenceType ort = new ObjectReferenceType(); ort.setupReferenceValue(refValue); - WebComponentUtil.dispatchToObjectDetailsPage(ort, getPageBase()); + WebComponentUtil.dispatchToObjectDetailsPage(ort, getPageBase(), false); } }; link.add(visibleIfReference); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/show/ScenePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/show/ScenePanel.java index d7cef952eed..0578ba142a6 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/show/ScenePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/show/ScenePanel.java @@ -40,7 +40,6 @@ import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.model.*; -import java.io.Serializable; import java.util.List; /** @@ -149,7 +148,7 @@ public void onClick(AjaxRequestTarget target) { PrismContainerValue value = getModelObject().getScene().getSourceValue(); if (value != null && value.getParent() instanceof PrismObject) { PrismObject object = (PrismObject) value.getParent(); - WebComponentUtil.dispatchToObjectDetailsPage(ObjectTypeUtil.createObjectRef(object), getPageBase()); + WebComponentUtil.dispatchToObjectDetailsPage(ObjectTypeUtil.createObjectRef(object), getPageBase(), false); } } }; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/wf/WorkItemsPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/wf/WorkItemsPanel.java index 4790cab422b..de311b0a4cb 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/wf/WorkItemsPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/wf/WorkItemsPanel.java @@ -184,7 +184,7 @@ IColumn createObjectNameColumn(final String headerKey) { @Override public void onClick(AjaxRequestTarget target, IModel rowModel) { WorkItemDto dto = rowModel.getObject(); - dispatchToObjectDetailsPage(dto.getObjectRef(), getPageBase()); + dispatchToObjectDetailsPage(dto.getObjectRef(), getPageBase(), false); } }; } @@ -195,7 +195,7 @@ IColumn createTargetNameColumn(final String headerKey) { @Override public void onClick(AjaxRequestTarget target, IModel rowModel) { WorkItemDto dto = rowModel.getObject(); - dispatchToObjectDetailsPage(dto.getTargetRef(), getPageBase()); + dispatchToObjectDetailsPage(dto.getTargetRef(), getPageBase(), false); } }; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/certification/CertDecisionHelper.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/certification/CertDecisionHelper.java index 559a21d0230..1a867e22013 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/certification/CertDecisionHelper.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/certification/CertDecisionHelper.java @@ -57,7 +57,7 @@ IColumn createObjectNameColumn(final PageBase page, final String headerKey) { @Override public void onClick(AjaxRequestTarget target, IModel rowModel) { CertCaseOrDecisionDto dto = rowModel.getObject(); - dispatchToObjectDetailsPage(dto.getCertCase().getObjectRef(), page); + dispatchToObjectDetailsPage(dto.getCertCase().getObjectRef(), page, false); } }; return column; @@ -99,7 +99,7 @@ IColumn createTargetNameColumn(final PageBase page, final String headerKey) { @Override public void onClick(AjaxRequestTarget target, IModel rowModel) { CertCaseOrDecisionDto dto = rowModel.getObject(); - dispatchToObjectDetailsPage(dto.getCertCase().getTargetRef(), page); + dispatchToObjectDetailsPage(dto.getCertCase().getTargetRef(), page, false); } }; return column; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/ResourceContentPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/ResourceContentPanel.java index 077914bcb07..d350946531d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/ResourceContentPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/ResourceContentPanel.java @@ -21,7 +21,6 @@ import com.evolveum.midpoint.web.component.dialog.ConfirmationPanel; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; -import org.apache.commons.collections.IteratorUtils; import org.apache.commons.lang.StringUtils; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; @@ -103,7 +102,6 @@ import com.evolveum.midpoint.web.page.admin.resources.ResourceContentTabPanel.Operation; import com.evolveum.midpoint.web.page.admin.resources.content.PageAccount; import com.evolveum.midpoint.web.page.admin.server.PageTaskAdd; -import com.evolveum.midpoint.web.page.admin.users.PageUser; import com.evolveum.midpoint.web.session.UserProfileStorage.TableId; import com.evolveum.midpoint.web.util.OnePageParameterEncoder; @@ -627,11 +625,7 @@ private void ownerDetailsPerformed(AjaxRequestTarget target, FocusType owner) { if (owner == null) { return; } - - PageParameters parameters = new PageParameters(); - parameters.add(OnePageParameterEncoder.PARAMETER, owner.getOid()); - Class page = WebComponentUtil.getObjectDetailsPage(owner.getClass()); - setResponsePage(page, parameters); + WebComponentUtil.dispatchToObjectDetailsPage(owner.getClass(), owner.getOid(), this, true); } private F loadShadowOwner(IModel> model) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/DefaultHandlerPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/DefaultHandlerPanel.java index 9abb77f4e19..50a8ffa9f7e 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/DefaultHandlerPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/handlers/DefaultHandlerPanel.java @@ -56,7 +56,7 @@ public boolean isVisible() { public void onClick(AjaxRequestTarget target) { ObjectReferenceType ref = getModelObject().getObjectRef(); if (ref != null) { - WebComponentUtil.dispatchToObjectDetailsPage(ref, parentPage); + WebComponentUtil.dispatchToObjectDetailsPage(ref, parentPage, false); } } @Override diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AbstractRoleMemberPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AbstractRoleMemberPanel.java index 0745a74a756..0b18cd8125b 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AbstractRoleMemberPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AbstractRoleMemberPanel.java @@ -1,53 +1,22 @@ package com.evolveum.midpoint.web.page.admin.users.component; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.xml.namespace.QName; - -import com.evolveum.midpoint.xml.ns._public.common.common_3.*; -import org.apache.wicket.RestartResponseException; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; -import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn; -import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; -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.request.mapper.parameter.PageParameters; - import com.evolveum.midpoint.gui.api.component.BasePanel; -import com.evolveum.midpoint.gui.api.component.ObjectBrowserPanel; import com.evolveum.midpoint.gui.api.component.MainObjectListPanel; +import com.evolveum.midpoint.gui.api.component.ObjectBrowserPanel; import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismObjectDefinition; -import com.evolveum.midpoint.prism.PrismReferenceDefinition; import com.evolveum.midpoint.prism.delta.ObjectDelta; -import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.query.AndFilter; import com.evolveum.midpoint.prism.query.InOidFilter; -import com.evolveum.midpoint.prism.query.NotFilter; import com.evolveum.midpoint.prism.query.ObjectFilter; import com.evolveum.midpoint.prism.query.ObjectQuery; -import com.evolveum.midpoint.prism.query.RefFilter; -import com.evolveum.midpoint.prism.query.TypeFilter; -import com.evolveum.midpoint.schema.constants.ObjectTypes; -import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.util.ObjectTypeUtil; import com.evolveum.midpoint.task.api.Task; -import com.evolveum.midpoint.task.api.TaskCategory; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SystemException; import com.evolveum.midpoint.util.logging.LoggingUtils; @@ -58,15 +27,22 @@ import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem; import com.evolveum.midpoint.web.component.util.SelectableBean; import com.evolveum.midpoint.web.page.admin.configuration.component.HeaderMenuAction; -import com.evolveum.midpoint.web.page.admin.resources.PageResource; -import com.evolveum.midpoint.web.page.admin.roles.PageRole; -import com.evolveum.midpoint.web.page.admin.server.PageTaskEdit; -import com.evolveum.midpoint.web.page.admin.services.PageService; -import com.evolveum.midpoint.web.page.admin.users.PageOrgUnit; -import com.evolveum.midpoint.web.page.admin.users.PageUser; -import com.evolveum.midpoint.web.page.admin.users.component.AbstractRoleMemberPanel.QueryScope; import com.evolveum.midpoint.web.session.UserProfileStorage.TableId; -import com.evolveum.midpoint.web.util.OnePageParameterEncoder; +import com.evolveum.midpoint.xml.ns._public.common.common_3.*; +import org.apache.wicket.RestartResponseException; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; +import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn; +import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; +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 javax.xml.namespace.QName; +import java.util.ArrayList; +import java.util.List; public abstract class AbstractRoleMemberPanel extends BasePanel{ @@ -78,18 +54,6 @@ protected enum MemberOperation { ADD, REMOVE, RECOMPUTE; } - protected static Map objectDetailsMap; - - static { - objectDetailsMap = new HashMap<>(); - objectDetailsMap.put(UserType.class, PageUser.class); - objectDetailsMap.put(OrgType.class, PageOrgUnit.class); - objectDetailsMap.put(RoleType.class, PageRole.class); - objectDetailsMap.put(ServiceType.class, PageService.class); - objectDetailsMap.put(ResourceType.class, PageResource.class); - objectDetailsMap.put(TaskType.class, PageTaskEdit.class); - } - private static final Trace LOGGER = TraceManager.getTrace(AbstractRoleMemberPanel.class); protected static final String ID_FORM = "form"; @@ -133,13 +97,20 @@ ID_MEMBER_TABLE, ObjectType.class, tableId, null, getPageBase()) { @Override protected void objectDetailsPerformed(AjaxRequestTarget target, ObjectType object) { detailsPerformed(target, object); + } + @Override + protected boolean isClickable(IModel> rowModel) { + if (rowModel == null || rowModel.getObject() == null || rowModel.getObject().getValue() == null) { + return false; + } + Class objectClass = rowModel.getObject().getValue().getClass(); + return WebComponentUtil.hasDetailsPage(objectClass); } @Override protected void newObjectPerformed(AjaxRequestTarget target) { AbstractRoleMemberPanel.this.createFocusMemberPerformed(null, target); - } @Override @@ -291,28 +262,8 @@ private void initObjectForAdd(ObjectReferenceType parentOrgRef, QName type, QNam } else { objType.getParentOrgRef().add(parentOrgRef.clone()); } - - Class newObjectPageClass = objectDetailsMap.get(obj.getCompileTimeClass()); - - Constructor constructor = null; - try { - constructor = newObjectPageClass.getConstructor(PrismObject.class); - - } catch (NoSuchMethodException | SecurityException e) { - throw new SystemException("Unable to locate constructor (PrismObject) in " + newObjectPageClass - + ": " + e.getMessage(), e); - } - - PageBase page; - try { - page = (PageBase) constructor.newInstance(obj); - } catch (InstantiationException | IllegalAccessException | IllegalArgumentException - | InvocationTargetException e) { - throw new SystemException("Error instantiating " + newObjectPageClass + ": " + e.getMessage(), e); - } - - setResponsePage(page); + WebComponentUtil.dispatchToObjectDetailsPage(obj, this); } protected void addMembers(final QName relation, AjaxRequestTarget target) { @@ -401,16 +352,13 @@ protected ObjectReferenceType createReference(ObjectType obj) { return ref; } - protected void detailsPerformed(AjaxRequestTarget targer, ObjectType object) { - Class responsePage = objectDetailsMap.get(object.getClass()); - if (responsePage == null) { + protected void detailsPerformed(AjaxRequestTarget target, ObjectType object) { + if (WebComponentUtil.hasDetailsPage(object.getClass())) { + WebComponentUtil.dispatchToObjectDetailsPage(object.getClass(), object.getOid(), this, true); + } else { error("Could not find proper response page"); throw new RestartResponseException(getPageBase()); } - - PageParameters parameters = new PageParameters(); - parameters.add(OnePageParameterEncoder.PARAMETER, object.getOid()); - setResponsePage(responsePage, parameters); } private List, String>> createMembersColumns() { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/TreeTablePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/TreeTablePanel.java index 7564741e466..cac93607e80 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/TreeTablePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/TreeTablePanel.java @@ -15,23 +15,6 @@ */ package com.evolveum.midpoint.web.page.admin.users.component; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.xml.namespace.QName; - -import com.evolveum.midpoint.util.exception.*; -import org.apache.wicket.RestartResponseException; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.model.AbstractReadOnlyModel; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.Model; -import org.apache.wicket.request.mapper.parameter.PageParameters; - import com.evolveum.midpoint.gui.api.component.BasePanel; import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; @@ -49,6 +32,7 @@ import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.util.ObjectTypeUtil; import com.evolveum.midpoint.task.api.Task; +import com.evolveum.midpoint.util.exception.*; import com.evolveum.midpoint.util.logging.LoggingUtils; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; @@ -58,24 +42,20 @@ import com.evolveum.midpoint.web.component.util.SelectableBean; import com.evolveum.midpoint.web.page.admin.orgs.OrgTreeAssignablePanel; import com.evolveum.midpoint.web.page.admin.orgs.OrgTreePanel; -import com.evolveum.midpoint.web.page.admin.resources.PageResource; -import com.evolveum.midpoint.web.page.admin.roles.PageRole; -import com.evolveum.midpoint.web.page.admin.server.PageTaskEdit; -import com.evolveum.midpoint.web.page.admin.services.PageService; import com.evolveum.midpoint.web.page.admin.users.PageOrgTree; import com.evolveum.midpoint.web.page.admin.users.PageOrgUnit; -import com.evolveum.midpoint.web.page.admin.users.PageUser; import com.evolveum.midpoint.web.util.OnePageParameterEncoder; -import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ServiceType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.*; +import org.apache.wicket.RestartResponseException; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.model.AbstractReadOnlyModel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +import javax.xml.namespace.QName; +import java.util.ArrayList; +import java.util.List; /** * Used as a main component of the Org tree page. @@ -241,18 +221,6 @@ public void onClick(AjaxRequestTarget target) { return items; } - protected static Map objectDetailsMap; - - static { - objectDetailsMap = new HashMap<>(); - objectDetailsMap.put(UserType.class, PageUser.class); - objectDetailsMap.put(OrgType.class, PageOrgUnit.class); - objectDetailsMap.put(RoleType.class, PageRole.class); - objectDetailsMap.put(ServiceType.class, PageService.class); - objectDetailsMap.put(ResourceType.class, PageResource.class); - objectDetailsMap.put(TaskType.class, PageTaskEdit.class); - } - // TODO: merge this with AbstractRoleMemeberPanel.initObjectForAdd, also see MID-3233 private void initObjectForAdd(ObjectReferenceType parentOrgRef, QName type, QName relation, AjaxRequestTarget target) throws SchemaException { @@ -281,30 +249,7 @@ private void initObjectForAdd(ObjectReferenceType parentOrgRef, QName type, QNam objType.getParentOrgRef().add(parentOrgRef.clone()); } - Class newObjectPageClass = objectDetailsMap.get(obj.getCompileTimeClass()); - - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Adding child by using page {}:\n{}", newObjectPageClass.getSimpleName(), obj.debugDump(1)); - } - - Constructor constructor = null; - try { - constructor = newObjectPageClass.getConstructor(PrismObject.class); - - } catch (NoSuchMethodException | SecurityException e) { - throw new SystemException("Unable to locate constructor (PrismObject) in " + newObjectPageClass - + ": " + e.getMessage(), e); - } - - PageBase page; - try { - page = (PageBase) constructor.newInstance(obj); - } catch (InstantiationException | IllegalAccessException | IllegalArgumentException - | InvocationTargetException e) { - throw new SystemException("Error instantiating " + newObjectPageClass + ": " + e.getMessage(), e); - } - - setResponsePage(page); + WebComponentUtil.dispatchToObjectDetailsPage(obj, this); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/workflow/ProcessInstancesPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/workflow/ProcessInstancesPanel.java index 36867b91669..a5324d6d983 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/workflow/ProcessInstancesPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/workflow/ProcessInstancesPanel.java @@ -208,7 +208,7 @@ IColumn createObjectNameColumn(final String headerKe @Override public void onClick(AjaxRequestTarget target, IModel rowModel) { ProcessInstanceDto dto = rowModel.getObject(); - dispatchToObjectDetailsPage(dto.getObjectRef(), getPageBase()); + dispatchToObjectDetailsPage(dto.getObjectRef(), getPageBase(), false); } }; } @@ -219,7 +219,7 @@ IColumn createTargetNameColumn(final String headerKe @Override public void onClick(AjaxRequestTarget target, IModel rowModel) { ProcessInstanceDto dto = rowModel.getObject(); - dispatchToObjectDetailsPage(dto.getTargetRef(), getPageBase()); + dispatchToObjectDetailsPage(dto.getTargetRef(), getPageBase(), false); } }; }