From ecaf76be50f00a87ea2954a6f8b2de1a5c9ea722 Mon Sep 17 00:00:00 2001 From: lskublik Date: Fri, 5 Jun 2020 13:39:04 +0200 Subject: [PATCH] adding page for object collections --- .../midpoint/gui/api/GuiStyleConstants.java | 2 + .../midpoint/gui/api/page/PageBase.java | 301 +++++++++++------- .../gui/api/util/WebComponentUtil.java | 6 + .../web/application/DescriptorLoader.java | 1 + .../web/component/ObjectBasicPanel.html | 19 ++ .../web/component/ObjectBasicPanel.java | 70 ++++ .../component/data/column/ColumnUtils.java | 10 + .../page/admin/archetype/PageArchetype.java | 5 + .../page/admin/archetype/PageArchetypes.java | 5 + .../ObjectCollectionSummaryPanel.java | 40 +++ .../PageObjectCollection.html | 15 + .../PageObjectCollection.java | 273 ++++++++++++++++ .../PageObjectCollections.java | 81 +++++ .../web/session/UserProfileStorage.java | 1 + .../xml/ns/public/common/common-core-3.xsd | 165 ++++++++-- .../impl/controller/CollectionProcessor.java | 2 +- .../impl/controller/DashboardServiceImpl.java | 8 +- .../security/api/AuthorizationConstants.java | 9 + 18 files changed, 875 insertions(+), 138 deletions(-) create mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/ObjectBasicPanel.html create mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/ObjectBasicPanel.java create mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/objectCollection/ObjectCollectionSummaryPanel.java create mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/objectCollection/PageObjectCollection.html create mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/objectCollection/PageObjectCollection.java create mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/objectCollection/PageObjectCollections.java diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/GuiStyleConstants.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/GuiStyleConstants.java index 02b3624fafa..3d88af88135 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/GuiStyleConstants.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/GuiStyleConstants.java @@ -67,6 +67,8 @@ public class GuiStyleConstants { public static final String CLASS_OBJECT_CERT_CAMPAIGN_ICON = "fa fa-gavel"; public static final String CLASS_OBJECT_CERT_CAMPAIGN_ICON_COLORED = CLASS_OBJECT_CERT_CAMPAIGN_ICON + " object-task-color"; // TODO + public static final String CLASS_OBJECT_COLLECTION_CAMPAIGN_ICON = "fa fa-filter"; + public static final String CLASS_ICON_STYLE = "icon-style-"; //some icon styles start with this string public static final String CLASS_ICON_STYLE_NORMAL = "icon-style-normal"; public static final String CLASS_ICON_STYLE_DISABLED = "icon-style-disabled"; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java index 4e3d01117c4..8f5850bce91 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java @@ -19,6 +19,8 @@ import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettings; import com.evolveum.midpoint.web.page.admin.PageAdminObjectDetails; +import com.evolveum.midpoint.web.page.admin.objectCollection.PageObjectCollection; +import com.evolveum.midpoint.web.page.admin.objectCollection.PageObjectCollections; import com.evolveum.midpoint.web.page.admin.certification.*; import org.apache.commons.collections.CollectionUtils; @@ -1687,117 +1689,48 @@ protected List createMenuItems() { menus.add(menu); List items = menu.getItems(); + menu = new SideBarMenuItem(createStringResource("PageAdmin.menu.top.configuration")); + menus.add(menu); + createConfigurationMenu(menu); - if (WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_CONFIGURATION_URL, - AuthorizationConstants.AUTZ_UI_CONFIGURATION_DEBUG_URL, - AuthorizationConstants.AUTZ_UI_CONFIGURATION_DEBUGS_URL, - AuthorizationConstants.AUTZ_UI_CONFIGURATION_IMPORT_URL, - AuthorizationConstants.AUTZ_UI_CONFIGURATION_LOGGING_URL, - AuthorizationConstants.AUTZ_UI_CONFIGURATION_SYSTEM_CONFIG_URL, - AuthorizationConstants.AUTZ_UI_CONFIGURATION_ABOUT_URL, - AuthorizationConstants.AUTZ_UI_CONFIGURATION_REPOSITORY_QUERY_URL, - AuthorizationConstants.AUTZ_UI_CONFIGURATION_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, - AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL)) { - - menu = new SideBarMenuItem(createStringResource("PageAdmin.menu.top.configuration")); - menus.add(menu); - createConfigurationMenu(menu); - } menu = new SideBarMenuItem(createStringResource("PageAdmin.menu.additional")); menus.add(menu); createAdditionalMenu(menu); - - // todo fix with visible behaviour [lazyman] - if (WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_DASHBOARD_URL, - AuthorizationConstants.AUTZ_UI_HOME_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, - AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL)) { - items.add(createHomeItems()); - } - - if (WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_USERS_URL, - AuthorizationConstants.AUTZ_UI_USERS_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, - AuthorizationConstants.AUTZ_UI_USERS_VIEW_URL, AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL)) { - items.add(createUsersItems()); - } - - if (WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_ORG_STRUCT_URL, - AuthorizationConstants.AUTZ_UI_ORG_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, - AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL)) { - items.add(createOrganizationsMenu()); - } - - if (WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_ROLES_URL, - AuthorizationConstants.AUTZ_UI_ROLES_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, - AuthorizationConstants.AUTZ_UI_ROLES_VIEW_URL, AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL)) { - items.add(createRolesItems()); - } - - if (WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_SERVICES_URL, - AuthorizationConstants.AUTZ_UI_SERVICES_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, - AuthorizationConstants.AUTZ_UI_SERVICES_VIEW_URL, AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL)) { - items.add(createServicesItems()); - } - - if (WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_ARCHETYPES_URL, - AuthorizationConstants.AUTZ_UI_ARCHETYPES_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, - AuthorizationConstants.AUTZ_UI_ARCHETYPES_VIEW_URL)) { - items.add(createArchetypesItems()); - } - - if (WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_RESOURCES_URL, - AuthorizationConstants.AUTZ_UI_RESOURCES_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, - AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL, AuthorizationConstants.AUTZ_UI_RESOURCE_URL, - AuthorizationConstants.AUTZ_UI_RESOURCE_EDIT_URL, AuthorizationConstants.AUTZ_UI_RESOURCES_VIEW_URL)) { - items.add(createResourcesItems()); - } - - if (WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_MY_WORK_ITEMS_URL, - AuthorizationConstants.AUTZ_UI_ATTORNEY_WORK_ITEMS_URL, - AuthorizationConstants.AUTZ_UI_ALL_WORK_ITEMS_URL, - AuthorizationConstants.AUTZ_UI_CLAIMABLE_WORK_ITEMS_URL, - AuthorizationConstants.AUTZ_UI_WORK_ITEM_URL, - AuthorizationConstants.AUTZ_UI_CASES_ALL_URL, - AuthorizationConstants.AUTZ_UI_CASES_URL, - AuthorizationConstants.AUTZ_UI_CASE_URL, - AuthorizationConstants.AUTZ_UI_WORK_ITEMS_ALL_URL, - AuthorizationConstants.AUTZ_GUI_ALL_URL, - AuthorizationConstants.AUTZ_UI_CASES_VIEW_URL, AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL)) { - if (getWorkflowManager().isEnabled()) { - items.add(createWorkItemsItems()); - } - } - - if (WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_CERTIFICATION_ALL_URL, - AuthorizationConstants.AUTZ_UI_CERTIFICATION_DEFINITIONS_URL, - AuthorizationConstants.AUTZ_UI_CERTIFICATION_NEW_DEFINITION_URL, - AuthorizationConstants.AUTZ_UI_CERTIFICATION_CAMPAIGNS_URL, - AuthorizationConstants.AUTZ_UI_CERTIFICATION_DECISIONS_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, - AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL)) { - items.add(createCertificationItems()); - } - - if (WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_TASKS_URL, - AuthorizationConstants.AUTZ_UI_TASKS_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, - AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL)) { - items.add(createServerTasksItems()); - } - - if (WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_REPORTS_URL, - AuthorizationConstants.AUTZ_UI_REPORTS_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL)) { - items.add(createReportsItems()); + items.add(createHomeItems()); + items.add(createUsersItems()); + items.add(createOrganizationsMenu()); + items.add(createRolesItems()); + items.add(createServicesItems()); + items.add(createResourcesItems()); + if (getWorkflowManager().isEnabled()) { + items.add(createWorkItemsItems()); } + items.add(createCertificationItems()); + items.add(createServerTasksItems()); + items.add(createReportsItems()); return menus; } private void createConfigurationMenu(SideBarMenuItem item) { + item.getItems().add(createArchetypesItems()); + item.getItems().add(createObjectsCollectionItems()); addMainMenuItem(item, "fa fa-bullseye", "PageAdmin.menu.top.configuration.bulkActions", PageBulkAction.class); addMainMenuItem(item, "fa fa-upload", "PageAdmin.menu.top.configuration.importObject", PageImportObject.class); - MainMenuItem debugs = addMainMenuItem(item, "fa fa-file-text", "PageAdmin.menu.top.configuration.repositoryObjects", null); + MainMenuItem debugs = addMainMenuItem(item, "fa fa-file-text", "PageAdmin.menu.top.configuration.repositoryObjects", null, + new VisibleEnableBehaviour(){ + @Override + public boolean isVisible() { + return WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_CONFIGURATION_URL, + AuthorizationConstants.AUTZ_UI_CONFIGURATION_DEBUG_URL, AuthorizationConstants.AUTZ_UI_CONFIGURATION_DEBUGS_URL, + AuthorizationConstants.AUTZ_UI_CONFIGURATION_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, + AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL); + } + }); addMenuItem(debugs, "PageAdmin.menu.top.configuration.repositoryObjectsList", PageDebugList.class); @@ -1805,7 +1738,26 @@ private void createConfigurationMenu(SideBarMenuItem item) { PageDebugView.class, null, createVisibleDisabledBehaviorForEditMenu(PageDebugView.class)); debugs.getItems().add(menu); - MainMenuItem systemItemNew = addMainMenuItem(item, "fa fa-cog", "PageAdmin.menu.top.configuration.basic", null); + createSystemConfigurationMenu(item); + + addMainMenuItem(item, "fa fa-archive", "PageAdmin.menu.top.configuration.internals", PageInternals.class); + addMainMenuItem(item, "fa fa-search", "PageAdmin.menu.top.configuration.repoQuery", PageRepositoryQuery.class); + if (WebModelServiceUtils.isEnableExperimentalFeature(this)) { + addMainMenuItem(item, "fa fa-cog", "PageAdmin.menu.top.configuration.evaluateMapping", PageEvaluateMapping.class); + } + addMainMenuItem(item, "fa fa-info-circle", "PageAdmin.menu.top.configuration.about", PageAbout.class); + } + + private void createSystemConfigurationMenu(SideBarMenuItem item) { + MainMenuItem systemItemNew = addMainMenuItem(item, "fa fa-cog", "PageAdmin.menu.top.configuration.basic", null, + new VisibleEnableBehaviour(){ + @Override + public boolean isVisible() { + return WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_CONFIGURATION_URL, + AuthorizationConstants.AUTZ_UI_CONFIGURATION_SYSTEM_CONFIG_URL, AuthorizationConstants.AUTZ_UI_CONFIGURATION_ALL_URL, + AuthorizationConstants.AUTZ_GUI_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL); + } + }); addSystemMenuItem(systemItemNew, "PageAdmin.menu.top.configuration.basic", PageSystemConfiguration.CONFIGURATION_TAB_BASIC); @@ -1839,13 +1791,6 @@ private void createConfigurationMenu(SideBarMenuItem item) { PageSystemConfiguration.CONFIGURATION_TAB_INFRASTRUCTURE); addSystemMenuItem(systemItemNew, "PageAdmin.menu.top.configuration.fullTextSearch", PageSystemConfiguration.CONFIGURATION_TAB_FULL_TEXT_SEARCH); - - addMainMenuItem(item, "fa fa-archive", "PageAdmin.menu.top.configuration.internals", PageInternals.class); - addMainMenuItem(item, "fa fa-search", "PageAdmin.menu.top.configuration.repoQuery", PageRepositoryQuery.class); - if (WebModelServiceUtils.isEnableExperimentalFeature(this)) { - addMainMenuItem(item, "fa fa-cog", "PageAdmin.menu.top.configuration.evaluateMapping", PageEvaluateMapping.class); - } - addMainMenuItem(item, "fa fa-info-circle", "PageAdmin.menu.top.configuration.about", PageAbout.class); } private void addSystemMenuItem(MainMenuItem mainItem, String key, int tabIndex) { @@ -1867,7 +1812,12 @@ public boolean isMenuActive(WebPage page) { } private MainMenuItem addMainMenuItem(SideBarMenuItem item, String icon, String key, Class page) { - MainMenuItem mainItem = new MainMenuItem(icon, createStringResource(key), page); + return addMainMenuItem(item, icon, key, page, null); + } + + private MainMenuItem addMainMenuItem(SideBarMenuItem item, String icon, String key, Class page, + VisibleEnableBehaviour visibleEnableBehaviour) { + MainMenuItem mainItem = new MainMenuItem(icon, createStringResource(key), page, null, visibleEnableBehaviour); item.getItems().add(mainItem); return mainItem; @@ -1883,8 +1833,24 @@ private void addMenuItem(MainMenuItem item, String key, String iconClass, Class< } private MainMenuItem createWorkItemsItems() { + VisibleEnableBehaviour visibleEnableBehaviour = new VisibleEnableBehaviour() { + @Override + public boolean isVisible() { + return WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_MY_WORK_ITEMS_URL, + AuthorizationConstants.AUTZ_UI_ATTORNEY_WORK_ITEMS_URL, + AuthorizationConstants.AUTZ_UI_ALL_WORK_ITEMS_URL, + AuthorizationConstants.AUTZ_UI_CLAIMABLE_WORK_ITEMS_URL, + AuthorizationConstants.AUTZ_UI_WORK_ITEM_URL, + AuthorizationConstants.AUTZ_UI_CASES_ALL_URL, + AuthorizationConstants.AUTZ_UI_CASES_URL, + AuthorizationConstants.AUTZ_UI_CASE_URL, + AuthorizationConstants.AUTZ_UI_WORK_ITEMS_ALL_URL, + AuthorizationConstants.AUTZ_GUI_ALL_URL, + AuthorizationConstants.AUTZ_UI_CASES_VIEW_URL, AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL); + } + }; MainMenuItem item = new MainMenuItem(GuiStyleConstants.EVO_CASE_OBJECT_ICON, - createStringResource("PageAdmin.menu.top.cases"), null) { + createStringResource("PageAdmin.menu.top.cases"), null, null, visibleEnableBehaviour) { private static final long serialVersionUID = 1L; @@ -1933,8 +1899,16 @@ public String getBubbleLabel() { } private MainMenuItem createServerTasksItems() { + VisibleEnableBehaviour visibleEnableBehaviour = new VisibleEnableBehaviour() { + @Override + public boolean isVisible() { + return WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_TASKS_URL, + AuthorizationConstants.AUTZ_UI_TASKS_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, + AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL); + } + }; MainMenuItem item = new MainMenuItem(GuiStyleConstants.CLASS_OBJECT_TASK_ICON_COLORED, - createStringResource("PageAdmin.menu.top.serverTasks"), null); + createStringResource("PageAdmin.menu.top.serverTasks"), null, null, visibleEnableBehaviour); addObjectListPageMenuItem(item, "PageAdmin.menu.top.serverTasks.list", GuiStyleConstants.CLASS_SHADOW_ICON_GENERIC, PageTasks.class); @@ -1954,8 +1928,17 @@ private MainMenuItem createServerTasksItems() { } private MainMenuItem createResourcesItems() { + VisibleEnableBehaviour visibleEnableBehaviour = new VisibleEnableBehaviour() { + @Override + public boolean isVisible() { + return WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_RESOURCES_URL, + AuthorizationConstants.AUTZ_UI_RESOURCES_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, + AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL, AuthorizationConstants.AUTZ_UI_RESOURCE_URL, + AuthorizationConstants.AUTZ_UI_RESOURCE_EDIT_URL, AuthorizationConstants.AUTZ_UI_RESOURCES_VIEW_URL); + } + }; MainMenuItem item = new MainMenuItem(GuiStyleConstants.CLASS_OBJECT_RESOURCE_ICON_COLORED, - createStringResource("PageAdmin.menu.top.resources"), null); + createStringResource("PageAdmin.menu.top.resources"), null, null, visibleEnableBehaviour); if (WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_RESOURCES_URL, AuthorizationConstants.AUTZ_UI_RESOURCES_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL)) { @@ -1976,8 +1959,15 @@ private MainMenuItem createResourcesItems() { } private MainMenuItem createReportsItems() { + VisibleEnableBehaviour visibleEnableBehaviour = new VisibleEnableBehaviour() { + @Override + public boolean isVisible() { + return WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_REPORTS_URL, + AuthorizationConstants.AUTZ_UI_REPORTS_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL); + } + }; MainMenuItem item = new MainMenuItem("fa fa-pie-chart", createStringResource("PageAdmin.menu.top.reports"), - null); + null, null, visibleEnableBehaviour); addMenuItem(item, "PageAdmin.menu.top.reports.list", PageReports.class); @@ -1996,8 +1986,19 @@ private MainMenuItem createReportsItems() { } private MainMenuItem createCertificationItems() { + VisibleEnableBehaviour visibleEnableBehaviour = new VisibleEnableBehaviour() { + @Override + public boolean isVisible() { + return WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_CERTIFICATION_ALL_URL, + AuthorizationConstants.AUTZ_UI_CERTIFICATION_DEFINITIONS_URL, + AuthorizationConstants.AUTZ_UI_CERTIFICATION_NEW_DEFINITION_URL, + AuthorizationConstants.AUTZ_UI_CERTIFICATION_CAMPAIGNS_URL, + AuthorizationConstants.AUTZ_UI_CERTIFICATION_DECISIONS_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, + AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL); + } + }; MainMenuItem item = new MainMenuItem("fa fa-certificate", - createStringResource("PageAdmin.menu.top.certification"), null) { + createStringResource("PageAdmin.menu.top.certification"), null, null, visibleEnableBehaviour) { private static final long serialVersionUID = 1L; @@ -2081,8 +2082,16 @@ private void createAdditionalMenu(SideBarMenuItem menu) { } private MainMenuItem createHomeItems() { + VisibleEnableBehaviour visibleEnableBehaviour = new VisibleEnableBehaviour() { + @Override + public boolean isVisible() { + return WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_DASHBOARD_URL, + AuthorizationConstants.AUTZ_UI_HOME_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, + AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL); + } + }; MainMenuItem item = new MainMenuItem(GuiStyleConstants.CLASS_DASHBOARD_ICON, - createStringResource("PageAdmin.menu.dashboard"), null); + createStringResource("PageAdmin.menu.dashboard"), null, null, visibleEnableBehaviour); addMenuItem(item, "PageAdmin.menu.dashboard.info", PageDashboardInfo.class); @@ -2115,8 +2124,16 @@ protected boolean isMenuActive() { } private MainMenuItem createUsersItems() { + VisibleEnableBehaviour visibleEnableBehaviour = new VisibleEnableBehaviour() { + @Override + public boolean isVisible() { + return WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_USERS_URL, + AuthorizationConstants.AUTZ_UI_USERS_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, + AuthorizationConstants.AUTZ_UI_USERS_VIEW_URL, AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL); + } + }; MainMenuItem item = new MainMenuItem(GuiStyleConstants.CLASS_OBJECT_USER_ICON_COLORED, - createStringResource("PageAdmin.menu.top.users"), null); + createStringResource("PageAdmin.menu.top.users"), null, null, visibleEnableBehaviour); if (WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_USERS_URL, AuthorizationConstants.AUTZ_UI_USERS_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL)) { @@ -2238,8 +2255,16 @@ public boolean isVisible() { } private MainMenuItem createOrganizationsMenu() { + VisibleEnableBehaviour visibleEnableBehaviour = new VisibleEnableBehaviour() { + @Override + public boolean isVisible() { + return WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_ORG_STRUCT_URL, + AuthorizationConstants.AUTZ_UI_ORG_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, + AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL); + } + }; MainMenuItem item = new MainMenuItem(GuiStyleConstants.CLASS_OBJECT_ORG_ICON_COLORED, - createStringResource("PageAdmin.menu.top.users.org"), null); + createStringResource("PageAdmin.menu.top.users.org"), null, null, visibleEnableBehaviour); MenuItem orgTree = new MenuItem(createStringResource("PageAdmin.menu.top.users.org.tree"), GuiStyleConstants.CLASS_OBJECT_ORG_ICON, PageOrgTree.class); @@ -2254,8 +2279,16 @@ private MainMenuItem createOrganizationsMenu() { } private MainMenuItem createRolesItems() { + VisibleEnableBehaviour visibleEnableBehaviour = new VisibleEnableBehaviour() { + @Override + public boolean isVisible() { + return WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_ROLES_URL, + AuthorizationConstants.AUTZ_UI_ROLES_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, + AuthorizationConstants.AUTZ_UI_ROLES_VIEW_URL, AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL); + } + }; MainMenuItem item = new MainMenuItem(GuiStyleConstants.CLASS_OBJECT_ROLE_ICON_COLORED, - createStringResource("PageAdmin.menu.top.roles"), null); + createStringResource("PageAdmin.menu.top.roles"), null, null, visibleEnableBehaviour); if (WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_ROLES_URL, AuthorizationConstants.AUTZ_UI_ROLES_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL)) { @@ -2274,8 +2307,16 @@ private MainMenuItem createRolesItems() { } private MainMenuItem createServicesItems() { + VisibleEnableBehaviour visibleEnableBehaviour = new VisibleEnableBehaviour() { + @Override + public boolean isVisible() { + return WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_SERVICES_URL, + AuthorizationConstants.AUTZ_UI_SERVICES_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, + AuthorizationConstants.AUTZ_UI_SERVICES_VIEW_URL, AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL); + } + }; MainMenuItem item = new MainMenuItem(GuiStyleConstants.CLASS_OBJECT_SERVICE_ICON_COLORED, - createStringResource("PageAdmin.menu.top.services"), null); + createStringResource("PageAdmin.menu.top.services"), null, null, visibleEnableBehaviour); if (WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_SERVICES_URL, AuthorizationConstants.AUTZ_UI_SERVICES_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL)) { @@ -2292,8 +2333,17 @@ private MainMenuItem createServicesItems() { } private MainMenuItem createArchetypesItems() { + VisibleEnableBehaviour visibleEnableBehaviour = new VisibleEnableBehaviour() { + @Override + public boolean isVisible() { + return WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_CONFIGURATION_URL, + AuthorizationConstants.AUTZ_UI_CONFIGURATION_ALL_URL,AuthorizationConstants.AUTZ_UI_ARCHETYPES_URL, + AuthorizationConstants.AUTZ_UI_ARCHETYPES_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, + AuthorizationConstants.AUTZ_UI_ARCHETYPES_VIEW_URL); + } + }; MainMenuItem item = new MainMenuItem(GuiStyleConstants.EVO_ARCHETYPE_TYPE_ICON, - createStringResource("PageAdmin.menu.top.archetypes"), null); + createStringResource("PageAdmin.menu.top.archetypes"), null, null, visibleEnableBehaviour); if (WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_ARCHETYPES_URL, AuthorizationConstants.AUTZ_UI_ARCHETYPES_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL)) { addObjectListPageMenuItem(item, "PageAdmin.menu.top.archetypes.list", GuiStyleConstants.EVO_ARCHETYPE_TYPE_ICON, PageArchetypes.class); @@ -2309,6 +2359,27 @@ private MainMenuItem createArchetypesItems() { return item; } + private MainMenuItem createObjectsCollectionItems() { + VisibleEnableBehaviour visibleEnableBehaviour = new VisibleEnableBehaviour() { + @Override + public boolean isVisible() { + return WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_CONFIGURATION_URL, + AuthorizationConstants.AUTZ_UI_CONFIGURATION_ALL_URL,AuthorizationConstants.AUTZ_UI_OBJECT_COLLECTIONS_URL, + AuthorizationConstants.AUTZ_UI_OBJECT_COLLECTIONS_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL); + } + }; + MainMenuItem item = new MainMenuItem(GuiStyleConstants.CLASS_OBJECT_COLLECTION_CAMPAIGN_ICON, + createStringResource("PageAdmin.menu.top.objectCollections"), null, null, visibleEnableBehaviour); + if (WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_OBJECT_COLLECTIONS_URL, + AuthorizationConstants.AUTZ_UI_OBJECT_COLLECTIONS_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL)) { + addObjectListPageMenuItem(item, "PageAdmin.menu.top.objectCollections.list", GuiStyleConstants.CLASS_OBJECT_COLLECTION_CAMPAIGN_ICON, PageObjectCollections.class); + } + createFocusPageNewEditMenu(item.getItems(), "PageAdmin.menu.top.objectCollections.new", "PageAdmin.menu.top.objectCollections.edit", + PageObjectCollection.class, true); + + return item; + } + private void addObjectListPageMenuItem(MainMenuItem item, String key, String iconClass, Class menuItemPage){ MenuItem menu = new MenuItem(createStringResource(key), iconClass, menuItemPage){ @Override 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 4d344481e34..f8eadb9d01f 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 @@ -1783,6 +1783,8 @@ public static String createDefaultIcon(PrismObject obj return createResourceIcon((PrismObject) object); } else if (type == ShadowType.class) { return createShadowIcon((PrismObject) object); + } else if (type == ObjectCollectionType.class) { + return createObjectColletionIcon(); } return ""; @@ -2096,6 +2098,10 @@ public static String createShadowIcon(PrismObject object) { return GuiStyleConstants.CLASS_SHADOW_ICON_UNKNOWN; } + public static String createObjectColletionIcon() { + return getObjectNormalIconStyle(GuiStyleConstants.CLASS_OBJECT_COLLECTION_CAMPAIGN_ICON); + } + public static void initNewObjectWithReference(PageBase pageBase, QName type, List newReferences) throws SchemaException { PrismContext prismContext = pageBase.getPrismContext(); PrismObjectDefinition def = prismContext.getSchemaRegistry().findObjectDefinitionByType(type); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/application/DescriptorLoader.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/application/DescriptorLoader.java index 199063681e4..02008d896ea 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/application/DescriptorLoader.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/application/DescriptorLoader.java @@ -53,6 +53,7 @@ public final class DescriptorLoader implements DebugDumpable { "com.evolveum.midpoint.web.page.admin.valuePolicy", "com.evolveum.midpoint.web.page.admin.cases", "com.evolveum.midpoint.web.page.admin.archetype", + "com.evolveum.midpoint.web.page.admin.objectCollection", "com.evolveum.midpoint.web.page.login", "com.evolveum.midpoint.web.page.error", "com.evolveum.midpoint.web.page.forgetpassword", diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/ObjectBasicPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/ObjectBasicPanel.html new file mode 100644 index 00000000000..92d806ec2c7 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/ObjectBasicPanel.html @@ -0,0 +1,19 @@ + + + + + +
+
+
+
+
+
+
+ + diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/ObjectBasicPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/ObjectBasicPanel.java new file mode 100644 index 00000000000..a371df6e18e --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/ObjectBasicPanel.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2018 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.web.component; + +import com.evolveum.midpoint.gui.api.component.BasePanel; +import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; +import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper; +import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettingsBuilder; +import com.evolveum.midpoint.util.exception.SchemaException; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.web.component.prism.ItemVisibility; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; + +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.IModel; + +import javax.xml.namespace.QName; + +/** + * @author skublik + */ +public class ObjectBasicPanel extends BasePanel> { + + private static final long serialVersionUID = 1L; + + private static final Trace LOGGER = TraceManager.getTrace(ObjectBasicPanel.class); + + private static final String ID_BASIC_CONTAINER = "basicObjectContainer"; + + + public ObjectBasicPanel(String id, IModel> model) { + super(id, model); + + setOutputMarkupId(true); + + } + + @Override + protected void onInitialize() { + super.onInitialize(); + + initLayout(); + } + + protected void initLayout() { + try { + ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder().visibilityHandler(this::getBasicTabVisibility); + Panel panel = getPageBase().initItemPanel(ID_BASIC_CONTAINER, getType(), getModel(), builder.build()); + add(panel); + } catch (SchemaException e) { + LOGGER.error("Cannot create basic panel for system configuration."); + getSession().error("Cannot create basic panel for system configuration."); + } + + } + + protected QName getType() { + return ObjectType.COMPLEX_TYPE; + } + + protected ItemVisibility getBasicTabVisibility(ItemWrapper itemWrapper) { + return ItemVisibility.AUTO; + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/ColumnUtils.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/ColumnUtils.java index b010d78dff3..f6b4364c041 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/ColumnUtils.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/ColumnUtils.java @@ -393,6 +393,16 @@ public static List, String>> ge return columns; } + public static List, String>> getDefaultObjectColumns() { + List> columnsDefs = Arrays.asList( + new ColumnTypeDto("ObjectType.description", + null, + SelectableBeanImpl.F_VALUE + ".description", false) + ); + List, String>> columns = createColumns(columnsDefs); + return columns; + } + public static List, String>> getDefaultAbstractRoleColumns(boolean showAccounts) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/archetype/PageArchetype.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/archetype/PageArchetype.java index 0d59d66abad..b2866ed8e1a 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/archetype/PageArchetype.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/archetype/PageArchetype.java @@ -8,6 +8,8 @@ import java.util.List; +import com.evolveum.midpoint.web.page.admin.configuration.PageAdminConfiguration; + import org.apache.wicket.Page; import org.apache.wicket.extensions.markup.html.tabs.ITab; import org.apache.wicket.markup.html.WebMarkupContainer; @@ -37,6 +39,9 @@ url = "/admin/archetype", encoder = OnePageParameterEncoder.class, action = { + @AuthorizationAction(actionUri = PageAdminConfiguration.AUTH_CONFIGURATION_ALL, + label = PageAdminConfiguration.AUTH_CONFIGURATION_ALL_LABEL, + description = PageAdminConfiguration.AUTH_CONFIGURATION_ALL_DESCRIPTION), @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_ARCHETYPES_ALL_URL, label = "PageArchetypes.auth.archetypesAll.label", description = "PageArchetypes.auth.archetypesAll.description"), diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/archetype/PageArchetypes.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/archetype/PageArchetypes.java index 44f0634d53c..eeeca3ffbfd 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/archetype/PageArchetypes.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/archetype/PageArchetypes.java @@ -10,6 +10,8 @@ import java.util.List; import com.evolveum.midpoint.web.component.util.SelectableBean; +import com.evolveum.midpoint.web.page.admin.configuration.PageAdminConfiguration; + import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.request.mapper.parameter.PageParameters; @@ -27,6 +29,9 @@ @PageDescriptor( url = "/admin/archetypes", action = { + @AuthorizationAction(actionUri = PageAdminConfiguration.AUTH_CONFIGURATION_ALL, + label = PageAdminConfiguration.AUTH_CONFIGURATION_ALL_LABEL, + description = PageAdminConfiguration.AUTH_CONFIGURATION_ALL_DESCRIPTION), @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_ARCHETYPES_ALL_URL, label = "PageArchetypes.auth.archetypesAll.label", description = "PageArchetypes.auth.archetypesAll.description"), diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/objectCollection/ObjectCollectionSummaryPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/objectCollection/ObjectCollectionSummaryPanel.java new file mode 100644 index 00000000000..43dc1799c2c --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/objectCollection/ObjectCollectionSummaryPanel.java @@ -0,0 +1,40 @@ +/* + * 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.web.page.admin.objectCollection; + +import com.evolveum.midpoint.gui.api.GuiStyleConstants; +import com.evolveum.midpoint.gui.api.util.ModelServiceLocator; +import com.evolveum.midpoint.web.component.ObjectSummaryPanel; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectCollectionType; + +import org.apache.wicket.model.IModel; + +/** + * @author skublik + */ + +public class ObjectCollectionSummaryPanel extends ObjectSummaryPanel { + + public ObjectCollectionSummaryPanel(String id, IModel model, ModelServiceLocator serviceLocator) { + super(id, ObjectCollectionType.class, model, serviceLocator); + } + + @Override + protected String getIconCssClass() { + return GuiStyleConstants.CLASS_OBJECT_COLLECTION_CAMPAIGN_ICON; + } + + @Override + protected String getIconBoxAdditionalCssClass() { + return "summary-panel-shadow"; + } + + @Override + protected String getBoxAdditionalCssClass() { + return "summary-panel-shadow"; + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/objectCollection/PageObjectCollection.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/objectCollection/PageObjectCollection.html new file mode 100644 index 00000000000..74e7258ed24 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/objectCollection/PageObjectCollection.html @@ -0,0 +1,15 @@ + + + + + + + + + + diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/objectCollection/PageObjectCollection.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/objectCollection/PageObjectCollection.java new file mode 100644 index 00000000000..0b5cdc6eb3f --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/objectCollection/PageObjectCollection.java @@ -0,0 +1,273 @@ +/* + * 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.web.page.admin.objectCollection; + +import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; +import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper; +import com.evolveum.midpoint.gui.impl.prism.panel.SingleContainerPanel; +import com.evolveum.midpoint.prism.Containerable; +import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.prism.path.ItemName; +import com.evolveum.midpoint.prism.path.ItemPath; +import com.evolveum.midpoint.schema.ObjectDeltaOperation; +import com.evolveum.midpoint.schema.result.OperationResult; +import com.evolveum.midpoint.schema.result.OperationResultStatus; +import com.evolveum.midpoint.security.api.AuthorizationConstants; +import com.evolveum.midpoint.task.api.Task; +import com.evolveum.midpoint.util.logging.LoggingUtils; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.web.application.AuthorizationAction; +import com.evolveum.midpoint.web.application.PageDescriptor; +import com.evolveum.midpoint.web.component.ObjectBasicPanel; +import com.evolveum.midpoint.web.component.ObjectSummaryPanel; +import com.evolveum.midpoint.web.component.objectdetails.AbstractObjectMainPanel; +import com.evolveum.midpoint.web.component.prism.ItemVisibility; +import com.evolveum.midpoint.web.component.progress.ProgressPanel; +import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; +import com.evolveum.midpoint.web.model.PrismContainerWrapperModel; +import com.evolveum.midpoint.web.page.admin.PageAdminObjectDetails; +import com.evolveum.midpoint.web.page.admin.configuration.PageAdminConfiguration; +import com.evolveum.midpoint.web.util.OnePageParameterEncoder; +import com.evolveum.midpoint.xml.ns._public.common.common_3.*; + +import org.apache.wicket.Page; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.extensions.markup.html.tabs.AbstractTab; +import org.apache.wicket.extensions.markup.html.tabs.ITab; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.model.IModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +import javax.xml.namespace.QName; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.TimeUnit; + +/** + * @author skublik + */ +@PageDescriptor( + url = "/admin/objectCollection", + encoder = OnePageParameterEncoder.class, + action = { + @AuthorizationAction(actionUri = PageAdminConfiguration.AUTH_CONFIGURATION_ALL, + label = PageAdminConfiguration.AUTH_CONFIGURATION_ALL_LABEL, + description = PageAdminConfiguration.AUTH_CONFIGURATION_ALL_DESCRIPTION), + @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_OBJECT_COLLECTIONS_ALL_URL, + label = "PageObjectCollection.auth.objectCollectionsAll.label", + description = "PageObjectCollection.auth.objectCollectionsAll.description"), + @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_OBJECT_COLLECTION_URL, + label = "PageObjectCollection.auth.objectCollection.label", + description = "PageObjectCollection.auth.objectCollection.description") + }) +public class PageObjectCollection extends PageAdminObjectDetails { + + private static final Trace LOGGER = TraceManager.getTrace(PageObjectCollection.class); + + public PageObjectCollection() { + initialize(null); + } + + public PageObjectCollection(PageParameters parameters) { + getPageParameters().overwriteWith(parameters); + initialize(null); + } + + public PageObjectCollection(final PrismObject userToEdit) { + initialize(userToEdit); + } + + public PageObjectCollection(final PrismObject unitToEdit, boolean isNewObject) { + initialize(unitToEdit, isNewObject); + } + + public PageObjectCollection(final PrismObject unitToEdit, boolean isNewObject, boolean isReadonly) { + initialize(unitToEdit, isNewObject, isReadonly); + } + + @Override + public Class getCompileTimeClass() { + return ObjectCollectionType.class; + } + + @Override + protected ObjectCollectionType createNewObject() { + return new ObjectCollectionType(getPrismContext()); + } + + @Override + protected ObjectSummaryPanel createSummaryPanel(IModel summaryModel) { + return new ObjectCollectionSummaryPanel(ID_SUMMARY_PANEL, summaryModel, this); + } + + @Override + protected Class getRestartResponsePage() { + return PageObjectCollection.class; + } + + @Override + public void continueEditing(AjaxRequestTarget target) { + } + + private List getTabs(){ + List tabs = new ArrayList<>(); + tabs.add(new AbstractTab(createStringResource("pageObjectCollection.basic.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + return new ObjectBasicPanel(panelId, getObjectModel()){ + @Override + protected QName getType() { + return ObjectCollectionType.COMPLEX_TYPE; + } + + @Override + protected ItemVisibility getBasicTabVisibility(ItemWrapper itemWrapper) { + if(itemWrapper.getPath().isSubPathOrEquivalent(ItemPath.create(ItemPath.EMPTY_PATH, ObjectCollectionType.F_SUBTYPE)) + || itemWrapper.getPath().isSubPathOrEquivalent(ItemPath.create(ItemPath.EMPTY_PATH, ObjectCollectionType.F_DIAGNOSTIC_INFORMATION)) + || itemWrapper.getPath().isSubPathOrEquivalent(ItemPath.create(ItemPath.EMPTY_PATH, ObjectCollectionType.F_LIFECYCLE_STATE))) { + return ItemVisibility.HIDDEN; + } + return ItemVisibility.AUTO; + } + }; + } + }); + + tabs.add(new AbstractTab(createStringResource("pageObjectCollection.baseCollection.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + return createContainerPanel(panelId, getObjectModel(), ObjectCollectionType.F_BASE_COLLECTION, CollectionRefSpecificationType.COMPLEX_TYPE); + } + }); + + tabs.add(new AbstractTab(createStringResource("pageObjectCollection.defaultView.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + return createContainerPanel(panelId, getObjectModel(), ObjectCollectionType.F_DEFAULT_VIEW, GuiObjectListViewType.COMPLEX_TYPE); + } + }); + +// tabs.add(new AbstractTab(createStringResource("pageObjectCollection.auditSearch.title")) { +// +// private static final long serialVersionUID = 1L; +// +// @Override +// public WebMarkupContainer getPanel(String panelId) { +// return createContainerPanel(panelId, getObjectModel(), ObjectCollectionType.F_AUDIT_SEARCH, AuditSearchType.COMPLEX_TYPE); +// } +// }); + + tabs.add(new AbstractTab(createStringResource("pageObjectCollection.domain.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + return createContainerPanel(panelId, getObjectModel(), ObjectCollectionType.F_DOMAIN, CollectionRefSpecificationType.COMPLEX_TYPE); + } + }); + + tabs.add(new AbstractTab(createStringResource("pageObjectCollection.option.title")) { + + private static final long serialVersionUID = 1L; + + @Override + public WebMarkupContainer getPanel(String panelId) { + return createContainerPanel(panelId, getObjectModel(), ObjectCollectionType.F_GET_OPTIONS, SelectorQualifiedGetOptionsType.COMPLEX_TYPE); + } + }); + return tabs; + } + + private SingleContainerPanel createContainerPanel(String panelId, IModel> objectModel, ItemName propertyName, QName propertyType) { + return new SingleContainerPanel(panelId, createModel(objectModel, propertyName), propertyType); + } + + private PrismContainerWrapperModel createModel(IModel> model, ItemName itemName) { + return PrismContainerWrapperModel.fromContainerWrapper(model, itemName); + } + + @Override + public void finishProcessing(AjaxRequestTarget target, Collection> executedDeltas, boolean returningFromAsync, OperationResult result) { + if (!isKeepDisplayingResults()) { + showResult(result); + redirectBack(); + } + } + + @Override + protected AbstractObjectMainPanel createMainPanel(String id) { + return new AbstractObjectMainPanel(id, getObjectModel(), this) { + + private static final long serialVersionUID = 1L; + + @Override + protected List createTabs(PageAdminObjectDetails parentPage) { + return getTabs(); + } + + @Override + protected boolean getOptionsPanelVisibility() { + return false; + } + + @Override + protected boolean isPreviewButtonVisible() { + return false; + } + }; + } + + @Override + protected void setSummaryPanelVisibility(ObjectSummaryPanel summaryPanel) { + summaryPanel.add(new VisibleEnableBehaviour() { + private static final long serialVersionUID = 1L; + + @Override + public boolean isVisible() { + return true; + } + }); + } + + @Override + public void saveOrPreviewPerformed(AjaxRequestTarget target, OperationResult result, boolean previewOnly) { + + ProgressPanel progressPanel = getProgressPanel(); + progressPanel.hide(); + Task task = createSimpleTask(OPERATION_SEND_TO_SUBMIT); + super.saveOrPreviewPerformed(target, result, previewOnly, task); + + try { + TimeUnit.SECONDS.sleep(1); + while(task.isClosed()) {TimeUnit.SECONDS.sleep(1);} + } catch ( InterruptedException ex) { + result.recomputeStatus(); + result.recordFatalError(getString("PageSystemConfiguration.message.saveOrPreviewPerformed.fatalError"), ex); + + LoggingUtils.logUnexpectedException(LOGGER, "Couldn't use sleep", ex); + } + result.recomputeStatus(); + target.add(getFeedbackPanel()); + + if(result.getStatus().equals(OperationResultStatus.SUCCESS)) { + showResult(result); + redirectBack(); + } + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/objectCollection/PageObjectCollections.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/objectCollection/PageObjectCollections.java new file mode 100644 index 00000000000..096c08b606d --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/objectCollection/PageObjectCollections.java @@ -0,0 +1,81 @@ +/* + * 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.web.page.admin.objectCollection; + +import com.evolveum.midpoint.security.api.AuthorizationConstants; +import com.evolveum.midpoint.web.application.AuthorizationAction; +import com.evolveum.midpoint.web.application.PageDescriptor; +import com.evolveum.midpoint.web.component.data.column.ColumnUtils; +import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem; +import com.evolveum.midpoint.web.component.util.SelectableBean; +import com.evolveum.midpoint.web.page.admin.PageAdminObjectList; +import com.evolveum.midpoint.web.page.admin.configuration.PageAdminConfiguration; +import com.evolveum.midpoint.web.session.UserProfileStorage; +import com.evolveum.midpoint.web.util.OnePageParameterEncoder; + +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectCollectionType; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author skublik + */ +@PageDescriptor( + url = "/admin/objectCollections", action = { + @AuthorizationAction(actionUri = PageAdminConfiguration.AUTH_CONFIGURATION_ALL, + label = PageAdminConfiguration.AUTH_CONFIGURATION_ALL_LABEL, + description = PageAdminConfiguration.AUTH_CONFIGURATION_ALL_DESCRIPTION), + @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_OBJECT_COLLECTIONS_ALL_URL, + label = "PageObjectCollections.auth.objectCollectionAll.label", + description = "PageObjectCollections.auth.objectCollectionAll.description"), + @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_OBJECT_COLLECTIONS_URL, + label = "PageObjectCollections.auth.objectsCollection.label", + description = "PageObjectCollections.auth.objectsCollection.description") +}) +public class PageObjectCollections extends PageAdminObjectList { + + private static final long serialVersionUID = 1L; + + public PageObjectCollections() { + super(); + } + + @Override + protected void objectDetailsPerformed(AjaxRequestTarget target, ObjectCollectionType collection) { + PageParameters pageParameters = new PageParameters(); + pageParameters.add(OnePageParameterEncoder.PARAMETER, collection.getOid()); + navigateToNext(PageObjectCollection.class, pageParameters); + } + + @Override + protected Class getType() { + return ObjectCollectionType.class; + } + + @Override + protected List, String>> initColumns() { + + return ColumnUtils.getDefaultObjectColumns(); + } + + @Override + protected List createRowActions() { + List menu = new ArrayList<>(); + return menu; + } + + @Override + protected UserProfileStorage.TableId getTableId() { + return UserProfileStorage.TableId.TABLE_OBJECTS_COLLECTION; + } + +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/UserProfileStorage.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/UserProfileStorage.java index 8b984c1f209..c4c3404b784 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/UserProfileStorage.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/UserProfileStorage.java @@ -42,6 +42,7 @@ public enum TableId { TABLE_TASKS, TABLE_SUBTASKS, TABLE_WORKERS, + TABLE_OBJECTS_COLLECTION, ROLE_MEMEBER_PANEL, ORG_MEMEBER_PANEL, ARCHETYPE_MEMEBER_PANEL, diff --git a/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd b/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd index 69075b0d9fe..49d9fb19493 100755 --- a/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd +++ b/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd @@ -17051,6 +17051,9 @@ Type of objects that belong to this collection. + + ObjectCollectionType.type + @@ -17058,9 +17061,12 @@ Filter that is used to select objects which belong to this collection. + + ObjectCollectionType.filter + - + Options to use when executing the search. @@ -17068,6 +17074,7 @@ 4.2 true + ObjectCollectionType.getOptions @@ -17080,6 +17087,7 @@ 4.2 true + ObjectCollectionType.condition @@ -17098,7 +17106,7 @@ If that happens, don't come to us crying. You have been warned. - DashboardWidgetDataType.auditSearch + ObjectCollectionType.auditSearch true @@ -17120,6 +17128,7 @@ 4.0 + ObjectCollectionType.baseCollection @@ -17141,6 +17150,7 @@ 4.0 + ObjectCollectionType.domain @@ -17162,6 +17172,7 @@ 4.0 true + ObjectCollectionType.defaultView @@ -17170,6 +17181,7 @@ 4.0 true + ObjectCollectionType.stats @@ -17520,6 +17532,9 @@ TODO + + AuditSearchType.recordQuery + @@ -17527,6 +17542,9 @@ TODO + + AuditSearchType.domainQuery + @@ -17534,6 +17552,9 @@ TODO + + AuditSearchType.interval + @@ -21991,9 +22012,18 @@ Selector-qualified options for a get-like operation. + + true + - + + + + SelectorQualifiedGetOptionsType.option + + + @@ -22002,10 +22032,25 @@ TODO + + true + - - + + + + SelectorQualifiedGetOptionType.selector + + + + + + + SelectorQualifiedGetOptionType.options + + + @@ -22014,9 +22059,18 @@ TODO + + true + - + + + + OptionObjectSelectorType.path + + + @@ -22025,21 +22079,96 @@ See GetOperationOptions for a description. + + true + - - - - - - - - + + + + GetOperationOptionsType.retrieve + + + + + + + GetOperationOptionsType.resolve + + + + + + + GetOperationOptionsType.resolveNames + + + + + + + GetOperationOptionsType.noFetch + + + + + + + GetOperationOptionsType.raw + + + + + + + GetOperationOptionsType.tolerateRawData + + + + + + + GetOperationOptionsType.noDiscovery + + + + - - - - + + + GetOperationOptionsType.allowNotFound + + + + + + + GetOperationOptionsType.pointInTimeType + + + + + + + GetOperationOptionsType.staleness + + + + + + + GetOperationOptionsType.distinct + + + + + + + GetOperationOptionsType.definitionProcessing + + + diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/CollectionProcessor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/CollectionProcessor.java index 405bf8812c5..9f2e73542b1 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/CollectionProcessor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/CollectionProcessor.java @@ -337,7 +337,7 @@ private void compileObjectCollectionView(CompiledObjectCollectionView existingVi CollectionRefSpecificationType baseCollectionSpec = objectCollectionType.getBaseCollection(); if (baseCollectionSpec == null) { existingView.setFilter(collectionFilter); - existingView.setOptions(MiscSchemaUtil.optionsTypeToOptions(objectCollectionType.getSelectorOptions(), prismContext)); + existingView.setOptions(MiscSchemaUtil.optionsTypeToOptions(objectCollectionType.getGetOptions(), prismContext)); } else { compileObjectCollectionView(existingView, baseCollectionSpec, targetTypeClass, task, result); ObjectFilter baseFilter = existingView.getFilter(); diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/DashboardServiceImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/DashboardServiceImpl.java index 93734ae83df..63213773781 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/DashboardServiceImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/DashboardServiceImpl.java @@ -405,8 +405,8 @@ public List> searchObjectFromCollection(CollectionRefSpe type = (Class) prismContext.getSchemaRegistry() .getCompileTimeClassForObjectType(collection.getType()); searchFilter = collection.getFilter(); - if (collection.getSelectorOptions() != null) { - options = MiscSchemaUtil.optionsTypeToOptions(collection.getSelectorOptions(), prismContext); + if (collection.getGetOptions() != null) { + options = MiscSchemaUtil.optionsTypeToOptions(collection.getGetOptions(), prismContext); } if (collection.getCondition() != null) { condition = collection.getCondition(); @@ -425,8 +425,8 @@ public List> searchObjectFromCollection(CollectionRefSpe searchFilterForMerge = collection.getFilter(); typeFromBaseCollection = (Class) prismContext.getSchemaRegistry() .getCompileTimeClassForObjectType(collection.getType()); - if (collection.getSelectorOptions() != null) { - options = MiscSchemaUtil.optionsTypeToOptions(collection.getSelectorOptions(), prismContext); + if (collection.getGetOptions() != null) { + options = MiscSchemaUtil.optionsTypeToOptions(collection.getGetOptions(), prismContext); } if (collection.getCondition() != null) { condition = collection.getCondition(); diff --git a/repo/security-api/src/main/java/com/evolveum/midpoint/security/api/AuthorizationConstants.java b/repo/security-api/src/main/java/com/evolveum/midpoint/security/api/AuthorizationConstants.java index e62d6f4193c..43a95ee63bc 100644 --- a/repo/security-api/src/main/java/com/evolveum/midpoint/security/api/AuthorizationConstants.java +++ b/repo/security-api/src/main/java/com/evolveum/midpoint/security/api/AuthorizationConstants.java @@ -152,6 +152,15 @@ public class AuthorizationConstants { public static final QName AUTZ_UI_ARCHETYPE_QNAME = new QName(NS_AUTHORIZATION_UI, "archetype"); public static final String AUTZ_UI_ARCHETYPE_URL = NS_AUTHORIZATION_UI + "#archetype"; + public static final QName AUTZ_UI_OBJECT_COLLECTIONS_ALL_QNAME = new QName(NS_AUTHORIZATION_UI, "objectCollectionsAll"); + public static final String AUTZ_UI_OBJECT_COLLECTIONS_ALL_URL = NS_AUTHORIZATION_UI + "#objectCollectionsAll"; + + public static final QName AUTZ_UI_OBJECT_COLLECTIONS_QNAME = new QName(NS_AUTHORIZATION_UI, "objectCollections"); + public static final String AUTZ_UI_OBJECT_COLLECTIONS_URL = NS_AUTHORIZATION_UI + "#objectCollections"; + + public static final QName AUTZ_UI_OBJECT_COLLECTION_QNAME = new QName(NS_AUTHORIZATION_UI, "objectCollection"); + public static final String AUTZ_UI_OBJECT_COLLECTION_URL = NS_AUTHORIZATION_UI + "#objectCollection"; + public static final QName AUTZ_UI_VALUE_POLICIES_ALL_QNAME = new QName(NS_AUTHORIZATION_UI, "valuePoliciesAll"); public static final String AUTZ_UI_VALUE_POLICIES_ALL_URL = NS_AUTHORIZATION_UI + "#valuePoliciesAll";