From 0607fe6c20fd9a7345c0256b1bc3dc7cd064b9e2 Mon Sep 17 00:00:00 2001 From: lskublik Date: Thu, 14 May 2020 13:49:12 +0200 Subject: [PATCH] adding of link to dashboard for object table page with collection view --- .../gui/impl/component/box/InfoBoxPanel.java | 845 +++++++++--------- .../impl/component/box/SmallInfoBoxPanel.java | 3 + .../model/api/ModelInteractionService.java | 2 +- .../CompiledObjectCollectionView.java | 6 +- .../ModelInteractionServiceImpl.java | 2 +- .../export/HtmlExportController.java | 19 +- 6 files changed, 458 insertions(+), 419 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/box/InfoBoxPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/box/InfoBoxPanel.java index 939a8a4c424..57c3f2e56da 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/box/InfoBoxPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/box/InfoBoxPanel.java @@ -1,402 +1,443 @@ -/* - * Copyright (c) 2010-2019 Evolveum and contributors - * - * This work is dual-licensed under the Apache License 2.0 - * and European Union Public License. See LICENSE file for details. - */ -package com.evolveum.midpoint.gui.impl.component.box; - -import java.util.HashMap; - -import javax.xml.namespace.QName; - -import com.evolveum.midpoint.web.page.admin.server.PageTask; -import com.evolveum.midpoint.web.page.admin.server.PageTasks; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.Validate; -import org.apache.wicket.AttributeModifier; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.WebPage; -import org.apache.wicket.markup.html.basic.Label; -import org.apache.wicket.markup.html.panel.Panel; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.PropertyModel; -import org.apache.wicket.request.mapper.parameter.PageParameters; - -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.model.api.interaction.DashboardWidget; -import com.evolveum.midpoint.task.api.Task; -import com.evolveum.midpoint.util.exception.CommunicationException; -import com.evolveum.midpoint.util.exception.ConfigurationException; -import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; -import com.evolveum.midpoint.util.exception.ObjectNotFoundException; -import com.evolveum.midpoint.util.exception.SchemaException; -import com.evolveum.midpoint.util.exception.SecurityViolationException; -import com.evolveum.midpoint.util.logging.Trace; -import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.web.page.admin.reports.PageAuditLogViewer; -import com.evolveum.midpoint.web.page.admin.reports.dto.AuditSearchDto; -import com.evolveum.midpoint.web.page.admin.resources.PageResource; -import com.evolveum.midpoint.web.page.admin.resources.PageResources; -import com.evolveum.midpoint.web.page.admin.roles.PageRole; -import com.evolveum.midpoint.web.page.admin.roles.PageRoles; -import com.evolveum.midpoint.web.page.admin.services.PageService; -import com.evolveum.midpoint.web.page.admin.services.PageServices; -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.page.admin.users.PageUsers; -import com.evolveum.midpoint.web.util.OnePageParameterEncoder; -import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordItemType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.DashboardWidgetSourceTypeType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.DashboardWidgetType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.DisplayType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectCollectionType; -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; - -/** - * @author skublik - */ -public abstract class InfoBoxPanel extends Panel{ - private static final long serialVersionUID = 1L; - - private static final Trace LOGGER = TraceManager.getTrace(InfoBoxPanel.class); - - private static final String ID_INFO_BOX = "infoBox"; - private static final String ID_ICON = "icon"; - private static final String ID_MESSAGE = "message"; - private static final String ID_NUMBER = "number"; - - private static final String DEFAULT_BACKGROUND_COLOR = "background-color:#00a65a;"; - private static final String DEFAULT_COLOR = "color: #fff !important;"; - private static final String DEFAULT_ICON = "fa fa-question"; - - private static final String NUMBER_MESSAGE_UNKNOWN = "InfoBoxPanel.message.unknown"; - - private static HashMap> linksRefCollections; - private static HashMap> linksRefObjects; - - static { - linksRefCollections = new HashMap>() { - private static final long serialVersionUID = 1L; - - { - put(ResourceType.COMPLEX_TYPE.getLocalPart(), PageResources.class); - put(AuditEventRecordItemType.COMPLEX_TYPE.getLocalPart(), PageAuditLogViewer.class); - put(TaskType.COMPLEX_TYPE.getLocalPart(), PageTasks.class); - put(UserType.COMPLEX_TYPE.getLocalPart(), PageUsers.class); - put(RoleType.COMPLEX_TYPE.getLocalPart(), PageRoles.class); - put(OrgType.COMPLEX_TYPE.getLocalPart(), PageOrgTree.class); - put(ServiceType.COMPLEX_TYPE.getLocalPart(), PageServices.class); - } - }; - - linksRefObjects = new HashMap>() { - private static final long serialVersionUID = 1L; - - { - put(TaskType.COMPLEX_TYPE, PageTask.class); - put(UserType.COMPLEX_TYPE, PageUser.class); - put(RoleType.COMPLEX_TYPE, PageRole.class); - put(OrgType.COMPLEX_TYPE, PageOrgUnit.class); - put(ServiceType.COMPLEX_TYPE, PageService.class); - put(ResourceType.COMPLEX_TYPE, PageResource.class); - } - }; - } - - private static PageBase pageBase; - private DisplayType display; - - public InfoBoxPanel(String id, IModel model, PageBase pageBase) { - super(id, model); - Validate.notNull(model, "Model must not be null."); - Validate.notNull(model.getObject(), "Model object must not be null."); - add(AttributeModifier.append("class", "dashboard-info-box")); - this.pageBase = pageBase; - } - - @Override - protected void onInitialize() { - super.onInitialize(); - initLayout(); - - } - - private void initLayout() { - IModel model = (IModel)getDefaultModel(); - IModel data = new IModel() { - private static final long serialVersionUID = 1L; - - @Override - public DashboardWidget getObject() { - Task task = getPageBase().createSimpleTask("Get DashboardWidget"); - try { - DashboardWidget ret = getPageBase().getDashboardService().createWidgetData(model.getObject(), task, task.getResult()); - setDisplay(ret.getDisplay()); - return ret; - } catch (SchemaException | CommunicationException | ConfigurationException | SecurityViolationException - | ExpressionEvaluationException | ObjectNotFoundException e) { - LOGGER.error("Couldn't get DashboardWidget with widget " + model.getObject().getIdentifier(), e); - } - return null; - } - }; - - this.display = model.getObject().getDisplay(); - - WebMarkupContainer infoBox = new WebMarkupContainer(ID_INFO_BOX); - add(infoBox); - - Label number = new Label(ID_NUMBER, - data.getObject().getNumberMessage() == null ? - getPageBase().createStringResource(NUMBER_MESSAGE_UNKNOWN) : - getStringModel(data.getObject().getNumberMessage())); //number message have to add before icon because is needed evaluate variation - infoBox.add(number); - - IModel displayModel = new IModel() { - private static final long serialVersionUID = 1L; - - @Override - public DisplayType getObject() { - return display; - } - }; - - Label message = null; - if(displayModel.getObject() != null && displayModel.getObject().getLabel() != null) { - message = new Label(ID_MESSAGE, new PropertyModel(displayModel, "label")); - } else { - message = new Label(ID_MESSAGE, new PropertyModel(model, "identifier")); - } - infoBox.add(message); - - if(displayModel.getObject() != null && StringUtils.isNoneBlank(displayModel.getObject().getColor())) { - String color = displayModel.getObject().getColor(); - infoBox.add(AttributeModifier.append("style", getStringModel("background-color:" + color + ";"))); - } else { - infoBox.add(AttributeModifier.append("style", getStringModel(DEFAULT_BACKGROUND_COLOR))); - } - - if(displayModel.getObject() != null && StringUtils.isNoneBlank(displayModel.getObject().getCssStyle())) { - String style = displayModel.getObject().getCssStyle(); - infoBox.add(AttributeModifier.append("style", style)); - if(!style.toLowerCase().contains(" color:") && !style.toLowerCase().startsWith("color:")) { - infoBox.add(AttributeModifier.append("style", getStringModel(DEFAULT_COLOR))); - } - } else { - infoBox.add(AttributeModifier.append("style", getStringModel(DEFAULT_COLOR))); - } - - WebMarkupContainer infoBoxIcon = new WebMarkupContainer(ID_ICON); - infoBox.add(infoBoxIcon); - if(displayModel.getObject() != null && displayModel.getObject().getIcon() != null - && StringUtils.isNoneBlank(displayModel.getObject().getIcon().getCssClass())) { - infoBoxIcon.add(AttributeModifier.append("class", new PropertyModel(displayModel, "icon.cssClass"))); - } else { - infoBoxIcon.add(AttributeModifier.append("class", getStringModel(DEFAULT_ICON))); - } - - customInitLayout(infoBox); - } - - public void setDisplay(DisplayType display) { - this.display = display; - } - - private DashboardWidgetSourceTypeType getSourceType(IModel model) { - if(isSourceTypeOfDataNull(model)) { - return null; - } - return model.getObject().getData().getSourceType(); - } - - protected void customInitLayout(WebMarkupContainer infoBox) { - - } - - private IModel getStringModel(String value){ - return new IModel() { - private static final long serialVersionUID = 1L; - - @Override - public String getObject() { - return value; - } - }; - } - - protected static HashMap> getLinksRefCollections() { - return linksRefCollections; - } - - protected static HashMap> getLinksRefObjects() { - return linksRefObjects; - } - - protected static PageBase getPageBase() { - return pageBase; - } - - protected WebPage getLinkRef() { - IModel model = (IModel)getDefaultModel(); - DashboardWidgetSourceTypeType sourceType = getSourceType(model); - switch (sourceType) { - case OBJECT_COLLECTION: - ObjectCollectionType collection = getObjectCollectionType(); - if(collection != null && collection.getType() != null && collection.getType().getLocalPart() != null) { - Class pageType = getLinksRefCollections().get(collection.getType().getLocalPart()); - if(pageType == null) { - return null; - } - return getPageBase().createWebPage(pageType, null); - } else { - LOGGER.error("CollectionType from collectionRef is null in widget " + model.getObject().getIdentifier()); - } - break; - case AUDIT_SEARCH: - collection = getObjectCollectionType(); - if(collection != null && collection.getAuditSearch() != null && collection.getAuditSearch().getRecordQuery() != null) { - Class pageType = getLinksRefCollections().get(AuditEventRecordItemType.COMPLEX_TYPE.getLocalPart()); - if(pageType == null) { - return null; - } - AuditSearchDto searchDto = new AuditSearchDto(); - searchDto.setCollection(collection); - getPageBase().getSessionStorage().getAuditLog().setSearchDto(searchDto); - return getPageBase().createWebPage(pageType, null); - } else { - LOGGER.error("CollectionType from collectionRef is null in widget " + model.getObject().getIdentifier()); - } - break; - case OBJECT: - ObjectType object = getObjectFromObjectRef(); - if(object == null) { - return null; - } - QName typeName = WebComponentUtil.classToQName(getPageBase().getPrismContext(), object.getClass()); - Class pageType = getLinksRefObjects().get(typeName); - if(pageType == null) { - return null; - } - PageParameters parameters = new PageParameters(); - parameters.add(OnePageParameterEncoder.PARAMETER, object.getOid()); - return getPageBase().createWebPage(pageType, parameters); - } - return null; - } - - protected boolean existLinkRef() { - IModel model = (IModel)getDefaultModel(); - DashboardWidgetSourceTypeType sourceType = getSourceType(model); - switch (sourceType) { - case OBJECT_COLLECTION: - ObjectCollectionType collection = getObjectCollectionType(); - if(collection != null && collection.getType() != null && collection.getType().getLocalPart() != null) { - return getLinksRefCollections().containsKey(collection.getType().getLocalPart()); - } else { - return false; - } - case AUDIT_SEARCH: - collection = getObjectCollectionType(); - if(collection != null && collection.getAuditSearch() != null && collection.getAuditSearch().getRecordQuery() != null) { - return getLinksRefCollections().containsKey(AuditEventRecordItemType.COMPLEX_TYPE.getLocalPart()); - } else { - return false; - } - case OBJECT: - ObjectType object = getObjectFromObjectRef(); - if(object == null) { - return false; - } - QName typeName = WebComponentUtil.classToQName(getPageBase().getPrismContext(), object.getClass()); - return getLinksRefObjects().containsKey(typeName); - } - return false; - } - - private boolean isDataNull(IModel model) { - if(model.getObject().getData() == null) { - LOGGER.error("Data is not found in widget " + model.getObject().getIdentifier()); - return true; - } - return false; - } - - private boolean isSourceTypeOfDataNull(IModel model) { - if(isDataNull(model)) { - return true; - } - if(model.getObject().getData().getSourceType() == null) { - LOGGER.error("SourceType of data is not found in widget " + model.getObject().getIdentifier()); - return true; - } - return false; - } - - private boolean isCollectionOfDataNull(IModel model) { - if(isDataNull(model)) { - return true; - } - if(model.getObject().getData().getCollection() == null) { - LOGGER.error("Collection of data is not found in widget " + model.getObject().getIdentifier()); - return true; - } - return false; - } - - private boolean isCollectionRefOfCollectionNull(IModel model) { - if(isDataNull(model)) { - return true; - } - if(isCollectionOfDataNull(model)) { - return true; - } - ObjectReferenceType ref = model.getObject().getData().getCollection().getCollectionRef(); - if(ref == null) { - LOGGER.error("CollectionRef of collection is not found in widget " + model.getObject().getIdentifier()); - return true; - } - return false; - } - - private ObjectCollectionType getObjectCollectionType() { - IModel model = (IModel)getDefaultModel(); - if(isCollectionRefOfCollectionNull(model)) { - return null; - } - ObjectReferenceType ref = model.getObject().getData().getCollection().getCollectionRef(); - Task task = getPageBase().createSimpleTask("Search collection"); - ObjectCollectionType collection = (ObjectCollectionType)WebModelServiceUtils.loadObject(ref, - getPageBase(), task, task.getResult()).getRealValue(); - return collection; - } - - private ObjectType getObjectFromObjectRef() { - IModel model = (IModel)getDefaultModel(); - if(isDataNull(model)) { - return null; - } - ObjectReferenceType ref = model.getObject().getData().getObjectRef(); - if(ref == null) { - LOGGER.error("ObjectRef of data is not found in widget " + model.getObject().getIdentifier()); - return null; - } - Task task = getPageBase().createSimpleTask("Search domain collection"); - ObjectType object = WebModelServiceUtils.loadObject(ref, - getPageBase(), task, task.getResult()).getRealValue(); - if(object == null) { - LOGGER.error("Object from ObjectRef " + ref + " is null in widget " + model.getObject().getIdentifier()); - } - return object; - } -} +/* + * Copyright (c) 2010-2019 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.gui.impl.component.box; + +import java.util.HashMap; + +import javax.xml.namespace.QName; + +import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView; +import com.evolveum.midpoint.web.page.admin.server.PageTask; +import com.evolveum.midpoint.web.page.admin.server.PageTasks; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; +import org.apache.wicket.AttributeModifier; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +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.model.api.interaction.DashboardWidget; +import com.evolveum.midpoint.task.api.Task; +import com.evolveum.midpoint.util.exception.CommunicationException; +import com.evolveum.midpoint.util.exception.ConfigurationException; +import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; +import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.SchemaException; +import com.evolveum.midpoint.util.exception.SecurityViolationException; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.web.page.admin.reports.PageAuditLogViewer; +import com.evolveum.midpoint.web.page.admin.reports.dto.AuditSearchDto; +import com.evolveum.midpoint.web.page.admin.resources.PageResource; +import com.evolveum.midpoint.web.page.admin.resources.PageResources; +import com.evolveum.midpoint.web.page.admin.roles.PageRole; +import com.evolveum.midpoint.web.page.admin.roles.PageRoles; +import com.evolveum.midpoint.web.page.admin.services.PageService; +import com.evolveum.midpoint.web.page.admin.services.PageServices; +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.page.admin.users.PageUsers; +import com.evolveum.midpoint.web.util.OnePageParameterEncoder; +import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordItemType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.DashboardWidgetSourceTypeType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.DashboardWidgetType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.DisplayType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectCollectionType; +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 org.jetbrains.annotations.NotNull; + +/** + * @author skublik + */ +public abstract class InfoBoxPanel extends Panel{ + private static final long serialVersionUID = 1L; + + private static final Trace LOGGER = TraceManager.getTrace(InfoBoxPanel.class); + + private static final String ID_INFO_BOX = "infoBox"; + private static final String ID_ICON = "icon"; + private static final String ID_MESSAGE = "message"; + private static final String ID_NUMBER = "number"; + + private static final String DEFAULT_BACKGROUND_COLOR = "background-color:#00a65a;"; + private static final String DEFAULT_COLOR = "color: #fff !important;"; + private static final String DEFAULT_ICON = "fa fa-question"; + + private static final String NUMBER_MESSAGE_UNKNOWN = "InfoBoxPanel.message.unknown"; + + private static HashMap> linksRefCollections; + private static HashMap> linksRefObjects; + + static { + linksRefCollections = new HashMap>() { + private static final long serialVersionUID = 1L; + + { + put(ResourceType.COMPLEX_TYPE.getLocalPart(), PageResources.class); + put(AuditEventRecordItemType.COMPLEX_TYPE.getLocalPart(), PageAuditLogViewer.class); + put(TaskType.COMPLEX_TYPE.getLocalPart(), PageTasks.class); + put(UserType.COMPLEX_TYPE.getLocalPart(), PageUsers.class); + put(RoleType.COMPLEX_TYPE.getLocalPart(), PageRoles.class); + put(OrgType.COMPLEX_TYPE.getLocalPart(), PageOrgTree.class); + put(ServiceType.COMPLEX_TYPE.getLocalPart(), PageServices.class); + } + }; + + linksRefObjects = new HashMap>() { + private static final long serialVersionUID = 1L; + + { + put(TaskType.COMPLEX_TYPE, PageTask.class); + put(UserType.COMPLEX_TYPE, PageUser.class); + put(RoleType.COMPLEX_TYPE, PageRole.class); + put(OrgType.COMPLEX_TYPE, PageOrgUnit.class); + put(ServiceType.COMPLEX_TYPE, PageService.class); + put(ResourceType.COMPLEX_TYPE, PageResource.class); + } + }; + } + + private static PageBase pageBase; + private DisplayType display; + + public InfoBoxPanel(String id, IModel model, PageBase pageBase) { + super(id, model); + Validate.notNull(model, "Model must not be null."); + Validate.notNull(model.getObject(), "Model object must not be null."); + add(AttributeModifier.append("class", "dashboard-info-box")); + this.pageBase = pageBase; + } + + @Override + protected void onInitialize() { + super.onInitialize(); + initLayout(); + + } + + private void initLayout() { + IModel model = (IModel)getDefaultModel(); + IModel data = new IModel() { + private static final long serialVersionUID = 1L; + + @Override + public DashboardWidget getObject() { + Task task = getPageBase().createSimpleTask("Get DashboardWidget"); + try { + DashboardWidget ret = getPageBase().getDashboardService().createWidgetData(model.getObject(), task, task.getResult()); + setDisplay(ret.getDisplay()); + return ret; + } catch (SchemaException | CommunicationException | ConfigurationException | SecurityViolationException + | ExpressionEvaluationException | ObjectNotFoundException e) { + LOGGER.error("Couldn't get DashboardWidget with widget " + model.getObject().getIdentifier(), e); + } + return null; + } + }; + + this.display = model.getObject().getDisplay(); + + WebMarkupContainer infoBox = new WebMarkupContainer(ID_INFO_BOX); + add(infoBox); + + Label number = new Label(ID_NUMBER, + data.getObject().getNumberMessage() == null ? + getPageBase().createStringResource(NUMBER_MESSAGE_UNKNOWN) : + getStringModel(data.getObject().getNumberMessage())); //number message have to add before icon because is needed evaluate variation + infoBox.add(number); + + IModel displayModel = new IModel() { + private static final long serialVersionUID = 1L; + + @Override + public DisplayType getObject() { + return display; + } + }; + + Label message = null; + if(displayModel.getObject() != null && displayModel.getObject().getLabel() != null) { + message = new Label(ID_MESSAGE, new PropertyModel(displayModel, "label")); + } else { + message = new Label(ID_MESSAGE, new PropertyModel(model, "identifier")); + } + infoBox.add(message); + + if(displayModel.getObject() != null && StringUtils.isNoneBlank(displayModel.getObject().getColor())) { + String color = displayModel.getObject().getColor(); + infoBox.add(AttributeModifier.append("style", getStringModel("background-color:" + color + ";"))); + } else { + infoBox.add(AttributeModifier.append("style", getStringModel(DEFAULT_BACKGROUND_COLOR))); + } + + if(displayModel.getObject() != null && StringUtils.isNoneBlank(displayModel.getObject().getCssStyle())) { + String style = displayModel.getObject().getCssStyle(); + infoBox.add(AttributeModifier.append("style", style)); + if(!style.toLowerCase().contains(" color:") && !style.toLowerCase().startsWith("color:")) { + infoBox.add(AttributeModifier.append("style", getStringModel(DEFAULT_COLOR))); + } + } else { + infoBox.add(AttributeModifier.append("style", getStringModel(DEFAULT_COLOR))); + } + + WebMarkupContainer infoBoxIcon = new WebMarkupContainer(ID_ICON); + infoBox.add(infoBoxIcon); + if(displayModel.getObject() != null && displayModel.getObject().getIcon() != null + && StringUtils.isNoneBlank(displayModel.getObject().getIcon().getCssClass())) { + infoBoxIcon.add(AttributeModifier.append("class", new PropertyModel(displayModel, "icon.cssClass"))); + } else { + infoBoxIcon.add(AttributeModifier.append("class", getStringModel(DEFAULT_ICON))); + } + + customInitLayout(infoBox); + } + + public void setDisplay(DisplayType display) { + this.display = display; + } + + private DashboardWidgetSourceTypeType getSourceType(IModel model) { + if(isSourceTypeOfDataNull(model)) { + return null; + } + return model.getObject().getData().getSourceType(); + } + + protected void customInitLayout(WebMarkupContainer infoBox) { + + } + + private IModel getStringModel(String value){ + return new IModel() { + private static final long serialVersionUID = 1L; + + @Override + public String getObject() { + return value; + } + }; + } + + protected static HashMap> getLinksRefCollections() { + return linksRefCollections; + } + + protected static HashMap> getLinksRefObjects() { + return linksRefObjects; + } + + protected static PageBase getPageBase() { + return pageBase; + } + + protected WebPage getLinkRef() { + IModel model = (IModel)getDefaultModel(); + DashboardWidgetSourceTypeType sourceType = getSourceType(model); + switch (sourceType) { + case OBJECT_COLLECTION: + ObjectCollectionType collection = getObjectCollectionType(); + if(collection != null && collection.getType() != null && collection.getType().getLocalPart() != null) { + Class pageType = getLinksRefCollections().get(collection.getType().getLocalPart()); + if(pageType == null) { + return null; + } + PageParameters parameters = new PageParameters(); + CompiledObjectCollectionView existingCompiledView = getPageBase().getCompiledGuiProfile() + .findObjectCollectionView(collection.getType(), model.getObject().getIdentifier()); + if (existingCompiledView == null || !existingCompiledView.getViewIdentifier().equals(model.getObject().getIdentifier())) { + Task task = getPageBase().createSimpleTask("Compiling collection view"); + try { + @NotNull CompiledObjectCollectionView compiledView = getPageBase().getModelInteractionService() + .compileObjectCollectionView(collection.asPrismObject(), null, task, task.getResult()); + if (!isViewOfWidgetNull(model)) { + getPageBase().getModelInteractionService().applyView(compiledView, model.getObject().getPresentation().getView()); + } + compiledView.setViewIdentifier(model.getObject().getIdentifier()); + getPageBase().getCompiledGuiProfile().getObjectCollectionViews().add(compiledView); + } catch (SchemaException | CommunicationException | ConfigurationException | SecurityViolationException | ExpressionEvaluationException + | ObjectNotFoundException e) { + LOGGER.error("Couldn't compile collection " + collection.getName(), e); + } + } + parameters.add(PageBase.PARAMETER_OBJECT_COLLECTION_NAME, model.getObject().getIdentifier()); + return getPageBase().createWebPage(pageType, parameters); + } else { + LOGGER.error("CollectionType from collectionRef is null in widget " + model.getObject().getIdentifier()); + } + break; + case AUDIT_SEARCH: + collection = getObjectCollectionType(); + if(collection != null && collection.getAuditSearch() != null && collection.getAuditSearch().getRecordQuery() != null) { + Class pageType = getLinksRefCollections().get(AuditEventRecordItemType.COMPLEX_TYPE.getLocalPart()); + if(pageType == null) { + return null; + } + AuditSearchDto searchDto = new AuditSearchDto(); + searchDto.setCollection(collection); + getPageBase().getSessionStorage().getAuditLog().setSearchDto(searchDto); + return getPageBase().createWebPage(pageType, null); + } else { + LOGGER.error("CollectionType from collectionRef is null in widget " + model.getObject().getIdentifier()); + } + break; + case OBJECT: + ObjectType object = getObjectFromObjectRef(); + if(object == null) { + return null; + } + QName typeName = WebComponentUtil.classToQName(getPageBase().getPrismContext(), object.getClass()); + Class pageType = getLinksRefObjects().get(typeName); + if(pageType == null) { + return null; + } + PageParameters parameters = new PageParameters(); + parameters.add(OnePageParameterEncoder.PARAMETER, object.getOid()); + return getPageBase().createWebPage(pageType, parameters); + } + return null; + } + + protected boolean existLinkRef() { + IModel model = (IModel)getDefaultModel(); + DashboardWidgetSourceTypeType sourceType = getSourceType(model); + switch (sourceType) { + case OBJECT_COLLECTION: + ObjectCollectionType collection = getObjectCollectionType(); + if(collection != null && collection.getType() != null && collection.getType().getLocalPart() != null) { + return getLinksRefCollections().containsKey(collection.getType().getLocalPart()); + } else { + return false; + } + case AUDIT_SEARCH: + collection = getObjectCollectionType(); + if(collection != null && collection.getAuditSearch() != null && collection.getAuditSearch().getRecordQuery() != null) { + return getLinksRefCollections().containsKey(AuditEventRecordItemType.COMPLEX_TYPE.getLocalPart()); + } else { + return false; + } + case OBJECT: + ObjectType object = getObjectFromObjectRef(); + if(object == null) { + return false; + } + QName typeName = WebComponentUtil.classToQName(getPageBase().getPrismContext(), object.getClass()); + return getLinksRefObjects().containsKey(typeName); + } + return false; + } + + private boolean isDataNull(IModel model) { + if(model.getObject().getData() == null) { + LOGGER.error("Data is not found in widget " + model.getObject().getIdentifier()); + return true; + } + return false; + } + + private boolean isPresentationNull(IModel model) { + if(model.getObject().getPresentation() == null) { + LOGGER.error("Presentation is not found in widget " + model.getObject().getIdentifier()); + return true; + } + return false; + } + + private boolean isViewOfWidgetNull(IModel model) { + if(isPresentationNull(model)) { + return true; + } + if(model.getObject().getPresentation().getView() == null) { + LOGGER.error("View of presentation is not found in widget " + model.getObject().getIdentifier()); + return true; + } + return false; + } + + private boolean isSourceTypeOfDataNull(IModel model) { + if(isDataNull(model)) { + return true; + } + if(model.getObject().getData().getSourceType() == null) { + LOGGER.error("SourceType of data is not found in widget " + model.getObject().getIdentifier()); + return true; + } + return false; + } + + private boolean isCollectionOfDataNull(IModel model) { + if(isDataNull(model)) { + return true; + } + if(model.getObject().getData().getCollection() == null) { + LOGGER.error("Collection of data is not found in widget " + model.getObject().getIdentifier()); + return true; + } + return false; + } + + private boolean isCollectionRefOfCollectionNull(IModel model) { + if(isDataNull(model)) { + return true; + } + if(isCollectionOfDataNull(model)) { + return true; + } + ObjectReferenceType ref = model.getObject().getData().getCollection().getCollectionRef(); + if(ref == null) { + LOGGER.error("CollectionRef of collection is not found in widget " + model.getObject().getIdentifier()); + return true; + } + return false; + } + + private ObjectCollectionType getObjectCollectionType() { + IModel model = (IModel)getDefaultModel(); + if(isCollectionRefOfCollectionNull(model)) { + return null; + } + ObjectReferenceType ref = model.getObject().getData().getCollection().getCollectionRef(); + Task task = getPageBase().createSimpleTask("Search collection"); + ObjectCollectionType collection = (ObjectCollectionType)WebModelServiceUtils.loadObject(ref, + getPageBase(), task, task.getResult()).getRealValue(); + return collection; + } + + private ObjectType getObjectFromObjectRef() { + IModel model = (IModel)getDefaultModel(); + if(isDataNull(model)) { + return null; + } + ObjectReferenceType ref = model.getObject().getData().getObjectRef(); + if(ref == null) { + LOGGER.error("ObjectRef of data is not found in widget " + model.getObject().getIdentifier()); + return null; + } + Task task = getPageBase().createSimpleTask("Search domain collection"); + ObjectType object = WebModelServiceUtils.loadObject(ref, + getPageBase(), task, task.getResult()).getRealValue(); + if(object == null) { + LOGGER.error("Object from ObjectRef " + ref + " is null in widget " + model.getObject().getIdentifier()); + } + return object; + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/box/SmallInfoBoxPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/box/SmallInfoBoxPanel.java index 9522be09815..64982c9a498 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/box/SmallInfoBoxPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/box/SmallInfoBoxPanel.java @@ -21,6 +21,8 @@ import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.xml.ns._public.common.common_3.DashboardWidgetType; +import org.apache.wicket.request.mapper.parameter.PageParameters; + /** * @author skublik */ @@ -53,6 +55,7 @@ protected void customInitLayout(WebMarkupContainer parentInfoBox) { @Override protected void onEvent(AjaxRequestTarget target) { + PageParameters parameters = new PageParameters(); WebPage page = getLinkRef(); getPageBase().navigateToNext(page); } diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/ModelInteractionService.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/ModelInteractionService.java index 1f712ae59d0..ca81c849b6e 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/ModelInteractionService.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/ModelInteractionService.java @@ -472,5 +472,5 @@ CompiledObjectCollectionView compileObjectCollectionView(@NotNull PrismObject actions = new ArrayList<>(); private CollectionRefSpecificationType collection; @@ -86,6 +86,10 @@ public String getViewIdentifier() { return viewIdentifier; } + public void setViewIdentifier(String viewIdentifier) { + this.viewIdentifier = viewIdentifier; + } + @NotNull public List getActions() { return actions; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ModelInteractionServiceImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ModelInteractionServiceImpl.java index c14385e1346..2d96ce3ad26 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ModelInteractionServiceImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ModelInteractionServiceImpl.java @@ -1947,7 +1947,7 @@ public Collection det } @Override - public void compileView(CompiledObjectCollectionView existingView, GuiObjectListViewType objectListViewType) { + public void applyView(CompiledObjectCollectionView existingView, GuiObjectListViewType objectListViewType) { collectionProcessor.compileView(existingView, objectListViewType); } diff --git a/model/report-impl/src/main/java/com/evolveum/midpoint/report/impl/controller/export/HtmlExportController.java b/model/report-impl/src/main/java/com/evolveum/midpoint/report/impl/controller/export/HtmlExportController.java index 04e505b8633..16f1b7b27ed 100644 --- a/model/report-impl/src/main/java/com/evolveum/midpoint/report/impl/controller/export/HtmlExportController.java +++ b/model/report-impl/src/main/java/com/evolveum/midpoint/report/impl/controller/export/HtmlExportController.java @@ -7,27 +7,18 @@ package com.evolveum.midpoint.report.impl.controller.export; import com.evolveum.midpoint.audit.api.AuditEventRecord; -import com.evolveum.midpoint.audit.api.AuditService; -import com.evolveum.midpoint.common.Clock; -import com.evolveum.midpoint.common.LocalizationService; -import com.evolveum.midpoint.model.api.ModelInteractionService; -import com.evolveum.midpoint.model.api.ModelService; import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView; -import com.evolveum.midpoint.model.api.interaction.DashboardService; import com.evolveum.midpoint.model.api.interaction.DashboardWidget; import com.evolveum.midpoint.model.api.util.DashboardUtils; import com.evolveum.midpoint.model.api.util.DefaultColumnUtils; import com.evolveum.midpoint.prism.*; import com.evolveum.midpoint.prism.path.ItemPath; -import com.evolveum.midpoint.repo.common.expression.ExpressionFactory; import com.evolveum.midpoint.report.impl.ReportServiceImpl; import com.evolveum.midpoint.schema.GetOperationOptions; -import com.evolveum.midpoint.schema.SchemaHelper; import com.evolveum.midpoint.schema.SelectorOptions; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.util.MiscSchemaUtil; import com.evolveum.midpoint.task.api.Task; -import com.evolveum.midpoint.task.api.TaskManager; import com.evolveum.midpoint.util.QNameUtil; import com.evolveum.midpoint.util.exception.*; import com.evolveum.midpoint.util.logging.Trace; @@ -108,15 +99,15 @@ public byte[] processDashboard(DashboardReportEngineConfigurationType dashboardC } ObjectCollectionType collection = getReportService().getDashboardService().getObjectCollectionType(widget, task, result); CompiledObjectCollectionView compiledCollection = new CompiledObjectCollectionView(); - getReportService().getModelInteractionService().compileView(compiledCollection, collection.getDefaultView()); + getReportService().getModelInteractionService().applyView(compiledCollection, collection.getDefaultView()); if(!useDefaultColumn(widget)) { - getReportService().getModelInteractionService().compileView(compiledCollection, widget.getPresentation().getView()); + getReportService().getModelInteractionService().applyView(compiledCollection, widget.getPresentation().getView()); } QName collectionType = collection.getAuditSearch() != null ? AuditEventRecordType.COMPLEX_TYPE : collection.getType(); GuiObjectListViewType reportView = getReportViewByType(dashboardConfig, collectionType); if (reportView != null) { - getReportService().getModelInteractionService().compileView(compiledCollection, reportView); + getReportService().getModelInteractionService().applyView(compiledCollection, reportView); } switch (sourceType) { case OBJECT_COLLECTION: @@ -293,7 +284,7 @@ private ContainerTag createTableBoxForObjectView(String label, ObjectCollectionT //noinspection unchecked if (compiledCollection.getColumns().isEmpty()) { - getReportService().getModelInteractionService().compileView(compiledCollection, DefaultColumnUtils.getDefaultColumns(type)); + getReportService().getModelInteractionService().applyView(compiledCollection, DefaultColumnUtils.getDefaultColumns(type)); } ContainerTag table = createTable(compiledCollection, values, def, type, task, result); DisplayType display = compiledCollection.getDisplay(); @@ -315,7 +306,7 @@ private ContainerTag createTableBoxForAuditView(String label, ObjectCollectionTy // ContainerTag table = createTable(); if (compiledCollection.getColumns().isEmpty()) { - getReportService().getModelInteractionService().compileView(compiledCollection, DefaultColumnUtils.getDefaultAuditEventsView()); + getReportService().getModelInteractionService().applyView(compiledCollection, DefaultColumnUtils.getDefaultAuditEventsView()); } // if(!useDefaultColumn(widget)) { // table = createTable(widget.getPresentation().getView(), records, task, result);