From ec496e72416f87333279eb458496270a5e56b4eb Mon Sep 17 00:00:00 2001 From: skublik Date: Wed, 31 Oct 2018 14:47:41 +0100 Subject: [PATCH 1/5] MID-4319 resolving todo i18n in code --- .../gui/api/util/WebComponentUtil.java | 18 ++++++++++++++++++ .../web/component/progress/ProgressPanel.java | 9 +++++---- .../web/component/progress/StatisticsDto.java | 7 +++++-- .../dto/CertCampaignListItemDto.java | 5 ++--- .../dto/CertCaseOrWorkItemDto.java | 6 +++--- .../web/page/admin/server/PageTaskAdd.java | 6 ++++-- .../web/page/admin/server/PageTasks.java | 11 ++--------- .../resources/localization/Midpoint.properties | 12 +++++++++++- 8 files changed, 50 insertions(+), 24 deletions(-) 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 34a1c656f22..0bbb755de60 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 @@ -70,6 +70,7 @@ import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.Validate; import org.apache.commons.lang.math.NumberUtils; +import org.apache.commons.lang.time.DurationFormatUtils; import org.apache.commons.lang3.StringEscapeUtils; import org.apache.commons.validator.routines.checkdigit.VerhoeffCheckDigit; import org.apache.wicket.*; @@ -2899,4 +2900,21 @@ public static String loadHelpText(IModel model, Pan return PageBase.createStringResourceStatic(panel, doc).getString().replaceAll("\\s{2,}", " ").trim(); } + + public static String formatDurationWordsForLocal(long durationMillis, boolean suppressLeadingZeroElements, + boolean suppressTrailingZeroElements, PageBase pageBase){ + + String duration = DurationFormatUtils.formatDurationWords(durationMillis, suppressLeadingZeroElements, suppressTrailingZeroElements); + + duration = StringUtils.replaceOnce(duration, "seconds", pageBase.createStringResource("WebComponentUtil.formatDurationWordsForLocal.seconds").getString()); + duration = StringUtils.replaceOnce(duration, "minutes", pageBase.createStringResource("WebComponentUtil.formatDurationWordsForLocal.minutes").getString()); + duration = StringUtils.replaceOnce(duration, "hours", pageBase.createStringResource("WebComponentUtil.formatDurationWordsForLocal.hours").getString()); + duration = StringUtils.replaceOnce(duration, "days", pageBase.createStringResource("WebComponentUtil.formatDurationWordsForLocal.days").getString()); + duration = StringUtils.replaceOnce(duration, "second", pageBase.createStringResource("WebComponentUtil.formatDurationWordsForLocal.second").getString()); + duration = StringUtils.replaceOnce(duration, "minute", pageBase.createStringResource("WebComponentUtil.formatDurationWordsForLocal.minute").getString()); + duration = StringUtils.replaceOnce(duration, "hour", pageBase.createStringResource("WebComponentUtil.formatDurationWordsForLocal.hour").getString()); + duration = StringUtils.replaceOnce(duration, "day", pageBase.createStringResource("WebComponentUtil.formatDurationWordsForLocal.day").getString()); + + return duration; + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/ProgressPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/ProgressPanel.java index e3312f6b98e..30985fdbc3f 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/ProgressPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/ProgressPanel.java @@ -209,8 +209,8 @@ public String getObject() { ProgressReportActivityDto si = item.getModelObject(); if (si.getActivityType() == RESOURCE_OBJECT_OPERATION && si.getResourceShadowDiscriminator() != null) { ResourceShadowDiscriminator rsd = si.getResourceShadowDiscriminator(); - return createStringResource(rsd.getKind()).getString() - + " (" + rsd.getIntent() + ") on " + si.getResourceName(); // TODO correct i18n + return createStringResource("ProgressPanel.populateStatusItem.resourceObjectActivity", createStringResource(rsd.getKind()).getString(), + rsd.getIntent(),si.getResourceName()).getString(); } else { return createStringResource(si.getActivityType()).getString(); } @@ -233,11 +233,12 @@ public String getObject() { @Override public String getObject() { // TODO why this does not work??? - OperationResultStatusType statusType = item.getModelObject().getStatus(); // TODO i18n + OperationResultStatusType statusType = item.getModelObject().getStatus(); if (statusType == null) { return null; } else { - return statusType.toString(); + return getPageBase().createStringResource( + OperationResultStatusPresentationProperties.parseOperationalResultStatus(statusType).getStatusLabelKey()).getString(); } } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/StatisticsDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/StatisticsDto.java index 06e94f91b61..eecfc364c42 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/StatisticsDto.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/StatisticsDto.java @@ -16,6 +16,7 @@ package com.evolveum.midpoint.web.component.progress; +import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.prism.xml.XmlTypeConverter; import com.evolveum.midpoint.schema.statistics.EnvironmentalPerformanceInformation; import com.evolveum.midpoint.schema.statistics.StatusMessage; @@ -30,7 +31,9 @@ */ public class StatisticsDto implements Serializable { - public static final String F_PROVISIONING_LINES = "provisioningLines"; + private static final long serialVersionUID = 1L; + + public static final String F_PROVISIONING_LINES = "provisioningLines"; public static final String F_MAPPINGS_LINES = "mappingsLines"; public static final String F_NOTIFICATIONS_LINES = "notificationsLines"; public static final String F_LAST_MESSAGE = "lastMessage"; @@ -93,7 +96,7 @@ public void setNotificationsLines(List notificationsLines) } public String getLastMessage() { - return lastMessage != null ? lastMessage : "(none)"; // i18n + return lastMessage != null ? lastMessage : "(" + PageBase.createStringResourceStatic(null, "StatisticsDto.getLastMessage.none").getString() + ")"; } public void setLastMessage(String lastMessage) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/certification/dto/CertCampaignListItemDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/certification/dto/CertCampaignListItemDto.java index 6e143e07bef..b7aac887a2f 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/certification/dto/CertCampaignListItemDto.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/certification/dto/CertCampaignListItemDto.java @@ -131,13 +131,12 @@ private String computeDeadlineAsString(PageBase page) { delta = (delta / precision) * precision; } - //todo i18n for durations if (delta > 0) { String key = stageLevelInfo ? "PageCertCampaigns.inForStage" : "PageCertCampaigns.inForCampaign"; - return PageBase.createStringResourceStatic(page, key, DurationFormatUtils.formatDurationWords(delta, true, true)).getString(); + return PageBase.createStringResourceStatic(page, key, WebComponentUtil.formatDurationWordsForLocal(delta, true, true, page)).getString(); } else if (delta < 0) { String key = stageLevelInfo ? "PageCertCampaigns.agoForStage" : "PageCertCampaigns.agoForCampaign"; - return PageBase.createStringResourceStatic(page, key, DurationFormatUtils.formatDurationWords(-delta, true, true)).getString(); + return PageBase.createStringResourceStatic(page, key, WebComponentUtil.formatDurationWordsForLocal(-delta, true, true, page)).getString(); } else { String key = stageLevelInfo ? "PageCertCampaigns.nowForStage" : "PageCertCampaigns.nowForCampaign"; return page.getString(key); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/certification/dto/CertCaseOrWorkItemDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/certification/dto/CertCaseOrWorkItemDto.java index d3eb32690cf..7503efb8402 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/certification/dto/CertCaseOrWorkItemDto.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/certification/dto/CertCaseOrWorkItemDto.java @@ -17,6 +17,7 @@ package com.evolveum.midpoint.web.page.admin.certification.dto; import com.evolveum.midpoint.gui.api.page.PageBase; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.prism.xml.XmlTypeConverter; import com.evolveum.midpoint.schema.util.CertCampaignTypeUtil; import com.evolveum.midpoint.schema.util.ObjectTypeUtil; @@ -189,11 +190,10 @@ private String computeDeadlineAsString(PageBase page) { delta = (delta / precision) * precision; } - //todo i18n if (delta > 0) { - return PageBase.createStringResourceStatic(page, "PageCert.in", DurationFormatUtils.formatDurationWords(delta, true, true)).getString(); + return PageBase.createStringResourceStatic(page, "PageCert.in", WebComponentUtil.formatDurationWordsForLocal(delta, true, true, page)).getString(); } else if (delta < 0) { - return PageBase.createStringResourceStatic(page, "PageCert.ago", DurationFormatUtils.formatDurationWords(-delta, true, true)).getString(); + return PageBase.createStringResourceStatic(page, "PageCert.ago", WebComponentUtil.formatDurationWordsForLocal(-delta, true, true, page)).getString(); } else { return page.getString("PageCert.now"); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTaskAdd.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTaskAdd.java index 0d64a113963..cb32a8d80d8 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTaskAdd.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTaskAdd.java @@ -18,6 +18,7 @@ import java.util.ArrayList; import java.util.Collections; +import java.util.Date; import java.util.Iterator; import java.util.List; @@ -149,6 +150,7 @@ public class PageTaskAdd extends PageAdminTasks { private static final String OPERATION_SAVE_TASK = DOT_CLASS + "saveTask"; private static final StringChoiceRenderer CATEGORY_RENDERER = StringChoiceRenderer.prefixed("pageTask.category."); + private static final String MEDIUM_NOTIME_STYLE = "M-"; private IModel model; @@ -503,7 +505,7 @@ protected void onUpdate(AjaxRequestTarget target) { new PropertyModel<>(model, TaskAddDto.F_NOT_START_BEFORE)) { @Override protected DateTextField newDateTextField(String id, PropertyModel dateFieldModel) { - return DateTextField.forDatePattern(id, dateFieldModel, "dd/MMM/yyyy"); // todo i18n + return DateTextField.forDatePattern(id, dateFieldModel, WebComponentUtil.getLocalizedDatePattern(MEDIUM_NOTIME_STYLE)); } }; notStartBefore.setOutputMarkupId(true); @@ -513,7 +515,7 @@ protected DateTextField newDateTextField(String id, PropertyModel dateFieldModel model, TaskAddDto.F_NOT_START_AFTER)) { @Override protected DateTextField newDateTextField(String id, PropertyModel dateFieldModel) { - return DateTextField.forDatePattern(id, dateFieldModel, "dd/MMM/yyyy"); // todo i18n + return DateTextField.forDatePattern(id, dateFieldModel, WebComponentUtil.getLocalizedDatePattern(MEDIUM_NOTIME_STYLE)); } }; notStartAfter.setOutputMarkupId(true); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTasks.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTasks.java index 4f6ad132348..5a9e792fe48 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTasks.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTasks.java @@ -1136,15 +1136,8 @@ private Date getCurrentRuntime(IModel taskModel) { } return new Date(time); - } else { - //todo why? - Long time = task.getCurrentRuntime(); - if (time == null) { - return null; - } - //todo i18n - return null; - } + } + return null; } private String getLastCheckInTime(IModel nodeModel) { diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint.properties b/gui/admin-gui/src/main/resources/localization/Midpoint.properties index 8a05d6f077e..74d0b291c78 100755 --- a/gui/admin-gui/src/main/resources/localization/Midpoint.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint.properties @@ -2505,6 +2505,14 @@ pageWorkItem.requestedOn=Requested on: pageWorkItem.requester.description=Requester pageWorkItem.requestSpecific.description=Your decision webComponentUtil.message.createMenuItemsFromActions.warning=There are no objects to execute the action on +WebComponentUtil.formatDurationWordsForLocal.seconds=seconds +WebComponentUtil.formatDurationWordsForLocal.minutes=minutes +WebComponentUtil.formatDurationWordsForLocal.hours=hours +WebComponentUtil.formatDurationWordsForLocal.days=days +WebComponentUtil.formatDurationWordsForLocal.second=second +WebComponentUtil.formatDurationWordsForLocal.minute=minute +WebComponentUtil.formatDurationWordsForLocal.hour=hour +WebComponentUtil.formatDurationWordsForLocal.day=day workItemPanel.originallyAllocatedTo=Originally allocated to: workItemPanel.currentlyAllocatedTo=Currently allocated to: workItemPanel.candidateActors=Candidate actors: @@ -2643,6 +2651,7 @@ ProgressPanel.ExecutionTimeWhenRunning=Operation executing for {0} second(s). ProgressPanel.abortRequested=Abort requested, please wait... ProgressPanel.abortRequestedFinished=Abort requested, but the execution seems to be already finished. ProgressPanel.abortRequestedNoInterrupt=Abort requested, please wait... (note: couldn't interrupt the thread) +ProgressPanel.populateStatusItem.resourceObjectActivity={0} ({1}) on {2} ProgressTableHeader.Activity=Activity ProgressTableHeader.ResourceObject=Resource object (if applicable) ProgressTableHeader.Status=Status @@ -4269,4 +4278,5 @@ PendingOperationPanel.attempt=Attempt: PendingOperationPanel.lastAttemptTimestamp=Last attempt: PendingOperationPanel.completionTimestamp=Completed: pageForgetPassword.message.user.not.found=Reset password failed. Please contact system administrator. -PageCertDefinitions.campaignWasCreated=Certification campaign "{0}" was created. \ No newline at end of file +PageCertDefinitions.campaignWasCreated=Certification campaign "{0}" was created. +StatisticsDto.getLastMessage.none=none \ No newline at end of file From f700fdd6f230d72b69185f8ed5ae3c37b0322360 Mon Sep 17 00:00:00 2001 From: skublik Date: Wed, 31 Oct 2018 14:49:40 +0100 Subject: [PATCH 2/5] removing small mistakes in code --- .../midpoint/gui/impl/component/form/TriStateFormGroup.java | 4 ++-- .../midpoint/web/component/assignment/AssignmentPanel.java | 2 +- .../src/main/resources/static/less/midpoint-theme.less | 6 ++++++ 3 files changed, 9 insertions(+), 3 deletions(-) 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 5819d5e34c0..a18db5dfd16 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 @@ -137,7 +137,7 @@ public boolean isVisible() { valueWrapper.add(feedback); } - public CheckBox getValue(){ - return (CheckBox) get(ID_VALUE_WRAPPER + ":" + ID_VALUE); + public TriStateComboPanel getValue(){ + return (TriStateComboPanel) get(createComponentPath(ID_PROPERTY_LABEL, ID_ROW, ID_VALUE_WRAPPER, ID_VALUE)); } } 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 ed9dd1cb26f..41919b66ba9 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 @@ -194,7 +194,7 @@ protected WebMarkupContainer initButtonToolbar(String id) { if(buttonToolbar == null) { return super.initButtonToolbar(id); } - return initCustomButtonToolbar(id); + return buttonToolbar; } }; diff --git a/gui/admin-gui/src/main/resources/static/less/midpoint-theme.less b/gui/admin-gui/src/main/resources/static/less/midpoint-theme.less index 42d3cb5578d..83c688d93ef 100644 --- a/gui/admin-gui/src/main/resources/static/less/midpoint-theme.less +++ b/gui/admin-gui/src/main/resources/static/less/midpoint-theme.less @@ -1410,4 +1410,10 @@ th.countLabel{ .shopping-cart-icon > .badge { //fix for bug in firefox margin-left: -10px !important; } +} + +@media (max-width: 767px) { + .content-wrapper { + width: 100%; + } } \ No newline at end of file From efeedacc17278ac4adc4f773a17b7bc451450631 Mon Sep 17 00:00:00 2001 From: skublik Date: Wed, 31 Oct 2018 15:00:38 +0100 Subject: [PATCH 3/5] functions for adding file or syslog appenders --- .../gui/api/util/WebComponentUtil.java | 5 +- .../MultivalueContainerListPanel.java | 2 +- .../LoggingConfigurationTabPanel.html | 7 + .../LoggingConfigurationTabPanel.java | 217 ++++++++++++------ .../web/component/data/BoxedTablePanel.java | 8 + .../prism/ContainerWrapperFactory.java | 12 +- .../localization/Midpoint.properties | 7 +- .../resources/localization/schema.properties | 16 ++ .../xml/ns/public/common/common-core-3.xsd | 106 ++++++++- 9 files changed, 298 insertions(+), 82 deletions(-) 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 0bbb755de60..e5ac8f39205 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 @@ -1617,9 +1617,8 @@ public static String createDefaultColoredIcon(QName objec return GuiStyleConstants.CLASS_OBJECT_SHADOW_ICON_COLORED; } else if (QNameUtil.match(PolicyRuleType.COMPLEX_TYPE, objectType)) { return GuiStyleConstants.CLASS_POLICY_RULES_ICON_COLORED; - } else if (QNameUtil.match(ObjectPolicyConfigurationType.COMPLEX_TYPE, objectType)) { - return GuiStyleConstants.CLASS_SYSTEM_CONFIGURATION_ICON_COLORED; - } else if (QNameUtil.match(GlobalPolicyRuleType.COMPLEX_TYPE, objectType)) { + } else if (QNameUtil.match(ObjectPolicyConfigurationType.COMPLEX_TYPE, objectType) || QNameUtil.match(GlobalPolicyRuleType.COMPLEX_TYPE, objectType) + || QNameUtil.match(FileAppenderConfigurationType.COMPLEX_TYPE, objectType) || QNameUtil.match(SyslogAppenderConfigurationType.COMPLEX_TYPE, objectType)) { return GuiStyleConstants.CLASS_SYSTEM_CONFIGURATION_ICON_COLORED; } else { return ""; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanel.java index 013f67a25ad..c864146b127 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanel.java @@ -337,7 +337,7 @@ private MultivalueContainerListDataProvider getDataProvider() { } - private IModel createStyleClassModelForNewObjectIcon() { + protected IModel createStyleClassModelForNewObjectIcon() { return new AbstractReadOnlyModel() { private static final long serialVersionUID = 1L; 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 36b77f01f0d..b3960889fd2 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 @@ -54,6 +54,13 @@
+ + +
+
+
+ + \ 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 b0fe822594f..d2f2e373b7d 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 @@ -20,13 +20,24 @@ import java.util.Arrays; import java.util.List; +import javax.xml.namespace.QName; + import org.apache.commons.lang.StringUtils; +import org.apache.wicket.AttributeModifier; import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.behavior.AttributeAppender; +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.list.ListItem; +import org.apache.wicket.markup.html.panel.Fragment; +import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; +import org.apache.wicket.model.StringResourceModel; import com.evolveum.midpoint.gui.api.component.BasePanel; import com.evolveum.midpoint.gui.api.component.DisplayNamePanel; @@ -37,52 +48,43 @@ import com.evolveum.midpoint.gui.impl.component.MultivalueContainerListPanel; import com.evolveum.midpoint.gui.impl.component.MultivalueContainerListPanelWithDetailsPanel; import com.evolveum.midpoint.gui.impl.component.data.column.EditableLinkPropertyWrapperColumn; -import com.evolveum.midpoint.gui.impl.component.data.column.EditablePropertyWrapperColumn; +import com.evolveum.midpoint.gui.impl.component.input.QNameIChoiceRenderer; import com.evolveum.midpoint.gui.impl.model.PropertyWrapperFromContainerValueWrapperModel; import com.evolveum.midpoint.gui.impl.model.RealContainerValueFromContainerValueWrapperModel; import com.evolveum.midpoint.gui.impl.model.RealValueFromSingleValuePropertyWrapperModel; -import com.evolveum.midpoint.prism.PrismContainer; import com.evolveum.midpoint.prism.PrismContainerDefinition; import com.evolveum.midpoint.prism.PrismContainerValue; import com.evolveum.midpoint.prism.path.ItemPath; -import com.evolveum.midpoint.prism.query.AllFilter; import com.evolveum.midpoint.prism.query.ObjectPaging; import com.evolveum.midpoint.prism.query.ObjectQuery; -import com.evolveum.midpoint.prism.query.TypeFilter; -import com.evolveum.midpoint.task.api.Task; +import com.evolveum.midpoint.util.QNameUtil; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.web.component.AjaxSubmitButton; import com.evolveum.midpoint.web.component.data.column.CheckBoxHeaderColumn; import com.evolveum.midpoint.web.component.data.column.IconColumn; import com.evolveum.midpoint.web.component.data.column.InlineMenuButtonColumn; import com.evolveum.midpoint.web.component.data.column.LinkColumn; import com.evolveum.midpoint.web.component.form.Form; +import com.evolveum.midpoint.web.component.input.DropDownChoicePanel; import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem; -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.ContainerWrapperFactory; import com.evolveum.midpoint.web.component.prism.ItemVisibility; -import com.evolveum.midpoint.web.component.prism.ItemWrapper; -import com.evolveum.midpoint.web.component.prism.PrismContainerHeaderPanel; import com.evolveum.midpoint.web.component.prism.PrismContainerPanel; import com.evolveum.midpoint.web.component.prism.PropertyWrapper; -import com.evolveum.midpoint.web.component.search.SearchFactory; import com.evolveum.midpoint.web.component.search.SearchItemDefinition; +import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.web.model.ContainerWrapperFromObjectWrapperModel; import com.evolveum.midpoint.web.session.PageStorage; import com.evolveum.midpoint.web.session.UserProfileStorage; import com.evolveum.midpoint.web.session.UserProfileStorage.TableId; import com.evolveum.midpoint.xml.ns._public.common.common_3.AppenderConfigurationType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.AreaCategoryType; import com.evolveum.midpoint.xml.ns._public.common.common_3.AuditingConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ClassLoggerConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.FileAppenderConfigurationType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.LifecycleStateModelType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.LifecycleStateType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.LoggingComponentType; import com.evolveum.midpoint.xml.ns._public.common.common_3.LoggingConfigurationType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectPolicyConfigurationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.SyslogAppenderConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType; /** @@ -98,6 +100,11 @@ public class LoggingConfigurationTabPanel extends BasePanel> model) { super(id, model); @@ -247,11 +254,55 @@ protected List initSearchableItems( return defs; } + + @Override + protected WebMarkupContainer initButtonToolbar(String contentAreaId) { + Fragment searchContainer = new Fragment(contentAreaId, ID_BUTTON_TOOLBAR_FRAGMENT, LoggingConfigurationTabPanel.this); + + Form appenderTypeForm = new Form(ID_CHOICE_APPENDER_TYPE_FORM); + searchContainer.add(appenderTypeForm); + + AjaxSubmitButton newObjectIcon = new AjaxSubmitButton(ID_NEW_ITEM_BUTTON, new Model<>("")) { + + private static final long serialVersionUID = 1L; + + @Override + protected void onSubmit(AjaxRequestTarget target, org.apache.wicket.markup.html.form.Form form) { + newItemPerformed(target); + } + }; + + newObjectIcon.add(new VisibleEnableBehaviour() { + private static final long serialVersionUID = 1L; + + @Override + public boolean isVisible() { + return enableActionNewObject(); + } + + @Override + public boolean isEnabled() { + return isNewObjectButtonEnabled(); + } + }); + newObjectIcon.add(AttributeModifier.append("class", createStyleClassModelForNewObjectIcon())); + appenderTypeForm.add(newObjectIcon); + List appendersChoicesList = new ArrayList(); + appendersChoicesList.add(FileAppenderConfigurationType.COMPLEX_TYPE); + appendersChoicesList.add(SyslogAppenderConfigurationType.COMPLEX_TYPE); + DropDownChoicePanel appenderChoise = new DropDownChoicePanel(ID_APPENDERS_CHOICE, new Model(FileAppenderConfigurationType.COMPLEX_TYPE), Model.of(appendersChoicesList), + new QNameIChoiceRenderer("LoggingConfigurationTabPanel." + ID_APPENDERS_CHOICE)); + appenderChoise.setOutputMarkupId(true); + appenderTypeForm.addOrReplace(appenderChoise); + return searchContainer; + } + }; add(appendersMultivalueContainerListPanel); IModel> auditModel = - new ContainerWrapperFromObjectWrapperModel(Model.of(getModelObject().getObjectWrapper()), new ItemPath(SystemConfigurationType.F_LOGGING, LoggingConfigurationType.F_AUDITING)); + new ContainerWrapperFromObjectWrapperModel(Model.of(getModelObject().getObjectWrapper()), + new ItemPath(SystemConfigurationType.F_LOGGING, LoggingConfigurationType.F_AUDITING)); PrismContainerPanel auditPanel = new PrismContainerPanel(ID_AUDITING, auditModel, true, new Form<>("form"), null, getPageBase()); add(auditPanel); setOutputMarkupId(true); @@ -375,7 +426,16 @@ private void loggerEditPerformed(AjaxRequestTarget target, IModel appenders = (MultivalueContainerListPanelWithDetailsPanel) get(ID_APPENDERS); - PrismContainerValue newObjectPolicy = appenders.getModelObject().getItem().createNewValue(); + DropDownChoicePanel appendersChoice = (DropDownChoicePanel) getAppendersMultivalueContainerListPanel().getItemTable().getFooterButtonToolbar().get(createComponentPath(ID_CHOICE_APPENDER_TYPE_FORM ,ID_APPENDERS_CHOICE)); + PrismContainerValue newObjectPolicy = null; + if(QNameUtil.match(appendersChoice.getModel().getObject(), FileAppenderConfigurationType.COMPLEX_TYPE)){ + newObjectPolicy = new FileAppenderConfigurationType().asPrismContainerValue(); + } else { + newObjectPolicy = new SyslogAppenderConfigurationType().asPrismContainerValue(); + } + newObjectPolicy.setParent(appenders.getModelObject().getItem()); + newObjectPolicy.setPrismContext(getPageBase().getPrismContext()); + ContainerValueWrapper newAppenderContainerWrapper = getAppendersMultivalueContainerListPanel().createNewItemContainerValueWrapper(newObjectPolicy, appenders.getModel()); newAppenderContainerWrapper.setShowEmpty(true, false); newAppenderContainerWrapper.computeStripes(); @@ -401,51 +461,38 @@ public AppenderConfigurationType getObject() { }; return new DisplayNamePanel(displayNamePanelId, displayNameModel); } - - @Override - protected void addBasicContainerValuePanel(String idPanel) { - Form form = new Form<>("form"); - ItemPath itemPath = getModelObject().getPath(); - IModel> model = getModel(); - model.getObject().getContainer().setShowOnTopLevel(true); - ContainerValuePanel panel; - if(item.getModelObject().getContainerValue().getValue() instanceof FileAppenderConfigurationType) { - - FileAppenderConfigurationType appender = (FileAppenderConfigurationType) item.getModelObject().getContainerValue().getValue(); - ContainerWrapperFactory cwf = new ContainerWrapperFactory(getPageBase()); - Task task = LoggingConfigurationTabPanel.this.getPageBase().createSimpleTask("create appender"); - ContainerWrapper wrapper = cwf.createContainerWrapper(item.getModelObject().getContainer().getObjectWrapper(), (PrismContainer)appender.asPrismContainerValue().getContainer(), item.getModelObject().getObjectStatus(), - new ItemPath(FileAppenderConfigurationType.COMPLEX_TYPE), task); - wrapper.setShowOnTopLevel(true); - - ContainerValueWrapper value = cwf.createContainerValueWrapper(wrapper, (PrismContainerValue)appender.asPrismContainerValue(), item.getModelObject().getObjectStatus(), item.getModelObject().getStatus(), new ItemPath(FileAppenderConfigurationType.COMPLEX_TYPE), task); - IModel> valueModel = new LoadableModel>(false) { - - private static final long serialVersionUID = 1L; - - @Override - protected ContainerValueWrapper load() { - return value; - } - }; - - panel = new ContainerValuePanel(idPanel, valueModel, true, form, - itemWrapper -> getBasicTabVisibity(itemWrapper, itemPath), getPageBase()); - } else { - panel = new ContainerValuePanel(idPanel, getModel(), true, form, - itemWrapper -> getBasicTabVisibity(itemWrapper, itemPath), getPageBase()); - } - add(panel); - } - - @Override - protected ItemVisibility getBasicTabVisibity(ItemWrapper itemWrapper, ItemPath parentPath) { - return ItemVisibility.VISIBLE; - } }; return detailsPanel; } + private boolean isFileAppender(IModel appender) { + if(appender == null || appender.getObject() == null) { + return false; + } + return (appender.getObject() instanceof FileAppenderConfigurationType); + } + + private boolean isSyslogAppender(IModel appender) { + if(appender == null || appender.getObject() == null) { + return false; + } + return (appender.getObject() instanceof SyslogAppenderConfigurationType); + } + + private String getInputCssClass() { + return "col-xs-10"; + } + + private Label createHeader(String id, String displayName) { + if (StringUtils.isEmpty(displayName)) { + displayName = "displayName.not.set"; + } + StringResourceModel headerLabelModel = createStringResource(displayName); + Label header = new Label(id, headerLabelModel); + header.add(AttributeAppender.prepend("class", "prism-title pull-left")); + return header; + } + private MultivalueContainerListPanelWithDetailsPanel getAppendersMultivalueContainerListPanel(){ return ((MultivalueContainerListPanelWithDetailsPanel)get(ID_APPENDERS)); } @@ -484,17 +531,18 @@ public String getObject() { } }); - columns.add(new LinkColumn>(createStringResource("PolicyRulesPanel.nameColumn")){ + columns.add(new LinkColumn>(createStringResource("LoggingConfigurationTabPanel.appender.nameColumn")){ private static final long serialVersionUID = 1L; @Override protected IModel createLinkModel(IModel> rowModel) { - AppenderConfigurationType appender = rowModel.getObject().getContainerValue().getValue(); - String name = appender.getName(); - if (StringUtils.isBlank(name)) { + PropertyWrapperFromContainerValueWrapperModel property = + new PropertyWrapperFromContainerValueWrapperModel<>(rowModel.getObject(), AppenderConfigurationType.F_NAME); + RealValueFromSingleValuePropertyWrapperModel name = new RealValueFromSingleValuePropertyWrapperModel<>(property); + if (StringUtils.isBlank(name.getObject())) { return createStringResource("AssignmentPanel.noName"); } - return Model.of(name); + return Model.of(name.getObject()); } @Override @@ -503,8 +551,49 @@ public void onClick(AjaxRequestTarget target, IModel, String>(createStringResource("LoggingConfigurationTabPanel.appender.patternColumn")){ + private static final long serialVersionUID = 1L; + + @Override + public void populateItem(Item>> item, String componentId, + final IModel> rowModel) { + PropertyWrapperFromContainerValueWrapperModel property = + new PropertyWrapperFromContainerValueWrapperModel<>(rowModel.getObject(), AppenderConfigurationType.F_PATTERN); + RealValueFromSingleValuePropertyWrapperModel pattern = new RealValueFromSingleValuePropertyWrapperModel<>(property); + item.add(new Label(componentId, Model.of(pattern.getObject()))); + } + + @Override + public String getCssClass() { + return " col-md-5 "; + } + }); + + columns.add(new AbstractColumn, String>(createStringResource("LoggingConfigurationTabPanel.appender.typeColumn")){ + private static final long serialVersionUID = 1L; + + @Override + public void populateItem(Item>> item, String componentId, + final IModel> rowModel) { + RealContainerValueFromContainerValueWrapperModel appender = + new RealContainerValueFromContainerValueWrapperModel<>(rowModel); + String type = ""; + if(appender != null && appender.getObject() instanceof FileAppenderConfigurationType) { + type = "File appender"; + } else if(appender != null && appender.getObject() instanceof SyslogAppenderConfigurationType) { + type = "Syslog appender"; + } + item.add(new Label(componentId, Model.of(type))); + } + }); + List menuActionsList = getAppendersMultivalueContainerListPanel().getDefaultMenuActions(); - columns.add(new InlineMenuButtonColumn<>(menuActionsList, getPageBase())); + columns.add(new InlineMenuButtonColumn(menuActionsList, getPageBase()) { + @Override + public String getCssClass() { + return " col-md-1 "; + } + }); return columns; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/BoxedTablePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/BoxedTablePanel.java index afeb32d0c6c..804dd477dd7 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/BoxedTablePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/BoxedTablePanel.java @@ -193,6 +193,10 @@ protected WebMarkupContainer createHeader(String headerId) { protected WebMarkupContainer createFooter(String footerId) { return new PagingFooter(footerId, ID_PAGING_FOOTER, this, this); } + + public Component getFooterButtonToolbar() { + return ((PagingFooter) getFooter()).getFooterButtonToolbar(); + } public Component getFooterMenu() { return ((PagingFooter) getFooter()).getFooterMenu(); @@ -277,6 +281,10 @@ protected void pageSizeChanged(AjaxRequestTarget target) { footerContainer.add(menu); add(footerContainer); } + + public Component getFooterButtonToolbar() { + return get(ID_BUTTON_TOOLBAR); + } public Component getFooterMenu() { return get(ID_FOOTER_CONTAINER).get(ID_MENU); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerWrapperFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerWrapperFactory.java index 32927ca1bfd..bea57209d6c 100755 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerWrapperFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerWrapperFactory.java @@ -22,6 +22,7 @@ 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.model.RealContainerValueFromContainerValueWrapperModel; import com.evolveum.midpoint.prism.*; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.path.ItemPathSegment; @@ -297,8 +298,17 @@ public List createP new Object[] { containerWrapper.getItem().getElementName() }); return properties; } - Collection propertyDefinitions = definition.getDefinitions(); + + if(containerWrapper.getPath().equals(new ItemPath(SystemConfigurationType.F_LOGGING, LoggingConfigurationType.F_APPENDER))) { + RealContainerValueFromContainerValueWrapperModel value = new RealContainerValueFromContainerValueWrapperModel(cWrapper); + if(value != null || value.getObject() != null || value.getObject().asPrismContainerValue()!= null + || value.getObject().asPrismContainerValue().getComplexTypeDefinition() != null + || value.getObject().asPrismContainerValue().getComplexTypeDefinition().getDefinitions() != null) { + propertyDefinitions = value.getObject().asPrismContainerValue().getComplexTypeDefinition().getDefinitions(); + } + } + List propertyOrReferenceWrappers = new ArrayList<>(); List> containerWrappers = new ArrayList<>(); propertyDefinitions.forEach(itemDef -> { diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint.properties b/gui/admin-gui/src/main/resources/localization/Midpoint.properties index 74d0b291c78..05b763b4c51 100755 --- a/gui/admin-gui/src/main/resources/localization/Midpoint.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint.properties @@ -4279,4 +4279,9 @@ PendingOperationPanel.lastAttemptTimestamp=Last attempt: PendingOperationPanel.completionTimestamp=Completed: pageForgetPassword.message.user.not.found=Reset password failed. Please contact system administrator. PageCertDefinitions.campaignWasCreated=Certification campaign "{0}" was created. -StatisticsDto.getLastMessage.none=none \ No newline at end of file +StatisticsDto.getLastMessage.none=none +LoggingConfigurationTabPanel.appendersChoice.SyslogAppenderConfigurationType=Syslog appender +LoggingConfigurationTabPanel.appendersChoice.FileAppenderConfigurationType=File appender +LoggingConfigurationTabPanel.appender.nameColumn=Name +LoggingConfigurationTabPanel.appender.patternColumn=Pattern +LoggingConfigurationTabPanel.appender.typeColumn=Type \ No newline at end of file diff --git a/infra/schema/src/main/resources/localization/schema.properties b/infra/schema/src/main/resources/localization/schema.properties index 4831cb042eb..e395bb841b3 100755 --- a/infra/schema/src/main/resources/localization/schema.properties +++ b/infra/schema/src/main/resources/localization/schema.properties @@ -57,6 +57,8 @@ ActivityType.PROJECTOR=Computing projections of the focus object ActivityType.RESOURCE_OBJECT_OPERATION=Operation on resource object ActivityType.WORKFLOWS=Considering or starting approval workflows AdminGuiConfigurationRoleManagementType.assignmentApprovalRequestLimit=Assignment approval request limit +AppenderConfigurationType.pattern=Pattern +AppenderConfigurationType.name=Name ApplicablePoliciesType.policyGroupRef=Policy group ApprovalCompositionStrategyType.order=Order ApprovalCompositionStrategyType.exclusive=Exclusive @@ -261,6 +263,13 @@ DistinctSearchOptionType.NEVER=Never EscalateWorkItemActionType.escalationLevelName=Escalation level name EscalateWorkItemActionType.escalationLevelDisplayName=Escalation level display name FeedbackMessagesHookType.operationResultHook=Operation result hook +FileAppenderConfigurationType.details=File appender configuration +FileAppenderConfigurationType.fileName=File name +FileAppenderConfigurationType.filePattern=File pattern +FileAppenderConfigurationType.maxHistory=Max history +FileAppenderConfigurationType.maxFileSize=Max file size +FileAppenderConfigurationType.append=Append +FileAppenderConfigurationType.prudent=Prudent FileConfigurationType.details=File configuration FileConfigurationType.name=Name FileConfigurationType.file=File @@ -634,6 +643,13 @@ SynchronizationSituationType.LINKED=Linked SynchronizationSituationType.null=Choose One SynchronizationSituationType.UNLINKED=Unlinked SynchronizationSituationType.UNMATCHED=Unmatched +SyslogAppenderConfigurationType.details=Syslog appender configuration +SyslogAppenderConfigurationType.syslogHost=Syslog host +SyslogAppenderConfigurationType.port=Port +SyslogAppenderConfigurationType.facility=Facility +SyslogAppenderConfigurationType.suffixPattern=Suffix pattern +SyslogAppenderConfigurationType.stackTracePattern=Stack trace pattern +SyslogAppenderConfigurationType.throwableExcluded=Throwable excluded ThreadStopActionType.CLOSE=Close ThreadStopActionType.RESCHEDULE=Reschedule ThreadStopActionType.RESTART=Restart 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 b05be3c4962..4ecefe2eaed 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 @@ -16335,8 +16335,19 @@ - + + + + AppenderConfigurationType.pattern + + + + + + AppenderConfigurationType.name + + @@ -16346,21 +16357,55 @@ true + FileAppenderConfigurationType.details - - - - - + + + + FileAppenderConfigurationType.fileName + + + + + + + FileAppenderConfigurationType.filePattern + + + + + + + FileAppenderConfigurationType.maxHistory + + + + + + + FileAppenderConfigurationType.maxFileSize + + + + + + + FileAppenderConfigurationType.append + + + Prudent mode allows remote and shared file destinations (see https://logback.qos.ch/manual/appenders.html#prudentWithRolling ) + + FileAppenderConfigurationType.prudent + @@ -16372,17 +16417,54 @@ true + SyslogAppenderConfigurationType.details - - - - - - + + + + SyslogAppenderConfigurationType.syslogHost + + + + + + + SyslogAppenderConfigurationType.port + + + + + + + SyslogAppenderConfigurationType.facility + + + + + + + SyslogAppenderConfigurationType.suffixPattern + + + + + + + SyslogAppenderConfigurationType.stackTracePattern + + + + + + + SyslogAppenderConfigurationType.throwableExcluded + + + From 74890d8dff819457354c1bdaa092ec3af85c41a8 Mon Sep 17 00:00:00 2001 From: skublik Date: Wed, 31 Oct 2018 15:24:23 +0100 Subject: [PATCH 4/5] MID-4912 removing mistakes in html for summary panel --- .../evolveum/midpoint/web/component/AbstractSummaryPanel.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/AbstractSummaryPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/AbstractSummaryPanel.html index 6dfda949f6d..ad08cffa89e 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/AbstractSummaryPanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/AbstractSummaryPanel.html @@ -22,7 +22,7 @@ - () + () @@ -33,7 +33,7 @@ - + From 4551369a892a03913b8591b25f10575ec58f801d Mon Sep 17 00:00:00 2001 From: skublik Date: Wed, 31 Oct 2018 16:01:48 +0100 Subject: [PATCH 5/5] MID-4912 removing mistakes in html for resource choice on debug page --- .../midpoint/web/page/admin/configuration/PageDebugList.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageDebugList.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageDebugList.html index 11e3e575a44..9bf464a8e80 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageDebugList.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageDebugList.html @@ -42,7 +42,7 @@
-
+