diff --git a/build-system/pom.xml b/build-system/pom.xml index aaf561f3b18..057e40f7977 100644 --- a/build-system/pom.xml +++ b/build-system/pom.xml @@ -83,7 +83,7 @@ 5.22.0 1.3 2.0.6 - 1.4.3.41 + 1.4.3.43 6.5.0 10.11.1.1 1.8.0 diff --git a/dist/pom.xml b/dist/pom.xml index b26b4124a33..066b2adbfa8 100644 --- a/dist/pom.xml +++ b/dist/pom.xml @@ -53,6 +53,7 @@ admin-gui 3.9-SNAPSHOT war + executable com.evolveum.midpoint.tools diff --git a/gui/admin-gui/pom.xml b/gui/admin-gui/pom.xml index 559156372b3..973bf361966 100644 --- a/gui/admin-gui/pom.xml +++ b/gui/admin-gui/pom.xml @@ -104,35 +104,6 @@ - - - org.springframework.boot - spring-boot-maven-plugin - ${spring.boot.version} - - true - false - -Dserver.port=${server.port} -Dmidpoint.home=${midpoint.home} -Dmidpoint.schrodinger=${midpoint.schrodinger} -Djavax.net.ssl.trustStore=${javax.net.ssl.trustStore} -Djavax.net.ssl.trustStoreType=${javax.net.ssl.trustStoreType} - - - - - repackage - - - - - - - - - com.evolveum.midpoint - midpoint-war-layout - ${project.version} - - - - @@ -220,6 +191,16 @@ 2.5.3 runtime + + org.springframework.security + spring-security-cas + ${spring.security.version} + + + org.jasig.cas.client + cas-client-core + 3.5.0 + org.webjars webjars-locator-core @@ -901,13 +882,52 @@ 3.9-SNAPSHOT + - tomcat + executable true + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring.boot.version} + + true + false + -Dserver.port=${server.port} -Dmidpoint.home=${midpoint.home} -Dmidpoint.schrodinger=${midpoint.schrodinger} -Djavax.net.ssl.trustStore=${javax.net.ssl.trustStore} -Djavax.net.ssl.trustStoreType=${javax.net.ssl.trustStoreType} + + + + + repackage + + + executable + + + + + + + com.evolveum.midpoint + midpoint-war-layout + ${project.version} + + + + + + + + tomcat + + true + jaxb-impl @@ -924,8 +944,8 @@ runtime - + ide diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.java index 3cad146539e..74413e5f017 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.java @@ -22,6 +22,7 @@ import com.evolveum.midpoint.web.component.AjaxButton; import com.evolveum.midpoint.web.component.TabbedPanel; import com.evolveum.midpoint.web.component.dialog.Popupable; +import com.evolveum.midpoint.web.component.util.VisibleBehaviour; import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.apache.wicket.Component; @@ -118,13 +119,11 @@ public boolean isEnabled(){ form.add(addButton); } - private List createAssignmentTabs() { + protected List createAssignmentTabs() { List tabs = new ArrayList<>(); - //TODO check authorization for each tab - VisibleEnableBehaviour authorization = new VisibleEnableBehaviour(){ - }; - tabs.add(new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.ROLE"), authorization) { + tabs.add(new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.ROLE"), + new VisibleBehaviour(() -> isTabVisible(ObjectTypes.ROLE))) { private static final long serialVersionUID = 1L; @@ -152,7 +151,8 @@ public String getCount() { }); tabs.add( - new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.ORG"), authorization) { + new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.ORG"), + new VisibleBehaviour(() -> isTabVisible(ObjectTypes.ORG))) { private static final long serialVersionUID = 1L; @@ -186,7 +186,8 @@ public String getCount() { }); - tabs.add(new CountablePanelTab(createStringResource("TypedAssignablePanel.orgTreeView"), authorization) { + tabs.add(new CountablePanelTab(createStringResource("TypedAssignablePanel.orgTreeView"), + new VisibleBehaviour(() -> isTabVisible(ObjectTypes.ORG))) { private static final long serialVersionUID = 1L; @@ -214,7 +215,8 @@ public String getCount() { }); tabs.add( - new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.SERVICE"), authorization) { + new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.SERVICE"), + new VisibleBehaviour(() -> isTabVisible(ObjectTypes.SERVICE))) { private static final long serialVersionUID = 1L; @@ -243,7 +245,8 @@ public String getCount() { }); tabs.add( - new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.RESOURCE"), authorization) { + new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.RESOURCE"), + new VisibleBehaviour(() -> isTabVisible(ObjectTypes.RESOURCE))) { private static final long serialVersionUID = 1L; @@ -269,6 +272,15 @@ public String getCount() { return tabs; } + private boolean isTabVisible(ObjectTypes objectType){ + List availableObjectTypesList = getAvailableObjectTypesList(); + return availableObjectTypesList == null || availableObjectTypesList.size() == 0 || availableObjectTypesList.contains(objectType); + } + + protected List getAvailableObjectTypesList(){ + return WebComponentUtil.createAssignableTypesList(); + } + private int getTabPanelSelectedCount(WebMarkupContainer panel){ if (panel != null && panel instanceof AbstractAssignmentPopupTabPanel){ return ((AbstractAssignmentPopupTabPanel) panel).getSelectedObjectsList().size(); 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 8369eeacc73..e1b8a90d077 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 @@ -30,7 +30,6 @@ import com.evolveum.midpoint.gui.api.util.ModelServiceLocator; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; -import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.SystemConfigPanelNew; import com.evolveum.midpoint.model.api.*; import com.evolveum.midpoint.model.api.expr.MidpointFunctions; import com.evolveum.midpoint.model.api.validator.ResourceValidator; @@ -1539,18 +1538,6 @@ protected List createMenuItems() { return menus; } -// private MainMenuItem createSystemConfigurationItems() { -// MainMenuItem item = new MainMenuItem(GuiStyleConstants.CLASS_SYSTEM_CONFIGURATION_ICON_COLORED, -// createStringResource("PageAdmin.menu.top.configuration.basic.new"), PageSystemConfigurationNew.class); -// -// addMenuItem(item, "PageAdmin.menu.top.configuration.basic", SystemConfigPanelNew.class); -// addMenuItem(item, "PageAdmin.menu.top.configuration.objectPolicy", PageUsers.class); -// addMenuItem(item, "PageAdmin.menu.top.users.list", PageUsers.class); -// -// addUsersViewMenuItems(item.getItems()); -// -// return item; -// } private void createConfigurationMenu(SideBarMenuItem item) { addMainMenuItem(item, "fa fa-bullseye", "PageAdmin.menu.top.configuration.bulkActions", PageBulkAction.class); @@ -1564,53 +1551,40 @@ 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.new", null); + MainMenuItem systemItemNew = addMainMenuItem(item, "fa fa-cog", "PageAdmin.menu.top.configuration.basic", null); - addSystemMenuItemNew(systemItemNew, "PageAdmin.menu.top.configuration.basic", - PageSystemConfigurationNew.CONFIGURATION_TAB_BASIC); - addSystemMenuItemNew(systemItemNew, "PageAdmin.menu.top.configuration.objectPolicy", - PageSystemConfigurationNew.CONFIGURATION_TAB_OBJECT_POLICY); - addSystemMenuItemNew(systemItemNew, "PageAdmin.menu.top.configuration.globalPolicyRule", - PageSystemConfigurationNew.CONFIGURATION_TAB_GLOBAL_POLICY_RULE); - addSystemMenuItemNew(systemItemNew, "PageAdmin.menu.top.configuration.globalAccountSynchronization", - PageSystemConfigurationNew.CONFIGURATION_TAB_GLOBAL_ACCOUNT_SYNCHRONIZATION); - addSystemMenuItemNew(systemItemNew, "PageAdmin.menu.top.configuration.cleanupPolicy", - PageSystemConfigurationNew.CONFIGURATION_TAB_CLEANUP_POLICY); - addSystemMenuItemNew(systemItemNew, "PageAdmin.menu.top.configuration.notifications", - PageSystemConfigurationNew.CONFIGURATION_TAB_NOTIFICATION); - addSystemMenuItemNew(systemItemNew, "PageAdmin.menu.top.configuration.logging", - PageSystemConfigurationNew.CONFIGURATION_TAB_LOGGING); - addSystemMenuItemNew(systemItemNew, "PageAdmin.menu.top.configuration.profiling", - PageSystemConfigurationNew.CONFIGURATION_TAB_PROFILING); - addSystemMenuItemNew(systemItemNew, "PageAdmin.menu.top.configuration.adminGui", - PageSystemConfigurationNew.CONFIGURATION_TAB_ADMIN_GUI); - addSystemMenuItemNew(systemItemNew, "PageAdmin.menu.top.configuration.workflow", - PageSystemConfigurationNew.CONFIGURATION_TAB_WORKFLOW); - addSystemMenuItemNew(systemItemNew, "PageAdmin.menu.top.configuration.roleManagement", - PageSystemConfigurationNew.CONFIGURATION_TAB_ROLE_MANAGEMENT); - addSystemMenuItemNew(systemItemNew, "PageAdmin.menu.top.configuration.internals", - PageSystemConfigurationNew.CONFIGURATION_TAB_INTERNALS); - addSystemMenuItemNew(systemItemNew, "PageAdmin.menu.top.configuration.deploymentInformation", - PageSystemConfigurationNew.CONFIGURATION_TAB_DEPLOYMENT_INFORMATION); - addSystemMenuItemNew(systemItemNew, "PageAdmin.menu.top.configuration.accessCertification", - PageSystemConfigurationNew.CONFIGURATION_TAB_ACCESS_CERTIFICATION); - addSystemMenuItemNew(systemItemNew, "PageAdmin.menu.top.configuration.infrastructure", - PageSystemConfigurationNew.CONFIGURATION_TAB_INFRASTRUCTURE); - addSystemMenuItemNew(systemItemNew, "PageAdmin.menu.top.configuration.fullTextSearch", - PageSystemConfigurationNew.CONFIGURATION_TAB_FULL_TEXT_SEARCH); - - MainMenuItem systemItem = addMainMenuItem(item, "fa fa-cog", "PageAdmin.menu.top.configuration.basic", null); - - addSystemMenuItem(systemItem, "PageAdmin.menu.top.configuration.basic", + addSystemMenuItem(systemItemNew, "PageAdmin.menu.top.configuration.basic", PageSystemConfiguration.CONFIGURATION_TAB_BASIC); - addSystemMenuItem(systemItem, "PageAdmin.menu.top.configuration.notifications", + addSystemMenuItem(systemItemNew, "PageAdmin.menu.top.configuration.objectPolicy", + PageSystemConfiguration.CONFIGURATION_TAB_OBJECT_POLICY); + addSystemMenuItem(systemItemNew, "PageAdmin.menu.top.configuration.globalPolicyRule", + PageSystemConfiguration.CONFIGURATION_TAB_GLOBAL_POLICY_RULE); + addSystemMenuItem(systemItemNew, "PageAdmin.menu.top.configuration.globalAccountSynchronization", + PageSystemConfiguration.CONFIGURATION_TAB_GLOBAL_ACCOUNT_SYNCHRONIZATION); + addSystemMenuItem(systemItemNew, "PageAdmin.menu.top.configuration.cleanupPolicy", + PageSystemConfiguration.CONFIGURATION_TAB_CLEANUP_POLICY); + addSystemMenuItem(systemItemNew, "PageAdmin.menu.top.configuration.notifications", PageSystemConfiguration.CONFIGURATION_TAB_NOTIFICATION); - addSystemMenuItem(systemItem, "PageAdmin.menu.top.configuration.logging", + addSystemMenuItem(systemItemNew, "PageAdmin.menu.top.configuration.logging", PageSystemConfiguration.CONFIGURATION_TAB_LOGGING); - addSystemMenuItem(systemItem, "PageAdmin.menu.top.configuration.profiling", + addSystemMenuItem(systemItemNew, "PageAdmin.menu.top.configuration.profiling", PageSystemConfiguration.CONFIGURATION_TAB_PROFILING); - addSystemMenuItem(systemItem, "PageAdmin.menu.top.configuration.adminGui", + addSystemMenuItem(systemItemNew, "PageAdmin.menu.top.configuration.adminGui", PageSystemConfiguration.CONFIGURATION_TAB_ADMIN_GUI); + addSystemMenuItem(systemItemNew, "PageAdmin.menu.top.configuration.workflow", + PageSystemConfiguration.CONFIGURATION_TAB_WORKFLOW); + addSystemMenuItem(systemItemNew, "PageAdmin.menu.top.configuration.roleManagement", + PageSystemConfiguration.CONFIGURATION_TAB_ROLE_MANAGEMENT); + addSystemMenuItem(systemItemNew, "PageAdmin.menu.top.configuration.internals", + PageSystemConfiguration.CONFIGURATION_TAB_INTERNALS); + addSystemMenuItem(systemItemNew, "PageAdmin.menu.top.configuration.deploymentInformation", + PageSystemConfiguration.CONFIGURATION_TAB_DEPLOYMENT_INFORMATION); + addSystemMenuItem(systemItemNew, "PageAdmin.menu.top.configuration.accessCertification", + PageSystemConfiguration.CONFIGURATION_TAB_ACCESS_CERTIFICATION); + addSystemMenuItem(systemItemNew, "PageAdmin.menu.top.configuration.infrastructure", + 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); @@ -1625,8 +1599,6 @@ private void addSystemMenuItem(MainMenuItem mainItem, String key, int tabIndex) params.add(PageSystemConfiguration.SELECTED_TAB_INDEX, tabIndex); MenuItem menu = new MenuItem(createStringResource(key), PageSystemConfiguration.class, params, null) { - private static final long serialVersionUID = 1L; - @Override public boolean isMenuActive(WebPage page) { if (!PageSystemConfiguration.class.equals(page.getClass())) { @@ -1639,24 +1611,6 @@ public boolean isMenuActive(WebPage page) { }; mainItem.getItems().add(menu); } - - private void addSystemMenuItemNew(MainMenuItem mainItem, String key, int tabIndex) { - PageParameters params = new PageParameters(); - params.add(PageSystemConfigurationNew.SELECTED_TAB_INDEX, tabIndex); - MenuItem menu = new MenuItem(createStringResource(key), PageSystemConfigurationNew.class, params, null) { - - @Override - public boolean isMenuActive(WebPage page) { - if (!PageSystemConfigurationNew.class.equals(page.getClass())) { - return false; - } - - int index = getSelectedTabForNewConfiguration(page); - return tabIndex == index ? true : false; - } - }; - mainItem.getItems().add(menu); - } private MainMenuItem addMainMenuItem(SideBarMenuItem item, String icon, String key, Class page) { MainMenuItem mainItem = new MainMenuItem(icon, createStringResource(key), page); @@ -1808,17 +1762,6 @@ private int getSelectedTabForConfiguration(WebPage page) { return StringUtils.isNumeric(value) ? Integer.parseInt(value) : PageSystemConfiguration.CONFIGURATION_TAB_BASIC; } - - private int getSelectedTabForNewConfiguration(WebPage page) { - PageParameters params = page.getPageParameters(); - StringValue val = params.get(PageSystemConfigurationNew.SELECTED_TAB_INDEX); - String value = null; - if (val != null && !val.isNull()) { - value = val.toString(); - } - - return StringUtils.isNumeric(value) ? Integer.parseInt(value) : PageSystemConfigurationNew.CONFIGURATION_TAB_BASIC; - } private void createSelfServiceMenu(SideBarMenuItem menu) { addMainMenuItem(menu, GuiStyleConstants.CLASS_ICON_DASHBOARD, "PageAdmin.menu.selfDashboard", 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 2303fc3a00b..115472bae4c 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 @@ -83,6 +83,7 @@ import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.*; +import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.markup.repeater.data.IDataProvider; import org.apache.wicket.model.*; import org.apache.wicket.request.IRequestHandler; @@ -101,6 +102,7 @@ import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.prism.Containerable; import com.evolveum.midpoint.prism.DefaultReferencableImpl; +import com.evolveum.midpoint.prism.ItemDefinition; import com.evolveum.midpoint.prism.Objectable; import com.evolveum.midpoint.prism.PrismContainer; import com.evolveum.midpoint.prism.PrismContainerValue; @@ -1109,7 +1111,7 @@ public static String getDisplayName(PrismContainerValu String displayName = (exclusionConstraint.getName() != null ? exclusionConstraint.getName() : exclusionConstraint.asPrismContainerValue().getParent().getPath().last()) + " - " + StringUtils.defaultIfEmpty(getName(exclusionConstraint.getTargetRef()), ""); - return StringUtils.isNotEmpty(displayName) ? displayName : "Not defined exclusion name"; + return StringUtils.isNotEmpty(displayName) && StringUtils.isNotEmpty(getName(exclusionConstraint.getTargetRef())) ? displayName : "ExclusionPolicyConstraintType.details"; } if (prismContainerValue.canRepresent(AbstractPolicyConstraintType.class)){ AbstractPolicyConstraintType constraint = (AbstractPolicyConstraintType) prismContainerValue.asContainerable(); @@ -2790,4 +2792,21 @@ public static RelationRegistry getStaticallyProvidedRelationRegistry() { public static void setStaticallyProvidedRelationRegistry(RelationRegistry staticallyProvidedRelationRegistry) { WebComponentUtil.staticallyProvidedRelationRegistry = staticallyProvidedRelationRegistry; } + + public static String loadHelpText(IModel model, Panel panel) { + if(model == null || model.getObject() == null) { + return null; + } + IW property = (IW) model.getObject(); + ItemDefinition def = property.getItemDefinition(); + String doc = def.getHelp(); + if (StringUtils.isEmpty(doc)) { + doc = def.getDocumentation(); + if (StringUtils.isEmpty(doc)) { + return null; + } + } + + return PageBase.createStringResourceStatic(panel, doc).getString(); + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebModelServiceUtils.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebModelServiceUtils.java index d8e7451587a..91834255daa 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebModelServiceUtils.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebModelServiceUtils.java @@ -29,10 +29,12 @@ import com.evolveum.midpoint.web.component.prism.ContainerStatus; import com.evolveum.midpoint.web.component.prism.ContainerValueWrapper; import com.evolveum.midpoint.web.component.prism.ContainerWrapper; +import com.evolveum.midpoint.web.component.prism.ContainerWrapperFactory; import com.evolveum.midpoint.web.component.prism.ItemWrapper; import com.evolveum.midpoint.web.component.prism.ObjectWrapper; import com.evolveum.midpoint.web.component.prism.ObjectWrapperFactory; import com.evolveum.midpoint.web.component.prism.PropertyOrReferenceWrapper; +import com.evolveum.midpoint.web.component.prism.ValueStatus; import com.evolveum.midpoint.web.page.error.PageError; import com.evolveum.midpoint.web.page.login.PageLogin; import com.evolveum.midpoint.web.security.MidPointApplication; @@ -66,6 +68,7 @@ import org.apache.wicket.RestartResponseException; import org.apache.wicket.Session; import org.apache.wicket.ThreadContext; +import org.apache.wicket.model.IModel; import org.jetbrains.annotations.Nullable; import static com.evolveum.midpoint.schema.GetOperationOptions.createNoFetchCollection; @@ -848,4 +851,16 @@ public static boolean isContainerValueWrapperEmpty(Con } return true; } + + public static ContainerValueWrapper createNewItemContainerValueWrapper(PageBase pageBase, + IModel> model) { + ContainerWrapperFactory factory = new ContainerWrapperFactory(pageBase); + Task task = pageBase.createSimpleTask("Creating new object policy"); + PrismContainerValue newItem = model.getObject().getItem().createNewValue(); + ContainerValueWrapper valueWrapper = factory.createContainerValueWrapper(model.getObject(), newItem, + model.getObject().getObjectStatus(), ValueStatus.ADDED, model.getObject().getPath(), task); + valueWrapper.setShowEmpty(true, true); + model.getObject().getValues().add(valueWrapper); + return valueWrapper; + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerDetailsPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerDetailsPanel.java index c2e9732bfc7..ae8c44ef0bd 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerDetailsPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerDetailsPanel.java @@ -59,7 +59,7 @@ protected void initLayout(){ displayNamePanel.setOutputMarkupId(true); add(displayNamePanel); - getBasicContainerValuePanel(ID_BASIC_PANEL); + addBasicContainerValuePanel(ID_BASIC_PANEL); add(getSpecificContainers(ID_SPECIFIC_CONTAINERS_PANEL)); } @@ -67,13 +67,17 @@ protected WebMarkupContainer getSpecificContainers(String contentAreaId) { return new WebMarkupContainer(contentAreaId); } - protected void getBasicContainerValuePanel(String idPanel){ + protected void addBasicContainerValuePanel(String idPanel){ + add(getBasicContainerValuePanel(idPanel)); + } + + private ContainerValuePanel getBasicContainerValuePanel(String idPanel){ Form form = new Form<>("form"); ItemPath itemPath = getModelObject().getPath(); IModel> model = getModel(); model.getObject().getContainer().setShowOnTopLevel(true); - add(new ContainerValuePanel(idPanel, getModel(), true, form, - itemWrapper -> getBasicTabVisibity(itemWrapper, itemPath), getPageBase())); + return new ContainerValuePanel(idPanel, getModel(), true, form, + itemWrapper -> getBasicTabVisibity(itemWrapper, itemPath), getPageBase()); } protected ItemVisibility getBasicTabVisibity(ItemWrapper itemWrapper, ItemPath parentPath) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/form/TriStateFormGroup.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/form/TriStateFormGroup.html index f83eb87b81e..bf41e16e54a 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/form/TriStateFormGroup.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/form/TriStateFormGroup.html @@ -17,17 +17,19 @@ -
+
*
-
-
+
+
+
+
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/form/TriStateFormGroup.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/form/TriStateFormGroup.java index 595b241d15c..5819d5e34c0 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/form/TriStateFormGroup.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/form/TriStateFormGroup.java @@ -47,19 +47,31 @@ public class TriStateFormGroup extends BasePanel { private static final String ID_TOOLTIP = "tooltip"; private static final String ID_REQUIRED = "required"; private static final String ID_FEEDBACK = "feedback"; + private static final String ID_PROPERTY_LABEL = "propertyLabel"; + private static final String ID_ROW = "row"; + public TriStateFormGroup(String id, IModel value, IModel label, String labelCssClass, String textCssClass, boolean required, boolean isSimilarAsPropertyPanel) { + this(id, value, label, null, false, labelCssClass, textCssClass, required, isSimilarAsPropertyPanel); + } + public TriStateFormGroup(String id, IModel value, IModel label, String labelCssClass, String textCssClass, boolean required) { - this(id, value, label, null, false, labelCssClass, textCssClass, required); + this(id, value, label, null, false, labelCssClass, textCssClass, required, false); + } + + public TriStateFormGroup(String id, IModel value, IModel label, String tooltipKey, + boolean isTooltipInModal, String labelCssClass, String textCssClass, boolean required) { + this(id, value, label, null, false, labelCssClass, textCssClass, required, false); } public TriStateFormGroup(String id, IModel value, IModel label, String tooltipKey, - boolean isTooltipInModal, String labelCssClass, String textCssClass, boolean required) { + boolean isTooltipInModal, String labelCssClass, String textCssClass, boolean required, boolean isSimilarAsPropertyPanel) { super(id, value); - initLayout(label, tooltipKey, isTooltipInModal, labelCssClass, textCssClass, required); + initLayout(label, tooltipKey, isTooltipInModal, labelCssClass, textCssClass, required, isSimilarAsPropertyPanel); } - private void initLayout(IModel label, final String tooltipKey, boolean isTooltipInModal, String labelCssClass, String textCssClass, boolean required) { + private void initLayout(IModel label, final String tooltipKey, boolean isTooltipInModal, String labelCssClass, String textCssClass, + boolean required, boolean isSimilarAsPropertyPanel) { WebMarkupContainer labelContainer = new WebMarkupContainer(ID_LABEL_CONTAINER); add(labelContainer); Label l = new Label(ID_LABEL, label); @@ -67,6 +79,11 @@ private void initLayout(IModel label, final String tooltipKey, boolean i if (StringUtils.isNotEmpty(labelCssClass)) { labelContainer.add(AttributeAppender.prepend("class", labelCssClass)); } + if(isSimilarAsPropertyPanel) { + labelContainer.add(AttributeAppender.prepend("class", " col-xs-2 prism-property-label ")); + } else { + labelContainer.add(AttributeAppender.prepend("class", " control-label ")); + } labelContainer.add(l); Label tooltipLabel = new Label(ID_TOOLTIP, new Model<>()); @@ -98,11 +115,19 @@ public boolean isVisible() { }); labelContainer.add(requiredContainer); + WebMarkupContainer propertyLabel = new WebMarkupContainer(ID_PROPERTY_LABEL); + WebMarkupContainer rowLabel = new WebMarkupContainer(ID_ROW); WebMarkupContainer valueWrapper = new WebMarkupContainer(ID_VALUE_WRAPPER); if (StringUtils.isNotEmpty(textCssClass)) { valueWrapper.add(AttributeAppender.prepend("class", textCssClass)); } - add(valueWrapper); + if(isSimilarAsPropertyPanel) { + propertyLabel.add(AttributeAppender.prepend("class", " col-md-10 prism-property-value ")); + rowLabel.add(AttributeAppender.prepend("class", " row ")); + } + propertyLabel.add(rowLabel); + rowLabel.add(valueWrapper); + add(propertyLabel); TriStateComboPanel triStateCombo = new TriStateComboPanel(ID_VALUE, getModel());; valueWrapper.add(triStateCombo); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/LoggingConfigurationTabPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/LoggingConfigurationTabPanel.html index 90857d99270..36b77f01f0d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/LoggingConfigurationTabPanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/LoggingConfigurationTabPanel.html @@ -18,10 +18,42 @@
-
-
-
-
-
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+ \ No newline at end of file diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/LoggingConfigurationTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/LoggingConfigurationTabPanel.java index 60b15fe5811..040bf5cc4c3 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/LoggingConfigurationTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/LoggingConfigurationTabPanel.java @@ -90,9 +90,7 @@ public class LoggingConfigurationTabPanel extends BasePanel(Model.of(getModelObject().getObjectWrapper()), new ItemPath(SystemConfigurationType.F_LOGGING, LoggingConfigurationType.F_CLASS_LOGGER)); - PrismContainerHeaderPanel loggersHeader = new PrismContainerHeaderPanel(ID_LOGGERS_HEADER, loggerModel) { - - private static final long serialVersionUID = 1L; - - @Override - protected boolean isAddButtonVisible() { - return false; - }; - }; - add(loggersHeader); - MultivalueContainerListPanel loggersMultivalueContainerListPanel = new MultivalueContainerListPanel(ID_LOGGERS, loggerModel, tableIdLoggers, itemPerPageLoggers, pageStorageLoggers) { @@ -139,6 +126,13 @@ protected boolean isAddButtonVisible() { @Override protected List> postSearch( List> items) { + for (int i = 0; i < items.size(); i++) { + ContainerValueWrapper logger = items.get(i); + if (ProfilingConfigurationTabPanel.LOGGER_PROFILING.equals(((ClassLoggerConfigurationType)logger.getContainerValue().getRealValue()).getPackage())) { + items.remove(logger); + continue; + } + } return items; } @@ -201,17 +195,6 @@ protected List initSearchableItems( IModel> appenderModel = new ContainerWrapperFromObjectWrapperModel(Model.of(getModelObject().getObjectWrapper()), new ItemPath(SystemConfigurationType.F_LOGGING, LoggingConfigurationType.F_APPENDER)); - PrismContainerHeaderPanel appenderHeader = new PrismContainerHeaderPanel(ID_APPENDERS_HEADER, appenderModel) { - - private static final long serialVersionUID = 1L; - - @Override - protected boolean isAddButtonVisible() { - return false; - }; - }; - add(appenderHeader); - MultivalueContainerListPanelWithDetailsPanel appendersMultivalueContainerListPanel = new MultivalueContainerListPanelWithDetailsPanel(ID_APPENDERS, appenderModel, tableIdAppenders, itemPerPageAppenders, pageStorageAppenders) { @@ -363,7 +346,7 @@ public AppenderConfigurationType getObject() { } @Override - protected void getBasicContainerValuePanel(String idPanel) { + protected void addBasicContainerValuePanel(String idPanel) { Form form = new Form<>("form"); ItemPath itemPath = getModelObject().getPath(); IModel> model = getModel(); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/NotificationConfigTabPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/NotificationConfigTabPanel.html index 53b7c2da0cd..b92e16e9244 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/NotificationConfigTabPanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/NotificationConfigTabPanel.html @@ -17,12 +17,9 @@ -
-
-
-
-
-
+
+
+
@@ -38,6 +35,13 @@
+
+
+
+ +
+
+
@@ -52,7 +56,7 @@
-
+
@@ -76,6 +80,6 @@
-
+
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/NotificationConfigTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/NotificationConfigTabPanel.java index 08b70f2011a..94fa4d8e5e7 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/NotificationConfigTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/NotificationConfigTabPanel.java @@ -99,7 +99,6 @@ public class NotificationConfigTabPanel extends BasePanel value = getModel().getObject().getValues().get(0); PropertyWrapper mailConfig = (PropertyWrapper)value.findPropertyWrapper(new ItemPath(value.getPath(), NotificationConfigurationType.F_MAIL)); - - add(createHeader(ID_NOTIFICATION_CONFIG_HEADER, NotificationConfigTabPanel.this.getModelObject().getItemDefinition().getTypeName().getLocalPart() + ".details")); - add(createHeader(ID_MAIL_CONFIG_HEADER, mailConfig.getItemDefinition().getTypeName().getLocalPart() + ".details")); Form form = new Form<>("form"); @@ -152,13 +148,13 @@ protected void initLayout() { mailConfigType = (MailConfigurationType)mailConfig.getValues().get(0).getValue().getRealValue(); - add(new TextFormGroup(ID_DEFAULT_FROM, new PropertyModel(mailConfigType, "defaultFrom"), createStringResource(mailConfig.getItemDefinition().getTypeName().getLocalPart() + ".defaultFrom"), "", getInputCssClass(), false)); + add(new TextFormGroup(ID_DEFAULT_FROM, new PropertyModel(mailConfigType, "defaultFrom"), createStringResource(mailConfig.getItemDefinition().getTypeName().getLocalPart() + ".defaultFrom"), "", getInputCssClass(), false, true)); - add(new TextFormGroup(ID_REDIRECT_TO_FILE, new PropertyModel(mailConfigType, "redirectToFile"), createStringResource(mailConfig.getItemDefinition().getTypeName().getLocalPart() + ".redirectToFile"), "", getInputCssClass(), false)); + add(new TextFormGroup(ID_REDIRECT_TO_FILE, new PropertyModel(mailConfigType, "redirectToFile"), createStringResource(mailConfig.getItemDefinition().getTypeName().getLocalPart() + ".redirectToFile"), "", getInputCssClass(), false, true)); - add(new TextFormGroup(ID_LOG_TO_FILE, new PropertyModel(mailConfigType, "logToFile"), createStringResource(mailConfig.getItemDefinition().getTypeName().getLocalPart() + ".logToFile"), "", getInputCssClass(), false)); + add(new TextFormGroup(ID_LOG_TO_FILE, new PropertyModel(mailConfigType, "logToFile"), createStringResource(mailConfig.getItemDefinition().getTypeName().getLocalPart() + ".logToFile"), "", getInputCssClass(), false, true)); - add(new TriStateFormGroup(ID_DEBUG, new PropertyModel(mailConfigType, "debug"), createStringResource(mailConfig.getItemDefinition().getTypeName().getLocalPart() + ".debug"), "", getInputCssClass(), false)); + add(new TriStateFormGroup(ID_DEBUG, new PropertyModel(mailConfigType, "debug"), createStringResource(mailConfig.getItemDefinition().getTypeName().getLocalPart() + ".debug"), "", getInputCssClass(), false, true)); add(createHeader(ID_MAIL_SERVER_CONFIG_HEADER, MailServerConfigurationType.COMPLEX_TYPE.getLocalPart() + ".details")); @@ -195,7 +191,7 @@ public void onClick(AjaxRequestTarget target) { }; item.add(removeButton); - TextFormGroup name = new TextFormGroup(ID_FILE_NAME, fileConfigType != null ? new PropertyModel(fileConfigType, "name") : Model.of(""), createStringResource(fileConfigType == null ? "" : (fileConfigType.COMPLEX_TYPE.getLocalPart() + ".name")), "", getInputCssClass(), false); + TextFormGroup name = new TextFormGroup(ID_FILE_NAME, fileConfigType != null ? new PropertyModel(fileConfigType, "name") : Model.of(""), createStringResource(fileConfigType == null ? "" : (fileConfigType.COMPLEX_TYPE.getLocalPart() + ".name")), "", getInputCssClass(), false, true); name.getField().add(new OnChangeAjaxBehavior() { private static final long serialVersionUID = 1L; @@ -207,7 +203,7 @@ protected void onUpdate(AjaxRequestTarget target) { }); item.add(name); - TextFormGroup file = new TextFormGroup(ID_FILE_PATH, fileConfigType != null ? new PropertyModel(fileConfigType, "file") : Model.of(""), createStringResource(fileConfigType == null ? "" : (fileConfigType.COMPLEX_TYPE.getLocalPart() + ".file")), "", getInputCssClass(), false); + TextFormGroup file = new TextFormGroup(ID_FILE_PATH, fileConfigType != null ? new PropertyModel(fileConfigType, "file") : Model.of(""), createStringResource(fileConfigType == null ? "" : (fileConfigType.COMPLEX_TYPE.getLocalPart() + ".file")), "", getInputCssClass(), false, true); file.getField().add(new OnChangeAjaxBehavior() { private static final long serialVersionUID = 1L; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ObjectPolicyConfigurationTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ObjectPolicyConfigurationTabPanel.java index 93d89c578d8..888d56ed10d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ObjectPolicyConfigurationTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ObjectPolicyConfigurationTabPanel.java @@ -62,7 +62,7 @@ import com.evolveum.midpoint.web.component.prism.ValueWrapper; import com.evolveum.midpoint.web.component.search.SearchFactory; import com.evolveum.midpoint.web.component.search.SearchItemDefinition; -import com.evolveum.midpoint.web.page.admin.configuration.PageSystemConfigurationNew; +import com.evolveum.midpoint.web.page.admin.configuration.PageSystemConfiguration; import com.evolveum.midpoint.web.session.PageStorage; import com.evolveum.midpoint.web.session.UserProfileStorage; import com.evolveum.midpoint.web.session.UserProfileStorage.TableId; @@ -94,12 +94,12 @@ protected void onInitialize() { super.onInitialize(); PageParameters params = getPage().getPageParameters(); - StringValue val = params.get(PageSystemConfigurationNew.SELECTED_TAB_INDEX); + StringValue val = params.get(PageSystemConfiguration.SELECTED_TAB_INDEX); String value = null; if (val != null && !val.isNull()) { - params.remove(params.getPosition(PageSystemConfigurationNew.SELECTED_TAB_INDEX)); + params.remove(params.getPosition(PageSystemConfiguration.SELECTED_TAB_INDEX)); } - params.set(PageSystemConfigurationNew.SELECTED_TAB_INDEX, PageSystemConfigurationNew.CONFIGURATION_TAB_OBJECT_POLICY); + params.set(PageSystemConfiguration.SELECTED_TAB_INDEX, PageSystemConfiguration.CONFIGURATION_TAB_OBJECT_POLICY); initLayout(); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ProfilingConfigurationTabPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ProfilingConfigurationTabPanel.html new file mode 100644 index 00000000000..098c18f716e --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ProfilingConfigurationTabPanel.html @@ -0,0 +1,40 @@ + + + + + +
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ + \ No newline at end of file diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ProfilingConfigurationTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ProfilingConfigurationTabPanel.java new file mode 100644 index 00000000000..c2423d31bb5 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ProfilingConfigurationTabPanel.java @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2018 Evolveum + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.evolveum.midpoint.gui.impl.page.admin.configuration.component; + +import org.apache.wicket.markup.html.form.EnumChoiceRenderer; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.PropertyModel; + +import com.evolveum.midpoint.gui.api.component.BasePanel; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; +import com.evolveum.midpoint.prism.path.ItemPath; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.web.component.form.DropDownFormGroup; +import com.evolveum.midpoint.web.component.form.Form; +import com.evolveum.midpoint.web.component.prism.ContainerValueWrapper; +import com.evolveum.midpoint.web.component.prism.ContainerWrapper; +import com.evolveum.midpoint.web.component.prism.ItemVisibility; +import com.evolveum.midpoint.web.component.prism.PrismContainerPanel; +import com.evolveum.midpoint.web.component.prism.PrismPropertyPanel; +import com.evolveum.midpoint.web.component.prism.PropertyWrapper; +import com.evolveum.midpoint.web.component.prism.ValueWrapper; +import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractLoggerConfigurationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ClassLoggerConfigurationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.LoggingConfigurationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.LoggingLevelType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ProfilingConfigurationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType; + +/** + * @author skublik + */ + +public class ProfilingConfigurationTabPanel extends BasePanel> { + + private static final long serialVersionUID = 1L; + + private static final Trace LOGGER = TraceManager.getTrace(ProfilingConfigurationTabPanel.class); + + private static final String ID_PROFILING = "profiling"; + private static final String ID_PROFILING_LOGGER_APPENDERS = "profilingLoggerAppenders"; + private static final String ID_PROFILING_LOGGER_LEVEL = "profilingLoggerLevel"; + + public static final String LOGGER_PROFILING = "PROFILING"; + private IModel> loggingModel; + + + public ProfilingConfigurationTabPanel(String id, IModel> profilingModel, IModel> loggingModel) { + super(id, profilingModel); + this.loggingModel = loggingModel; + } + + @Override + protected void onInitialize() { + super.onInitialize(); + initLayout(); + } + + private IModel> getLoggingModel() { + return loggingModel; + } + + private IModel> getProfilingModel() { + return getModel(); + } + + protected void initLayout() { + PrismContainerPanel profilingPanel = new PrismContainerPanel(ID_PROFILING, getProfilingModel(), true, new Form<>("form"), null, getPageBase()); + add(profilingPanel); + + IModel> loggerModel = new Model>(getLoggingModel().getObject().findContainerWrapper(new ItemPath(SystemConfigurationType.F_LOGGING, LoggingConfigurationType.F_CLASS_LOGGER))); + + ContainerValueWrapper profilingLogger = null; + + for (ContainerValueWrapper logger : loggerModel.getObject().getValues()) { + if (LOGGER_PROFILING.equals(((ClassLoggerConfigurationType)logger.getContainerValue().getRealValue()).getPackage())) { + profilingLogger = logger; + continue; + } + } + + if(profilingLogger == null) { + profilingLogger = WebModelServiceUtils.createNewItemContainerValueWrapper(getPageBase(), loggerModel); + ((ClassLoggerConfigurationType)profilingLogger.getContainerValue().getRealValue()).setPackage(LOGGER_PROFILING); + } + + PropertyWrapper levelProperty = (PropertyWrapper)profilingLogger.findPropertyWrapper(ClassLoggerConfigurationType.F_LEVEL); +// ClassLoggerConfigurationType realValueLogger = ((ClassLoggerConfigurationType)profilingLogger.getContainerValue().getValue()); + ValueWrapper level = levelProperty.getValues().get(0); + +// ProfilingLevel profilingLevel = ProfilingLevel.fromLoggerLevelType(level); + + DropDownFormGroup dropDownProfilingLevel = new DropDownFormGroup<>(ID_PROFILING_LOGGER_LEVEL, new Model() { + + private static final long serialVersionUID = 1L; + + private PropertyModel levelModel = new PropertyModel(level, "value.value"); + + @Override + public ProfilingLevel getObject() { + return ProfilingLevel.fromLoggerLevelType(levelModel.getObject()); + } + + @Override + public void setObject(ProfilingLevel object) { + super.setObject(object); + LOGGER.info("XXXXXXXXXXXX levelModel: " + levelModel); + levelModel.setObject(ProfilingLevel.toLoggerLevelType(object)); + } + + }, WebComponentUtil.createReadonlyModelFromEnum(ProfilingLevel.class), new EnumChoiceRenderer<>(this), createStringResource("LoggingConfigPanel.subsystem.level"), + "", getInputCssClass(), false, true); + add(dropDownProfilingLevel); + + PropertyWrapper appenders = (PropertyWrapper)profilingLogger.findPropertyWrapper(ClassLoggerConfigurationType.F_APPENDER); + appenders.setPredefinedValues(WebComponentUtil.createAppenderChoices(getPageBase())); + + PrismPropertyPanel profilingLoggerLevel = new PrismPropertyPanel(ID_PROFILING_LOGGER_APPENDERS, new Model(appenders), new Form<>("form"), itemWrapper -> getAppendersPanelVisibility(itemWrapper.getPath()), getPageBase()); + + add(profilingLoggerLevel); + + } + + private ItemVisibility getAppendersPanelVisibility(ItemPath pathToCheck) { + return ItemVisibility.VISIBLE; + } + + private String getInputCssClass() { + return "col-xs-10"; + } +} + diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/ProfilingLevel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ProfilingLevel.java similarity index 96% rename from gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/ProfilingLevel.java rename to gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ProfilingLevel.java index 2d180fe81ac..23c3ee92e39 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/ProfilingLevel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ProfilingLevel.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.evolveum.midpoint.web.page.admin.configuration.dto; +package com.evolveum.midpoint.gui.impl.page.admin.configuration.component; import com.evolveum.midpoint.xml.ns._public.common.common_3.LoggingLevelType; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/StandardLoggerType.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/StandardLoggerType.java similarity index 95% rename from gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/StandardLoggerType.java rename to gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/StandardLoggerType.java index ca2df357145..b4e5d03216d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/StandardLoggerType.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/StandardLoggerType.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.evolveum.midpoint.web.page.admin.configuration.dto; +package com.evolveum.midpoint.gui.impl.page.admin.configuration.component; /** * @author shood diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigPanelNew.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigPanel.html similarity index 100% rename from gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigPanelNew.html rename to gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigPanel.html diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigPanelNew.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigPanel.java similarity index 92% rename from gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigPanelNew.java rename to gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigPanel.java index 4e6cb0d4e43..81148266f50 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigPanelNew.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigPanel.java @@ -38,16 +38,16 @@ /** * @author skublik */ -public class SystemConfigPanelNew extends BasePanel> { +public class SystemConfigPanel extends BasePanel> { private static final long serialVersionUID = 1L; - private static final Trace LOGGER = TraceManager.getTrace(SystemConfigPanelNew.class); + private static final Trace LOGGER = TraceManager.getTrace(SystemConfigPanel.class); private static final String ID_SYSTEM_CONFIG = "basicSystemConfiguration"; - public SystemConfigPanelNew(String id, IModel> model) { + public SystemConfigPanel(String id, IModel> model) { super(id, model); setOutputMarkupId(true); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/component/SystemConfigurationSummaryPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigurationSummaryPanel.java similarity index 93% rename from gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/component/SystemConfigurationSummaryPanel.java rename to gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigurationSummaryPanel.java index 38d0f267670..35d68a7692f 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/component/SystemConfigurationSummaryPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigurationSummaryPanel.java @@ -1,4 +1,4 @@ -package com.evolveum.midpoint.web.page.admin.configuration.component; +package com.evolveum.midpoint.gui.impl.page.admin.configuration.component; import org.apache.wicket.model.IModel; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/CasSecurityConfig.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/CasSecurityConfig.java index 5bacbbfe681..707715d4568 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/CasSecurityConfig.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/CasSecurityConfig.java @@ -16,8 +16,20 @@ package com.evolveum.midpoint.web.boot; +import org.apache.commons.lang3.StringUtils; +import org.jasig.cas.client.validation.TicketValidator; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.cas.ServiceProperties; +import org.springframework.security.cas.authentication.CasAuthenticationProvider; +import org.springframework.security.cas.web.CasAuthenticationEntryPoint; +import org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper; +import org.springframework.security.core.userdetails.UserDetailsService; + +import java.lang.reflect.Constructor; /** * Created by Viliam Repan (lazyman). @@ -26,5 +38,51 @@ @Configuration public class CasSecurityConfig { - // TODO move configuration from ctx-web-security-cas.xml here + @Value("${auth.cas.midpoint.url}") + private String casMidpointUrl; + @Value("${auth.cas.server.url}") + private String casServerUrl; + @Value("${auth.cas.ticketValidator}") + private String ticketValidator; + + @Bean + public ServiceProperties serviceProperties() { + ServiceProperties properties = new ServiceProperties(); + properties.setService(casMidpointUrl + "/login/cas"); + properties.setSendRenew(false); + + return properties; + } + + @Bean + public CasAuthenticationEntryPoint authenticationEntryPoint() { + CasAuthenticationEntryPoint entryPoint = new CasAuthenticationEntryPoint(); + entryPoint.setLoginUrl(casServerUrl + "/login"); + entryPoint.setServiceProperties(serviceProperties()); + + return entryPoint; + } + + @Profile("cas") + @Bean + public AuthenticationProvider midPointAuthenticationProvider(UserDetailsService userDetailsService) throws Exception { + CasAuthenticationProvider provider = new CasAuthenticationProvider(); + provider.setAuthenticationUserDetailsService(new UserDetailsByNameServiceWrapper<>(userDetailsService)); + provider.setServiceProperties(serviceProperties()); + provider.setTicketValidator(createTicketValidatorInstance()); + provider.setKey("CAS_ID"); + + return provider; + } + + private TicketValidator createTicketValidatorInstance() throws Exception { + if (!StringUtils.contains(ticketValidator, "\\.")) { + ticketValidator = "org.jasig.cas.client.validation." + ticketValidator; + } + + Class type = (Class) Class.forName(ticketValidator); + Constructor c = type.getConstructor(String.class); + + return c.newInstance(casServerUrl); + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/MidPointSpringApplication.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/MidPointSpringApplication.java index 665a562913e..fddb1940419 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/MidPointSpringApplication.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/MidPointSpringApplication.java @@ -41,10 +41,7 @@ import org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration; import org.springframework.boot.autoconfigure.web.ServerProperties; import org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration; -import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration; -import org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration; -import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryCustomizer; -import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; +import org.springframework.boot.autoconfigure.web.servlet.*; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.server.ErrorPage; @@ -105,7 +102,8 @@ HttpMessageConvertersAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class, SecurityFilterAutoConfiguration.class, - MultipartAutoConfiguration.class + MultipartAutoConfiguration.class, + HttpEncodingAutoConfiguration.class }) @SpringBootConfiguration public class MidPointSpringApplication extends SpringBootServletInitializer { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/WebSecurityConfig.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/WebSecurityConfig.java index fa207c7d5e6..d2e12f5a3f5 100755 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/WebSecurityConfig.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/WebSecurityConfig.java @@ -23,44 +23,58 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.security.SecurityProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; +import org.springframework.context.annotation.*; import org.springframework.core.annotation.Order; +import org.springframework.core.env.Environment; +import org.springframework.core.type.AnnotatedTypeMetadata; +import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.cas.web.CasAuthenticationFilter; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.WebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.AuthenticationEntryPoint; import org.springframework.security.web.authentication.logout.LogoutFilter; +import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler; import org.springframework.security.web.authentication.preauth.RequestHeaderAuthenticationFilter; +import java.util.Arrays; + /** * Created by Viliam Repan (lazyman). */ @Order(SecurityProperties.BASIC_AUTH_ORDER - 1) @Configuration -//TODO -//@EnableGlobalMethodSecurity(securedEnabled = true) @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { + @Autowired + private Environment environment; @Autowired private AuthenticationProvider authenticationProvider; + @Autowired + private AuthenticationManager authenticationManager; + @Autowired private MidPointGuiAuthorizationEvaluator accessDecisionManager; + @Value("${auth.sso.header:SM_USER}") + private String principalRequestHeader; + + @Value("${auth.cas.server.url:}") + private String casServerUrl; + @Value("${security.enable-csrf:true}") private boolean csrfEnabled; @Value("${auth.logout.url:/}") private String authLogoutUrl; - @Value("${auth.sso.header:SM_USER}") - private String principalRequestHeader; - + + @Profile("!cas") @Bean - public WicketLoginUrlAuthenticationEntryPoint wicketAuthenticationEntryPoint() { + public AuthenticationEntryPoint authenticationEntryPoint() { return new WicketLoginUrlAuthenticationEntryPoint("/login"); } @@ -71,27 +85,15 @@ public MidPointGuiAuthorizationEvaluator accessDecisionManager(SecurityEnforcer return new MidPointGuiAuthorizationEvaluator(securityEnforcer, securityContextManager, taskManager); } - @Profile("sso") - @Bean - public RequestHeaderAuthenticationFilter requestHeaderAuthenticationFilter() throws Exception { - RequestHeaderAuthenticationFilter filter = new RequestHeaderAuthenticationFilter(); - filter.setPrincipalRequestHeader(principalRequestHeader); - filter.setAuthenticationManager(authenticationManager()); - - getHttp().addFilterBefore(filter, LogoutFilter.class); - - return filter; - } - @Override public void configure(WebSecurity web) throws Exception { - // Web (SOAP) services + // Web (SOAP) services web.ignoring().antMatchers("/model/**"); web.ignoring().antMatchers("/ws/**"); // REST service web.ignoring().antMatchers("/rest/**"); - + // Special intra-cluster service to download and delete report outputs web.ignoring().antMatchers("/report"); @@ -139,7 +141,7 @@ protected void configure(HttpSecurity http) throws Exception { .successHandler(authenticationSuccessHandler()).permitAll(); http.exceptionHandling() - .authenticationEntryPoint(wicketAuthenticationEntryPoint()) + .authenticationEntryPoint(authenticationEntryPoint()) .accessDeniedHandler(accessDeniedHandler()); if (!csrfEnabled) { @@ -147,6 +149,22 @@ protected void configure(HttpSecurity http) throws Exception { } http.headers().disable(); + + if (Arrays.stream(environment.getActiveProfiles()).anyMatch(p -> p.equalsIgnoreCase("cas"))) { + http.addFilterAt(casFilter(), CasAuthenticationFilter.class); + http.addFilterBefore(requestSingleLogoutFilter(), LogoutFilter.class); +// http.addFilterBefore(singleSignOutFilter(), CasAuthenticationFilter.class); + } + + if (Arrays.stream(environment.getActiveProfiles()).anyMatch(p -> p.equalsIgnoreCase("sso"))) { + http.addFilterBefore(requestHeaderAuthenticationFilter(), LogoutFilter.class); + } + } + + @Bean + @Override + protected AuthenticationManager authenticationManager() throws Exception { + return super.authenticationManager(); } @Bean @@ -154,9 +172,10 @@ public MidPointAccessDeniedHandler accessDeniedHandler() { return new MidPointAccessDeniedHandler(); } - @Profile({"!ldap", "!cas"}) + @Profile("default") + @Conditional(DefaultProfileOnlyCondition.class) @Bean - public AuthenticationProvider authenticationProvider() { + public AuthenticationProvider midPointAuthenticationProvider() throws Exception { return new MidPointAuthenticationProvider(); } @@ -181,5 +200,57 @@ public AuditedLogoutHandler logoutHandler() { return handler; } + + @Profile("sso") + @Bean + public RequestHeaderAuthenticationFilter requestHeaderAuthenticationFilter() { + RequestHeaderAuthenticationFilter filter = new RequestHeaderAuthenticationFilter(); + filter.setPrincipalRequestHeader(principalRequestHeader); + filter.setAuthenticationManager(authenticationManager); + + return filter; + } + + @Profile("cas") + @Bean + public CasAuthenticationFilter casFilter() { + CasAuthenticationFilter filter = new CasAuthenticationFilter(); + filter.setAuthenticationManager(authenticationManager); + + return filter; + } + + @Profile("cas") + @Bean + public LogoutFilter requestSingleLogoutFilter() { + LogoutFilter filter = new LogoutFilter(casServerUrl + "/logout", new SecurityContextLogoutHandler()); + filter.setFilterProcessesUrl("/j_spring_cas_security_logout"); + + return filter; + } + +// @Profile("cas") +// @Bean +// public SingleSignOutFilter singleSignOutFilter() { +// SingleSignOutFilter filter = new SingleSignOutFilter(); +// filter.setCasServerUrlPrefix(casServerUrl); +// +// return filter; +// } + + private static class DefaultProfileOnlyCondition implements Condition { + + @Override + public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { + + if (context.getEnvironment() == null) { + return true; + } + + String[] activeProfiles = context.getEnvironment().getActiveProfiles(); + + return !Arrays.stream(activeProfiles).anyMatch(p -> p.equalsIgnoreCase("cas") || p.equalsIgnoreCase("ldap")); + } + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/LockoutStatusPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/LockoutStatusPanel.html index b574ddb2843..1ee17aebcc3 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/LockoutStatusPanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/LockoutStatusPanel.html @@ -17,12 +17,10 @@
-
-
-
-
+
+
+
-
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AbstractRoleAssignmentPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AbstractRoleAssignmentPanel.html index 243da713648..aa600ce239f 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AbstractRoleAssignmentPanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AbstractRoleAssignmentPanel.html @@ -20,16 +20,12 @@
-
- -
-
-
+
-
+
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AbstractRoleAssignmentPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AbstractRoleAssignmentPanel.java index 6691412ee13..1657d5a2029 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AbstractRoleAssignmentPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AbstractRoleAssignmentPanel.java @@ -16,6 +16,10 @@ package com.evolveum.midpoint.web.component.assignment; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + import com.evolveum.midpoint.gui.api.component.AssignmentPopup; import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; @@ -25,8 +29,11 @@ import com.evolveum.midpoint.prism.query.ObjectPaging; import com.evolveum.midpoint.prism.query.ObjectQuery; import com.evolveum.midpoint.prism.query.builder.QueryBuilder; +import com.evolveum.midpoint.prism.query.NotFilter; +import com.evolveum.midpoint.prism.query.ObjectFilter; import com.evolveum.midpoint.schema.constants.ObjectTypes; import com.evolveum.midpoint.schema.constants.RelationTypes; +import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; @@ -48,11 +55,9 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.apache.commons.lang.StringUtils; import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; -import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.markup.repeater.Item; @@ -64,6 +69,20 @@ import java.util.Collection; import java.util.Collections; import java.util.List; +import com.evolveum.midpoint.gui.api.page.PageBase; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; +import com.evolveum.midpoint.prism.path.ItemPath; +import com.evolveum.midpoint.prism.query.ObjectPaging; +import com.evolveum.midpoint.prism.query.ObjectQuery; +import com.evolveum.midpoint.prism.query.builder.QueryBuilder; +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.AjaxButton; +import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; +import com.evolveum.midpoint.web.session.UserProfileStorage; +import com.evolveum.midpoint.web.session.UserProfileStorage.TableId; /** * Created by honchar. @@ -74,15 +93,11 @@ public class AbstractRoleAssignmentPanel extends AssignmentPanel { private static final Trace LOGGER = TraceManager.getTrace(AssignmentPanel.class); - private static final String ID_RELATION = "relation"; - private static final String ID_RELATION_CONTAINER = "relationContainer"; private static final String ID_SHOW_ALL_ASSIGNMENTS_BUTTON = "showAllAssignmentsButton"; protected static final String DOT_CLASS = AbstractRoleAssignmentPanel.class.getName() + "."; private static final String OPERATION_LOAD_TARGET_REF_OBJECT = DOT_CLASS + "loadAssignmentTargetRefObject"; - private RelationTypes relationValue = null; - public AbstractRoleAssignmentPanel(String id, IModel> assignmentContainerWrapperModel){ super(id, assignmentContainerWrapperModel); } @@ -90,55 +105,6 @@ public AbstractRoleAssignmentPanel(String id, IModel relation = WebComponentUtil.createEnumPanel(RelationTypes.class, ID_RELATION, - WebComponentUtil.createReadonlyModelFromEnum(RelationTypes.class), - new IModel() { - - private static final long serialVersionUID = 1L; - - @Override - public RelationTypes getObject() { - return relationValue; - } - - @Override - public void setObject(RelationTypes relationTypes) { - relationValue = relationTypes; - } - - @Override - public void detach() { - - } - }, this, true, - createStringResource("RelationTypes.ANY").getString()); - relation.getBaseFormComponent().add(new AjaxFormComponentUpdatingBehavior("change") { - private static final long serialVersionUID = 1L; - - @Override - protected void onUpdate(AjaxRequestTarget target) { - getMultivalueContainerListPanel().refreshTable(target); - } - }); - relation.setOutputMarkupId(true); - relation.setOutputMarkupPlaceholderTag(true); - relationContainer.addOrReplace(relation); - AjaxButton showAllAssignmentsButton = new AjaxButton(ID_SHOW_ALL_ASSIGNMENTS_BUTTON, createStringResource("AssignmentTablePanel.menu.showAllAssignments")) { @@ -162,11 +128,6 @@ public boolean isVisible(){ return searchContainer; } - private DropDownChoicePanel getRelationPanel() { - return (DropDownChoicePanel) getAssignmentContainer().get(ID_RELATION_CONTAINER).get(ID_RELATION); - } - - protected void showAllAssignments(AjaxRequestTarget target) { PageBase pageBase = getPageBase(); List previewAssignmentsList; @@ -191,6 +152,11 @@ protected void addPerformed(AjaxRequestTarget target, List newAssignmentsList) { super.addPerformed(target, newAssignmentsList); addSelectedAssignmentsPerformed(target, newAssignmentsList); } + + @Override + protected List getAvailableObjectTypesList(){ + return getObjectTypesList(); + } }; popupPanel.setOutputMarkupId(true); getPageBase().showMainPopup(popupPanel, target); @@ -317,38 +283,20 @@ protected int getItemsPerPage() { return (int) getParentPage().getItemsPerPage(UserProfileStorage.TableId.ASSIGNMENTS_TAB_TABLE); } - protected ObjectQuery createObjectQuery() { - QName relation = getRelation(); - if (PrismConstants.Q_ANY.equals(relation)) { - Collection delegationRelations = getParentPage().getRelationRegistry() - .getAllRelationsFor(RelationKindType.DELEGATION); - return QueryBuilder.queryFor(AssignmentType.class, getParentPage().getPrismContext()) - .block() - .not() - .item(new ItemPath(AssignmentType.F_CONSTRUCTION, ConstructionType.F_RESOURCE_REF)) - .isNull() - .endBlock() - .and() - .block() - .not() - .item(new ItemPath(AssignmentType.F_TARGET_REF)) - .ref(delegationRelations.toArray(new QName[0])) - .endBlock() - .and() - .not() - .exists(AssignmentType.F_POLICY_RULE) - .build(); - } else { - return QueryBuilder.queryFor(AssignmentType.class, getParentPage().getPrismContext()) - .item(new ItemPath(AssignmentType.F_TARGET_REF)) - .ref(relation) - .build(); - } - } - - private QName getRelation() { - return relationValue == null ? PrismConstants.Q_ANY : relationValue.getRelation(); - } + protected ObjectQuery createObjectQuery() { + Collection delegationRelations = getParentPage().getRelationRegistry() + .getAllRelationsFor(RelationKindType.DELEGATION); + ObjectFilter deputyFilter = QueryBuilder.queryFor(AssignmentType.class, getParentPage().getPrismContext()) + .item(new ItemPath(AssignmentType.F_TARGET_REF)) + .ref(delegationRelations.toArray(new QName[0])) + .buildFilter(); + ObjectQuery query = QueryBuilder.queryFor(AssignmentType.class, getParentPage().getPrismContext()) + .not() + .exists(AssignmentType.F_POLICY_RULE) + .build(); + query.addFilter(NotFilter.createNot(deputyFilter)); + return query; + } private IModel getTenantLabelModel(ContainerValueWrapper assignmentContainer){ if (assignmentContainer == null || assignmentContainer.getContainerValue() == null){ @@ -391,10 +339,6 @@ private IModel getIdentifierLabelModel(ContainerV return Model.of(""); } - protected boolean isRelationVisible() { - return true; - } - protected List getObjectTypesList(){ return WebComponentUtil.createAssignableTypesList(); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.html index f64543eeb05..5da148bb8eb 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.html @@ -21,31 +21,7 @@ -
+
- \ No newline at end of file diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.java index c2166cc9adf..049d7844abe 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.java @@ -252,9 +252,12 @@ private MultivalueContainerDetailsPanel createMultivalueContaine @Override protected ItemVisibility getBasicTabVisibity(ItemWrapper itemWrapper, ItemPath parentAssignmentPath) { - PrismContainerValue prismContainerValue = item.getModelObject().getContainerValue(); - ItemPath assignmentPath = item.getModelObject().getContainerValue().getValue().asPrismContainerValue().getPath(); - return getAssignmentBasicTabVisibity(itemWrapper, parentAssignmentPath, assignmentPath, prismContainerValue); + return AssignmentPanel.this.getBasicTabVisibity(itemWrapper, parentAssignmentPath, item.getModel()); + } + + @Override + protected void addBasicContainerValuePanel(String idPanel) { + add(getBasicContainerPanel(idPanel, item.getModel())); } @Override @@ -293,6 +296,20 @@ protected IModel getKindIntentLabelModel() { }; return detailsPanel; } + + private ItemVisibility getBasicTabVisibity(ItemWrapper itemWrapper, ItemPath parentAssignmentPath, IModel> model) { + PrismContainerValue prismContainerValue = model.getObject().getContainerValue(); + ItemPath assignmentPath = model.getObject().getContainerValue().getValue().asPrismContainerValue().getPath(); + return getAssignmentBasicTabVisibity(itemWrapper, parentAssignmentPath, assignmentPath, prismContainerValue); + } + + protected ContainerValuePanel getBasicContainerPanel(String idPanel, IModel> model) { + Form form = new Form<>("form"); + ItemPath itemPath = getModelObject().getPath(); + model.getObject().getContainer().setShowOnTopLevel(true); + return new ContainerValuePanel(idPanel, model, true, form, + itemWrapper -> getBasicTabVisibity(itemWrapper, itemPath, model), getPageBase()); + } private QName getRelationForDisplayNamePanel(ContainerValueWrapper modelObject) { AssignmentType assignment = modelObject.getContainerValue().getValue(); @@ -478,6 +495,10 @@ public InlineMenuItemAction initAction() { protected MultivalueContainerListPanelWithDetailsPanel getMultivalueContainerListPanel() { return ((MultivalueContainerListPanelWithDetailsPanel)get(ID_ASSIGNMENTS)); } + + protected MultivalueContainerDetailsPanel getMultivalueContainerDetailsPanel() { + return ((MultivalueContainerDetailsPanel)get(MultivalueContainerListPanelWithDetailsPanel.ID_ITEM_DETAILS)); + } protected abstract TableId getTableId(); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/GdprAssignmentPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/GdprAssignmentPanel.java index fcabc78eba3..e8209a7408b 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/GdprAssignmentPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/GdprAssignmentPanel.java @@ -95,11 +95,6 @@ public Boolean getObject() { return columns; } - @Override - protected boolean isRelationVisible() { - return false; - } - // @Override // protected void addSelectedAssignmentsPerformed(AjaxRequestTarget target, List assignmentsList, // QName relation, ShadowKindType kind, String intent) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducedEntitlementDetailsPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducedEntitlementDetailsPanel.java deleted file mode 100644 index 7c0edb6519a..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducedEntitlementDetailsPanel.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2010-2018 Evolveum - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.evolveum.midpoint.web.component.assignment; - -import com.evolveum.midpoint.prism.path.ItemPath; -import com.evolveum.midpoint.web.component.form.Form; -import com.evolveum.midpoint.web.component.prism.ContainerValueWrapper; -import com.evolveum.midpoint.web.component.prism.ContainerWrapper; -import com.evolveum.midpoint.web.component.prism.PrismContainerPanel; -import com.evolveum.midpoint.web.page.admin.PageAdminObjectDetails; -import com.evolveum.midpoint.xml.ns._public.common.common_3.*; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.Model; - -/** - * Created by honchar. - */ -public class InducedEntitlementDetailsPanel extends InducementDetailsPanel { - private static final long serialVersionUID = 1L; - - public InducedEntitlementDetailsPanel(String id, Form form, IModel> assignmentModel) { - super(id, form, assignmentModel); - } - - @Override - protected void initContainersPanel(Form form, PageAdminObjectDetails pageBase) { - ContainerWrapper constructionContainer = getModelObject().findContainerWrapper(getModelObject().getPath().append((AssignmentType.F_CONSTRUCTION))); - ConstructionAssociationPanel constructionDetailsPanel = new ConstructionAssociationPanel(ID_SPECIFIC_CONTAINERS, Model.of(constructionContainer)); - constructionDetailsPanel.setOutputMarkupId(true); - add(constructionDetailsPanel); - } - -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducedEntitlementsPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducedEntitlementsPanel.html new file mode 100644 index 00000000000..dca07d22875 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducedEntitlementsPanel.html @@ -0,0 +1,46 @@ + + + + + +
+
+ +
+ +
+
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducedEntitlementsPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducedEntitlementsPanel.java index 5ed71e3d4f4..8574098f683 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducedEntitlementsPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducedEntitlementsPanel.java @@ -16,6 +16,7 @@ package com.evolveum.midpoint.web.component.assignment; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.gui.impl.component.MultivalueContainerDetailsPanel; import com.evolveum.midpoint.gui.impl.session.ObjectTabStorage; import com.evolveum.midpoint.prism.query.AndFilter; import com.evolveum.midpoint.prism.query.ObjectFilter; @@ -25,9 +26,11 @@ import com.evolveum.midpoint.schema.constants.ObjectTypes; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.web.component.prism.ContainerValuePanel; import com.evolveum.midpoint.web.component.prism.ContainerValueWrapper; import com.evolveum.midpoint.web.component.prism.ContainerWrapper; import com.evolveum.midpoint.web.component.prism.ValueStatus; +import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.web.session.UserProfileStorage; import com.evolveum.midpoint.web.util.ExpressionUtil; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; @@ -37,6 +40,7 @@ import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.IModel; @@ -52,6 +56,8 @@ public class InducedEntitlementsPanel extends InducementsPanel{ private static final long serialVersionUID = 1L; + + private static final String ID_ASSIGNMENT_DETAILS = "assignmentDetails"; private static final Trace LOGGER = TraceManager.getTrace(InducedEntitlementsPanel.class); @@ -124,26 +130,35 @@ public void populateItem(Item modelObject) { Fragment specificContainers = new Fragment(contentAreaId, AssignmentPanel.ID_SPECIFIC_CONTAINERS_FRAGMENT, this); specificContainers.add(getConstructionAssociationPanel(modelObject)); + + specificContainers.add(super.getBasicContainerPanel(ID_ASSIGNMENT_DETAILS, new Model(modelObject))); return specificContainers; } + + + @Override + protected ContainerValuePanel getBasicContainerPanel(String idPanel, + IModel> model) { + ContainerValuePanel panel = super.getBasicContainerPanel(idPanel, model); + panel.add(new VisibleEnableBehaviour() { + @Override + public boolean isVisible() { + return false; + } + }); + return panel; + } + private ConstructionAssociationPanel getConstructionAssociationPanel(ContainerValueWrapper modelObject) { ContainerWrapper constructionContainer = modelObject.findContainerWrapper(modelObject.getPath().append((AssignmentType.F_CONSTRUCTION))); ConstructionAssociationPanel constructionDetailsPanel = new ConstructionAssociationPanel(AssignmentPanel.ID_SPECIFIC_CONTAINER, Model.of(constructionContainer)); @@ -151,11 +166,6 @@ private ConstructionAssociationPanel getConstructionAssociationPanel(ContainerVa return constructionDetailsPanel; } - @Override - protected boolean isRelationVisible() { - return false; - } - protected List getObjectTypesList(){ return Arrays.asList(ObjectTypes.RESOURCE); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducementsPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducementsPanel.java index 32dbdf4ad3e..ee59710fce0 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducementsPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducementsPanel.java @@ -39,7 +39,6 @@ public InducementsPanel(String id, IModel> indu @Override protected void initCustomPaging() { getInducementsTabStorage().setPaging(ObjectPaging.createPaging(0, getItemsPerPage())); - } @Override diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/PolicyRulesPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/PolicyRulesPanel.html index c0fd34fe38a..982b1d55091 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/PolicyRulesPanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/PolicyRulesPanel.html @@ -20,7 +20,7 @@
-
+
\ No newline at end of file diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/PolicyRulesPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/PolicyRulesPanel.java index 3ca9b3a0069..12f89ba5233 100755 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/PolicyRulesPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/PolicyRulesPanel.java @@ -99,7 +99,8 @@ public void populateItem(Item> rowModel) { ContainerWrapper policyRuleWrapper = rowModel.getObject().findContainerWrapper(new ItemPath(rowModel.getObject().getPath(), AssignmentType.F_POLICY_RULE)); ContainerWrapper wrapper = policyRuleWrapper.getValues().get(0).findContainerWrapper(new ItemPath(policyRuleWrapper.getValues().get(0).getPath(), PolicyRuleType.F_POLICY_ACTIONS)); - String action = PolicyRuleTypeUtil.toShortString(wrapper.getValues().get(0).getContainerValue().getValue(), new ArrayList<>()); + String action = wrapper != null ? + PolicyRuleTypeUtil.toShortString(wrapper.getValues().get(0).getContainerValue().getValue(), new ArrayList<>()) : null; cellItem.add(new MultiLineLabel(componentId, Model.of(action != null && !action.equals("null") ? action : ""))); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/form/AceEditorFormGroup.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/form/AceEditorFormGroup.html index c3834b9d805..e078bdd2ac8 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/form/AceEditorFormGroup.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/form/AceEditorFormGroup.html @@ -18,7 +18,7 @@ -