Skip to content

Commit

Permalink
configurable seld dashboard page
Browse files Browse the repository at this point in the history
  • Loading branch information
Kateryna Honchar committed Jun 29, 2022
1 parent 95032f7 commit cfef3e7
Show file tree
Hide file tree
Showing 9 changed files with 209 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import com.evolveum.midpoint.gui.impl.page.admin.cases.PageCase;
import com.evolveum.midpoint.gui.impl.page.admin.resource.PageResource;
import com.evolveum.midpoint.gui.impl.page.self.PageRequestAccess;
import com.evolveum.midpoint.gui.impl.page.self.PageSelfDashboardConfigurable;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.web.application.CollectionInstance;
Expand Down Expand Up @@ -301,6 +302,7 @@ private SideBarMenuItem createSelfServiceMenu(boolean experimentalFeaturesEnable
SideBarMenuItem menu = new SideBarMenuItem("PageAdmin.menu.selfService", experimentalFeaturesEnabled);
menu.addMainMenuItem(createMainMenuItem("PageAdmin.menu.selfDashboard", GuiStyleConstants.CLASS_ICON_DASHBOARD,
PageSelfDashboard.class));
menu.addMainMenuItem(createSelfDashboardItems());
PageParameters pageParameters = new PageParameters();
pageParameters.add(OnePageParameterEncoder.PARAMETER, WebModelServiceUtils.getLoggedInFocusOid());
menu.addMainMenuItem(createMainMenuItem("PageAdmin.menu.profile", GuiStyleConstants.CLASS_ICON_PROFILE,
Expand Down Expand Up @@ -339,18 +341,32 @@ private SideBarMenuItem createMainNavigationMenu(boolean experimentalFeaturesEna
return menu;
}

private MainMenuItem createSelfDashboardItems() {
MainMenuItem selfDashboard = createMainMenuItem("PageAdmin.menu.selfDashboard", GuiStyleConstants.CLASS_ICON_DASHBOARD);

List<CompiledDashboardType> dashboards = getPageBase().getCompiledGuiProfile().getConfigurableDashboards();
List<CompiledDashboardType> selfDashboards = dashboards.stream()
.filter(dashboard -> dashboard.getIdentifier() == null || dashboard.getIdentifier().startsWith("self")).toList();
return createDashboardItems(selfDashboard, selfDashboards);
}

private MainMenuItem createHomeItems() {
MainMenuItem homeMenu = createMainMenuItem("PageAdmin.menu.dashboard", GuiStyleConstants.CLASS_DASHBOARD_ICON);
homeMenu.addMenuItem(new MenuItem("PageAdmin.menu.dashboard.info", PageDashboardInfo.class));

List<CompiledDashboardType> dashboards = getPageBase().getCompiledGuiProfile().getConfigurableDashboards();
List<CompiledDashboardType> adminDashboards = dashboards.stream()
.filter(dashboard -> dashboard.getIdentifier() == null || dashboard.getIdentifier().startsWith("admin")).toList();
return createDashboardItems(homeMenu, adminDashboards);
}

private MainMenuItem createDashboardItems(MainMenuItem mainMenu, List<CompiledDashboardType> dashboards) {
for (CompiledDashboardType prismObject : dashboards) {
MenuItem dashboardMenu = createDashboardMenuItem(prismObject);
homeMenu.addMenuItem(dashboardMenu);
mainMenu.addMenuItem(dashboardMenu);
}

return homeMenu;
return mainMenu;
}

private MenuItem createDashboardMenuItem(CompiledDashboardType dashboard) {
Expand All @@ -368,7 +384,7 @@ private MenuItem createDashboardMenuItem(CompiledDashboardType dashboard) {
active = dashboard.getOid().equals(dashboardOidParam.toString());
}

return new MenuItem(label, PageDashboardConfigurable.class, createDashboardPageParameters(dashboard), active);
return new MenuItem(label, PageSelfDashboardConfigurable.class, createDashboardPageParameters(dashboard), active);

}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright (c) 2010-2019 Evolveum
~
~ 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:extend>
<div class="d-flex justify-content-between">
<div class="flex-grow-1" wicket:id="objectCollectionViews">
<div class="mb-5" wicket:id="objectCollectionView"/>
</div>
</div>
</wicket:extend>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
/*
* Copyright (C) 2010-2020 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.self;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.evolveum.midpoint.gui.api.component.ObjectListPanel;
import com.evolveum.midpoint.gui.impl.component.ContainerableListPanel;
import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView;
import com.evolveum.midpoint.model.common.util.DefaultColumnUtils;
import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.query.ObjectOrdering;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.web.component.data.ISelectableDataProvider;
import com.evolveum.midpoint.web.component.data.SelectableBeanContainerDataProvider;
import com.evolveum.midpoint.web.component.data.SelectableBeanObjectDataProvider;
import com.evolveum.midpoint.web.component.util.SelectableRow;
import com.evolveum.midpoint.web.page.admin.home.*;

import com.evolveum.midpoint.web.session.PageStorage;
import com.evolveum.midpoint.web.session.UserProfileStorage;

import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;

import com.evolveum.midpoint.authentication.api.authorization.AuthorizationAction;
import com.evolveum.midpoint.authentication.api.authorization.PageDescriptor;
import com.evolveum.midpoint.authentication.api.authorization.Url;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

/**
* @author skublik
*/
@PageDescriptor(
urls = {
@Url(mountUrl = "/self/dashboardNew", matchUrlForSecurity = "/self/dashboardNew")
},
action = {
@AuthorizationAction(actionUri = PageAdminHome.AUTH_HOME_ALL_URI,
label = PageAdminHome.AUTH_HOME_ALL_LABEL,
description = PageAdminHome.AUTH_HOME_ALL_DESCRIPTION),
@AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_DASHBOARD_URL,
label = "PageDashboard.auth.dashboard.label",
description = "PageDashboard.auth.dashboard.description")
})
public class PageSelfDashboardConfigurable extends PageDashboardConfigurable {

private static final long serialVersionUID = 1L;

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

private static final String ID_OBJECT_COLLECTION_VIEWS = "objectCollectionViews";
private static final String ID_OBJECT_COLLECTION_VIEW = "objectCollectionView";

protected void initLayout() {
super.initLayout();
initObjectCollectionViewsLayout();
}

private <C extends Containerable> void initObjectCollectionViewsLayout() {
add(new ListView<String>(ID_OBJECT_COLLECTION_VIEWS, new PropertyModel<>(dashboardModel, "objectCollectionViewIdentifier")) {
@Override
protected void populateItem(ListItem<String> item) {
ContainerableListPanel listPanel = new ContainerableListPanel(ID_OBJECT_COLLECTION_VIEW, ObjectType.class) {
private static final long serialVersionUID = 1L;

@Override
protected UserProfileStorage.TableId getTableId() {
return UserProfileStorage.TableId.PAGE_SELF_DASHBOARD_CONFIGURABLE;
}

@Override
public CompiledObjectCollectionView getObjectCollectionView() {
return getPageBase().getCompiledGuiProfile().findObjectCollectionView
(WebComponentUtil.containerClassToQName(getPageBase().getPrismContext(), getType()), item.getModelObject());
}

@Override
protected Containerable getRowRealValue(SelectableRow rowModelObject) {
return null;
}

@Override
protected IColumn createIconColumn() {
return null;
}

@Override
protected List<IColumn> createDefaultColumns() {
GuiObjectListViewType defaultView = DefaultColumnUtils.getDefaultView(getType());
if (defaultView == null) {
return null;
}
return getViewColumnsTransformed(defaultView.getColumn());
}

@Override
protected ISelectableDataProvider createProvider() {
SelectableBeanContainerDataProvider<C> provider
= new SelectableBeanContainerDataProvider<C>(
getPageBase(), getSearchModel(), null, true) {
private static final long serialVersionUID = 1L;

@Override
protected PageStorage getPageStorage() {
return null;
}

@Override
protected ObjectQuery getCustomizeContentQuery() {
return null;
}

@Override
protected List<ObjectOrdering> createObjectOrderings(SortParam<String> sortParam) {
return super.createObjectOrderings(sortParam);
}

@Override
protected Set<C> getSelected() {
return new HashSet<>();
}
};
provider.setCompiledObjectCollectionView(getObjectCollectionView());
// provider.setOptions(createOptions());
return provider;
}

@Override
public List getSelectedRealObjects() {
return null;
}
};

item.add(listPanel);
}
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
<div class="mb-4" wicket:id="widget"/>
</div>
</div>
<wicket:child></wicket:child>
</wicket:extend>
</body>
</html>
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ public class PageDashboardConfigurable extends PageDashboard {
LINKS_REF_COLLECTIONS = map;
}

private IModel<DashboardType> dashboardModel;
protected IModel<DashboardType> dashboardModel;

private static final String ID_WIDGETS = "widgets";
private static final String ID_WIDGET = "widget";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ public enum TableId {
USERS_VIEW_TABLE,
FOCUS_PROJECTION_TABLE,
SELF_DASHBOARD_CASES_PANEL,
PAGE_SELF_DASHBOARD_CONFIGURABLE,
PAGE_CASE_WORKITEMS_TAB,
PAGE_CASE_CHILD_CASES_TAB,
PAGE_CASE_EVENTS_TAB,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ public class CompiledDashboardType implements DebugDumpable, Serializable {
private UserInterfaceElementVisibilityType visibility;
private DashboardType originalDashboard;

private String identifier;

public CompiledDashboardType(DashboardType originalDashboard) {
this.originalDashboard = originalDashboard;
}
Expand Down Expand Up @@ -55,6 +57,14 @@ public String getOid() {
return originalDashboard.getOid();
}

public String getIdentifier() {
return identifier;
}

public void setIdentifier(String identifier) {
this.identifier = identifier;
}

@Override
public String debugDump(int indent) {
StringBuilder sb = DebugUtil.createTitleStringBuilderLn(CompiledDashboardType.class, indent);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,9 @@ private void applyConfigurableDashboard(CompiledGuiProfile composit, Configurabl
MiscSchemaUtil.mergeDisplay(configurableUserDashboard.getDisplay(), dashboardType.getDisplay());
compiledDashboard.setDisplayType(configurableUserDashboard.getDisplay());

if (StringUtils.isNotEmpty(configurableUserDashboard.getIdentifier())) {
compiledDashboard.setIdentifier(configurableUserDashboard.getIdentifier());
}
UserInterfaceElementVisibilityType visibility = configurableUserDashboard.getVisibility();
if (visibility == null) {
visibility = UserInterfaceElementVisibilityType.AUTOMATIC;
Expand Down

0 comments on commit cfef3e7

Please sign in to comment.