Skip to content

Commit

Permalink
MID-7442 fix for details page if no panels available
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Feb 18, 2022
1 parent f60856a commit f66bdb8
Show file tree
Hide file tree
Showing 8 changed files with 190 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,41 @@
*/
package com.evolveum.midpoint.gui.api.component.result;

import java.io.Serializable;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;

import com.evolveum.midpoint.gui.api.component.BasePanel;

public class MessagePanel extends BasePanel<String> {

private static final String ID_MESSAGE = "message";

private static final String ID_DETAILS_BOX = "detailsBox";

private static final String ID_ICON_TYPE = "iconType";

private static final String ID_CLOSE = "close";

public enum MessagePanelType {INFO, WARN, SUCCESS, ERROR}

private MessagePanelType type;

private boolean closeVisible;

public MessagePanel(String id, MessagePanelType type, IModel<String> model) {
this(id, type, model, true);
}

public MessagePanel(String id, MessagePanelType type, IModel<String> model, boolean closeVisible) {
super(id, model);
this.type = type;

this.type = type;
this.closeVisible = closeVisible;
}

@Override
Expand All @@ -41,7 +51,7 @@ protected void onInitialize() {

public void initLayout() {

WebMarkupContainer detailsBox = new WebMarkupContainer("detailsBox");
WebMarkupContainer detailsBox = new WebMarkupContainer(ID_DETAILS_BOX);
detailsBox.setOutputMarkupId(true);
detailsBox.add(AttributeModifier.append("class", createHeaderCss()));
add(detailsBox);
Expand All @@ -63,12 +73,12 @@ private IModel<String> createHeaderCss() {
case WARN: // TODO:
default:
return " box-warning";
}
};
}
};
}

private void initHeader(WebMarkupContainer box) {
WebMarkupContainer iconType = new WebMarkupContainer("iconType");
WebMarkupContainer iconType = new WebMarkupContainer(ID_ICON_TYPE);
iconType.setOutputMarkupId(true);
iconType.add(new AttributeAppender("class", (IModel) () -> {

Expand All @@ -82,29 +92,29 @@ private void initHeader(WebMarkupContainer box) {
case WARN:
default:
return " fa-warning";
}
}));
}
}));

box.add(iconType);

Label message = new Label(ID_MESSAGE, getModel());
Label message = new Label(ID_MESSAGE, getModel());
box.add(message);

AjaxLink<Void> close = new AjaxLink<Void>("close") {
AjaxLink<Void> close = new AjaxLink<Void>(ID_CLOSE) {

private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
close(target);

}
};
close.setVisible(closeVisible);

box.add(close);
}

public void close(AjaxRequestTarget target){
public void close(AjaxRequestTarget target) {
this.setVisible(false);
target.add(this);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

import java.util.*;

import com.evolveum.midpoint.gui.api.component.result.MessagePanel;
import com.evolveum.midpoint.gui.api.prism.ItemStatus;
import com.evolveum.midpoint.gui.impl.component.menu.DetailsNavigationPanel;
import com.evolveum.midpoint.gui.impl.page.admin.component.OperationalButtonsPanel;
Expand All @@ -24,10 +25,14 @@
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.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.RepeatingView;
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;
import org.apache.wicket.util.string.StringValue;
Expand Down Expand Up @@ -345,7 +350,7 @@ private ContainerPanelConfigurationType findDefaultConfiguration() {
.stream()
.filter(config -> isApplicableForOperation(config) && WebComponentUtil.getElementVisibility(config.getVisibility()))
.findFirst()
.get();
.orElseGet(() -> null);
}

private ContainerPanelConfigurationType findDefaultConfiguration(List<ContainerPanelConfigurationType> configs) {
Expand Down Expand Up @@ -382,6 +387,15 @@ private boolean isApplicableForOperation(ContainerPanelConfigurationType configu
}

private void initMainPanel(ContainerPanelConfigurationType panelConfig, MidpointForm form) {
if (panelConfig == null) {
// form.addOrReplace(new Label(ID_MAIN_PANEL, Model.of("No panels defined"))); // todo - create nicer panel
WebMarkupContainer panel = new MessagePanel(ID_MAIN_PANEL, MessagePanel.MessagePanelType.WARN, createStringResource("AbstractPageObjectDetails.noPanels"), false);
panel.add(AttributeAppender.append("style", "margin-top: 20px;"));

form.addOrReplace(panel);
return;
}

getSessionStorage().setObjectDetailsStorage("details" + getType().getSimpleName(), panelConfig);
String panelType = panelConfig.getPanelType();
if (panelType == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,20 +67,20 @@ public PageSystemConfiguration() {

private void initLayout() {
IModel<List<CompositedIconButtonDto>> model = Model.ofList(Arrays.asList(
createCompositedButton("Basic", "fa fa-wrench", PageSystemBasic.class),
createCompositedButton("fa fa-wrench", PageSystemBasic.class),
// createCompositedButton("Object policies", "fa fa-umbrella", PageObjectPoliciesConfiguration.class)
// createCompositedButton("Global policy rule", "fa fa-eye", PageGlobalPolicyRule.class)
// createCompositedButton("Global projection policy", "fa fa-globe", PageGlobalProjectionPolicy.class)
// createCompositedButton("Cleanup policy", "fa fa-eraser", PageCleanupPolicy.class)
createCompositedButton("Notifications", "fa fa-envelope", PageSystemNotification.class),
createCompositedButton("Logging", "fa fa-file-text", PageSystemLogging.class),
createCompositedButton("fa fa-envelope", PageSystemNotification.class),
createCompositedButton("fa fa-file-text", PageSystemLogging.class),
// createCompositedButton("Profiling", "fa fa-camera", PageProfiling.class)
createCompositedButton("Admin GUI configuration", "fa fa-camera", PageSystemAdminGui.class),
createCompositedButton("Workflow configuration", "fa fa-camera", PageSystemWorkflow.class),
createCompositedButton("Role management", "fa fa-camera", PageRoleManagement.class),
createCompositedButton("Internals", "fa fa-camera", PageInternals.class),
createCompositedButton("fa fa-camera", PageSystemAdminGui.class),
createCompositedButton("fa fa-camera", PageSystemWorkflow.class),
createCompositedButton("fa fa-camera", PageRoleManagement.class),
createCompositedButton("fa fa-camera", PageInternals.class),
// createCompositedButton("Deployment information", "fa fa-camera", PageDeploymentInformation.class)
createCompositedButton("Access certification", "fa fa-camera", PageAccessCertification.class)
createCompositedButton("fa fa-camera", PageAccessCertification.class)
// createCompositedButton("Infrastructure", "fa fa-camera", PageInfrastructure.class)
// createCompositedButton("Full text configuration", "fa fa-camera", PageFullTextSearch.class)
));
Expand All @@ -96,14 +96,16 @@ protected void buttonClickPerformed(AjaxRequestTarget target, AssignmentObjectRe
add(panel);
}

private CompositedIconButtonDto createCompositedButton(String type, String icon, Class<? extends WebPage> page) {
private CompositedIconButtonDto createCompositedButton(String icon, Class<? extends WebPage> page) {
String title = page.getSimpleName() + ".title";

CompositedIconButtonDto button = new CompositedIconButtonDto();
CompositedIconBuilder builder = new CompositedIconBuilder();
builder.setTitle(type);
builder.setTitle(title);
builder.setBasicIcon(icon, IconCssStyle.IN_ROW_STYLE);
button.setCompositedIcon(builder.build());
DisplayType displayType = new DisplayType();
displayType.setLabel(new PolyStringType(type));
displayType.setLabel(new PolyStringType(title));
button.setAdditionalButtonDisplayType(displayType);
button.setPage(page);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<!--
~ Copyright (c) 2022 Evolveum and contributors
~
~ This work is dual-licensed under the Apache License 2.0
~ and European Union Public License. See LICENSE file for details.
-->
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:wicket="http://wicket.apache.org">
<body>
<wicket:panel>
<div class="row">
<div class="col-md-12">
<div wicket:id="mainPanel" />
</div>
</div>
</wicket:panel>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
* Copyright (c) 2022 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.page.admin.systemconfiguration.component;

import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.impl.page.admin.AbstractObjectMainPanel;
import com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.AssignmentHolderDetailsModel;
import com.evolveum.midpoint.gui.impl.prism.panel.SingleContainerPanel;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.web.application.PanelDisplay;
import com.evolveum.midpoint.web.application.PanelInstance;
import com.evolveum.midpoint.web.application.PanelType;
import com.evolveum.midpoint.web.model.PrismContainerWrapperModel;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ContainerPanelConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LoggingConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType;

@PanelType(name = "accessCertificationPanel")
@PanelInstance(
identifier = "accessCertificationPanel",
applicableForType = AccessCertificationConfigurationType.class,
display = @PanelDisplay(
label = "AccessCertificationContentPanel.label",
icon = GuiStyleConstants.CLASS_CIRCLE_FULL,
order = 10
)
)
public class AccessCertificationContentPanel extends AbstractObjectMainPanel<SystemConfigurationType, AssignmentHolderDetailsModel<SystemConfigurationType>> {

private static final String ID_MAIN_PANEL = "mainPanel";

public AccessCertificationContentPanel(String id, AssignmentHolderDetailsModel<SystemConfigurationType> model, ContainerPanelConfigurationType config) {
super(id, model, config);
}

@Override
protected void initLayout() {
SingleContainerPanel panel = new SingleContainerPanel(ID_MAIN_PANEL,
PrismContainerWrapperModel.fromContainerWrapper(getObjectWrapperModel(), ItemPath.create(SystemConfigurationType.F_ACCESS_CERTIFICATION)),
AccessCertificationConfigurationType.COMPLEX_TYPE);
add(panel);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<!--
~ Copyright (c) 2022 Evolveum and contributors
~
~ This work is dual-licensed under the Apache License 2.0
~ and European Union Public License. See LICENSE file for details.
-->
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:wicket="http://wicket.apache.org">
<body>
<wicket:panel>
<div class="row">
<div class="col-md-12">
<div wicket:id="mainPanel" />
</div>
</div>
</wicket:panel>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
* Copyright (c) 2022 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.page.admin.systemconfiguration.component;

import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.impl.page.admin.AbstractObjectMainPanel;
import com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.AssignmentHolderDetailsModel;
import com.evolveum.midpoint.gui.impl.prism.panel.SingleContainerPanel;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.web.application.PanelDisplay;
import com.evolveum.midpoint.web.application.PanelInstance;
import com.evolveum.midpoint.web.application.PanelType;
import com.evolveum.midpoint.web.model.PrismContainerWrapperModel;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ContainerPanelConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.NotificationConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType;

@PanelType(name = "notificationPanel")
@PanelInstance(
identifier = "notificationPanel",
applicableForType = NotificationConfigurationType.class,
display = @PanelDisplay(
label = "NotificationContentPanel.label",
icon = GuiStyleConstants.CLASS_CIRCLE_FULL,
order = 10
)
)
public class NotificationContentPanel extends AbstractObjectMainPanel<SystemConfigurationType, AssignmentHolderDetailsModel<SystemConfigurationType>> {

private static final String ID_MAIN_PANEL = "mainPanel";

public NotificationContentPanel(String id, AssignmentHolderDetailsModel<SystemConfigurationType> model, ContainerPanelConfigurationType config) {
super(id, model, config);
}

@Override
protected void initLayout() {
SingleContainerPanel panel = new SingleContainerPanel(ID_MAIN_PANEL,
PrismContainerWrapperModel.fromContainerWrapper(getObjectWrapperModel(), ItemPath.create(SystemConfigurationType.F_NOTIFICATION_CONFIGURATION)),
NotificationConfigurationType.COMPLEX_TYPE);
add(panel);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -278,9 +278,11 @@ public <O extends ObjectType> GuiObjectDetailsPageType findObjectDetailsConfigur

public <O extends ObjectType> GuiObjectDetailsPageType findObjectDetailsConfiguration(QName typeQName) {
if (objectDetails == null) {
return null;
return new GuiObjectDetailsPageType().type(typeQName);
}
return findObjectConfiguration(objectDetails.getObjectDetailsPage(), typeQName);
GuiObjectDetailsPageType result = findObjectConfiguration(objectDetails.getObjectDetailsPage(), typeQName);

return result != null ? result : new GuiObjectDetailsPageType().type(typeQName);
}

public <O extends ObjectType> GuiShadowDetailsPageType findShadowDetailsConfiguration(ResourceShadowDiscriminator shadowDiscriminator) {
Expand Down

0 comments on commit f66bdb8

Please sign in to comment.