From 357cda9039eebca87ba184ad3cc79d714835058d Mon Sep 17 00:00:00 2001 From: Katarina Valalikova Date: Wed, 11 Mar 2020 22:41:29 +0100 Subject: [PATCH] GUI support for setting debug for logback for making diagnosis easier. --- .../gui/api/component/DisplayNamePanel.java | 492 ++++---- .../LoggingConfigurationTabPanel.java | 1026 +++++++++-------- .../component/SystemConfigPanel.java | 150 +-- 3 files changed, 848 insertions(+), 820 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/DisplayNamePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/DisplayNamePanel.java index 86a4539b87a..23f0812fb85 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/DisplayNamePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/DisplayNamePanel.java @@ -1,238 +1,254 @@ -/* - * Copyright (c) 2010-2017 Evolveum and contributors - * - * This work is dual-licensed under the Apache License 2.0 - * and European Union Public License. See LICENSE file for details. - */ -package com.evolveum.midpoint.gui.api.component; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.namespace.QName; - -import org.apache.commons.lang3.StringUtils; -import org.apache.wicket.AttributeModifier; -import org.apache.wicket.ajax.AjaxRequestTarget; -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.list.ListView; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.Model; -import org.apache.wicket.model.PropertyModel; - -import com.evolveum.midpoint.gui.api.util.WebComponentUtil; -import com.evolveum.midpoint.prism.Containerable; -import com.evolveum.midpoint.prism.PrismProperty; -import com.evolveum.midpoint.prism.polystring.PolyString; -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.AjaxButton; -import com.evolveum.midpoint.web.component.util.VisibleBehaviour; -import com.evolveum.midpoint.xml.ns._public.common.common_3.*; - -public class DisplayNamePanel extends BasePanel { - - private static final long serialVersionUID = 1L; - - private static final Trace LOGGER = TraceManager.getTrace(DisplayNamePanel.class); - - private final static String ID_TYPE_IMAGE = "typeImage"; - private final static String ID_DISPLAY_NAME = "displayName"; - private final static String ID_IDENTIFIER = "identifier"; - private final static String ID_RELATION = "relation"; - private final static String ID_KIND_INTENT = "kindIntent"; - private final static String ID_DESCRIPTION = "description"; - private final static String ID_DESCRIPTION_LABELS = "descriptionLabels"; - private final static String ID_NAVIGATE_TO_OBJECT = "navigateToObject"; - - public DisplayNamePanel(String id, IModel model) { - super(id, model); - - } - - @Override - protected void onInitialize() { - super.onInitialize(); - initLayout(); - } - - private void initLayout() { - WebMarkupContainer typeImage = new WebMarkupContainer(ID_TYPE_IMAGE); - typeImage.setOutputMarkupId(true); - typeImage.add(AttributeModifier.append("class", createImageModel())); - add(typeImage); - - Label name = new Label(ID_DISPLAY_NAME, createHeaderModel()); - name.setOutputMarkupId(true); - add(name); - - Label identifier = new Label(ID_IDENTIFIER, createIdentifierModel()); - identifier.setOutputMarkupId(true); - identifier.add(new VisibleBehaviour(() -> isIdentifierVisible())); - add(identifier); - - AjaxButton navigateToObject = new AjaxButton(ID_NAVIGATE_TO_OBJECT) { - @Override - public void onClick(AjaxRequestTarget ajaxRequestTarget) { - if (DisplayNamePanel.this.getModelObject() instanceof ObjectType) { - ObjectType o = (ObjectType) DisplayNamePanel.this.getModelObject(); - ObjectReferenceType ort = new ObjectReferenceType(); - ort.setOid(o.getOid()); - ort.setType(WebComponentUtil.classToQName(DisplayNamePanel.this.getPageBase().getPrismContext(), o.getClass())); - WebComponentUtil.dispatchToObjectDetailsPage(ort, DisplayNamePanel.this, false); - } - } - }; - navigateToObject.add(new VisibleBehaviour(() -> DisplayNamePanel.this.getModelObject() instanceof ObjectType && - WebComponentUtil.getObjectDetailsPage(((ObjectType) DisplayNamePanel.this.getModelObject()).getClass()) != null)); - navigateToObject.setOutputMarkupId(true); - add(navigateToObject); - - Label relation = new Label(ID_RELATION, Model.of(getRelationLabel())); - relation.setOutputMarkupId(true); - relation.add(new VisibleBehaviour(() -> isRelationVisible())); - add(relation); - - IModel kindIntentLabelModel = getKindIntentLabelModel(); - Label kindIntent = new Label(ID_KIND_INTENT, kindIntentLabelModel); - kindIntent.setOutputMarkupId(true); - kindIntent.add(new VisibleBehaviour(() -> isKindIntentVisible(kindIntentLabelModel))); - add(kindIntent); - - ListView descriptionLabels = new ListView(ID_DESCRIPTION_LABELS, getDescriptionLabelsModel()) { - - private static final long serialVersionUID = 1L; - - @Override - protected void populateItem(ListItem item) { - item.add(new Label(ID_DESCRIPTION, item.getModel())); - } - }; - - add(descriptionLabels); - -// add(new Label(ID_DESCRIPTION, getDescriptionLabelsModel())); -// add(new Label(ID_PENDING_OPERATION, getPendingOperationLabelModel())); - } - - private boolean isObjectPolicyConfigurationType() { - if (QNameUtil.match(ObjectPolicyConfigurationType.COMPLEX_TYPE, getModelObject().asPrismContainerValue().getComplexTypeDefinition().getTypeName())) { - return true; - } - return false; - } - - protected String createImageModel() { - if (getModelObject() == null) { - return ""; - } - if (ConstructionType.class.isAssignableFrom(getModelObject().getClass())) { - return WebComponentUtil.createDefaultColoredIcon(ResourceType.COMPLEX_TYPE); - } - - return WebComponentUtil.createDefaultColoredIcon(getModelObject().asPrismContainerValue().getComplexTypeDefinition().getTypeName()); - - } - - private IModel createHeaderModel() { - // TODO: align with DisplayNameModel - if (getModelObject() == null) { - return Model.of(""); - } - if (ObjectType.class.isAssignableFrom(getModelObject().getClass())) { - return Model.of(WebComponentUtil.getEffectiveName((ObjectType) getModelObject(), AbstractRoleType.F_DISPLAY_NAME)); - } - if (isObjectPolicyConfigurationType()) { - QName typeValue = WebComponentUtil.getValue(getModel().getObject().asPrismContainerValue(), ObjectPolicyConfigurationType.F_TYPE, QName.class); - ObjectReferenceType objectTemplate = ((ObjectPolicyConfigurationType) getModel().getObject()).getObjectTemplateRef(); - if (objectTemplate == null || objectTemplate.getTargetName() == null) { - return Model.of(""); - } - String objectTemplateNameValue = objectTemplate.getTargetName().toString(); - StringBuilder sb = new StringBuilder(); - if (typeValue != null) { - sb.append(typeValue.getLocalPart()).append(" - "); - } - sb.append(objectTemplateNameValue); - return Model.of(sb.toString()); - } - PrismProperty name = getModelObject().asPrismContainerValue().findProperty(ObjectType.F_NAME); - if (name == null || name.isEmpty()) { - return Model.of(""); - } - return Model.of(WebComponentUtil.getTranslatedPolyString(name.getRealValue())); - } - - private IModel createIdentifierModel() { - if (getModelObject() == null) { - return Model.of(""); - } - if (AbstractRoleType.class.isAssignableFrom(getModelObject().getClass())) { - return Model.of(WebComponentUtil.getEffectiveName((ObjectType) getModelObject(), AbstractRoleType.F_IDENTIFIER)); - } - return Model.of(""); - } - - private boolean isIdentifierVisible() { - if (getModelObject() == null) { - return false; - } - if (AbstractRoleType.class.isAssignableFrom(getModelObject().getClass())) { - return getModelObject().asPrismContainerValue().findProperty(AbstractRoleType.F_IDENTIFIER) != null; - } - return false; - } - - // TODO: maybe move relation methods to subclass if we want this panel to be really reusable - - private boolean isRelationVisible() { - return !WebComponentUtil.isDefaultRelation(getRelation()); - } - - private boolean isKindIntentVisible(IModel kindIntentLabelModel) { - return kindIntentLabelModel != null && StringUtils.isNotEmpty(kindIntentLabelModel.getObject()); - } - - private String getRelationLabel() { - QName relation = getRelation(); - if (relation == null) { - return ""; - } - // TODO: localization? - return relation.getLocalPart(); - } - - protected IModel getKindIntentLabelModel() { - // To be overridden in subclasses - return Model.of(""); - } - - protected IModel getDescriptionLabelModel() { - if (getModel().getObject() != null && getModel().getObject().asPrismContainerValue().contains(ObjectType.F_DESCRIPTION)) { - return new PropertyModel(getModel(), ObjectType.F_DESCRIPTION.getLocalPart()); - } - return null; - } - - protected IModel> getDescriptionLabelsModel() { - List descriptionLabels = new ArrayList(); - IModel des = getDescriptionLabelModel(); - if (des != null) { - descriptionLabels.add(des.getObject()); - } - return new IModel>() { - - @Override - public List getObject() { - return descriptionLabels; - } - }; - } - - protected QName getRelation() { - // To be overridden in subclasses - return null; - } -} +/* + * Copyright (c) 2010-2017 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.gui.api.component; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.namespace.QName; + +import com.evolveum.midpoint.gui.api.model.ReadOnlyModel; + +import com.evolveum.midpoint.util.DOMUtil; + +import com.evolveum.prism.xml.ns._public.types_3.PolyStringType; + +import org.apache.commons.lang3.StringUtils; +import org.apache.wicket.AttributeModifier; +import org.apache.wicket.ajax.AjaxRequestTarget; +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.list.ListView; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.PropertyModel; + +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.prism.Containerable; +import com.evolveum.midpoint.prism.PrismProperty; +import com.evolveum.midpoint.prism.polystring.PolyString; +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.AjaxButton; +import com.evolveum.midpoint.web.component.util.VisibleBehaviour; +import com.evolveum.midpoint.xml.ns._public.common.common_3.*; + +public class DisplayNamePanel extends BasePanel { + + private static final long serialVersionUID = 1L; + + private static final Trace LOGGER = TraceManager.getTrace(DisplayNamePanel.class); + + private final static String ID_TYPE_IMAGE = "typeImage"; + private final static String ID_DISPLAY_NAME = "displayName"; + private final static String ID_IDENTIFIER = "identifier"; + private final static String ID_RELATION = "relation"; + private final static String ID_KIND_INTENT = "kindIntent"; + private final static String ID_DESCRIPTION = "description"; + private final static String ID_DESCRIPTION_LABELS = "descriptionLabels"; + private final static String ID_NAVIGATE_TO_OBJECT = "navigateToObject"; + + public DisplayNamePanel(String id, IModel model) { + super(id, model); + + } + + @Override + protected void onInitialize() { + super.onInitialize(); + initLayout(); + } + + private void initLayout() { + WebMarkupContainer typeImage = new WebMarkupContainer(ID_TYPE_IMAGE); + typeImage.setOutputMarkupId(true); + typeImage.add(AttributeModifier.append("class", createImageModel())); + add(typeImage); + + Label name = new Label(ID_DISPLAY_NAME, createHeaderModel()); + name.setOutputMarkupId(true); + add(name); + + Label identifier = new Label(ID_IDENTIFIER, createIdentifierModel()); + identifier.setOutputMarkupId(true); + identifier.add(new VisibleBehaviour(() -> isIdentifierVisible())); + add(identifier); + + AjaxButton navigateToObject = new AjaxButton(ID_NAVIGATE_TO_OBJECT) { + @Override + public void onClick(AjaxRequestTarget ajaxRequestTarget) { + if (DisplayNamePanel.this.getModelObject() instanceof ObjectType) { + ObjectType o = (ObjectType) DisplayNamePanel.this.getModelObject(); + ObjectReferenceType ort = new ObjectReferenceType(); + ort.setOid(o.getOid()); + ort.setType(WebComponentUtil.classToQName(DisplayNamePanel.this.getPageBase().getPrismContext(), o.getClass())); + WebComponentUtil.dispatchToObjectDetailsPage(ort, DisplayNamePanel.this, false); + } + } + }; + navigateToObject.add(new VisibleBehaviour(() -> DisplayNamePanel.this.getModelObject() instanceof ObjectType && + WebComponentUtil.getObjectDetailsPage(((ObjectType) DisplayNamePanel.this.getModelObject()).getClass()) != null)); + navigateToObject.setOutputMarkupId(true); + add(navigateToObject); + + Label relation = new Label(ID_RELATION, Model.of(getRelationLabel())); + relation.setOutputMarkupId(true); + relation.add(new VisibleBehaviour(() -> isRelationVisible())); + add(relation); + + IModel kindIntentLabelModel = getKindIntentLabelModel(); + Label kindIntent = new Label(ID_KIND_INTENT, kindIntentLabelModel); + kindIntent.setOutputMarkupId(true); + kindIntent.add(new VisibleBehaviour(() -> isKindIntentVisible(kindIntentLabelModel))); + add(kindIntent); + + ListView descriptionLabels = new ListView(ID_DESCRIPTION_LABELS, getDescriptionLabelsModel()) { + + private static final long serialVersionUID = 1L; + + @Override + protected void populateItem(ListItem item) { + item.add(new Label(ID_DESCRIPTION, item.getModel())); + } + }; + + add(descriptionLabels); + +// add(new Label(ID_DESCRIPTION, getDescriptionLabelsModel())); +// add(new Label(ID_PENDING_OPERATION, getPendingOperationLabelModel())); + } + + private boolean isObjectPolicyConfigurationType() { + if (QNameUtil.match(ObjectPolicyConfigurationType.COMPLEX_TYPE, getModelObject().asPrismContainerValue().getComplexTypeDefinition().getTypeName())) { + return true; + } + return false; + } + + protected String createImageModel() { + if (getModelObject() == null) { + return ""; + } + if (ConstructionType.class.isAssignableFrom(getModelObject().getClass())) { + return WebComponentUtil.createDefaultColoredIcon(ResourceType.COMPLEX_TYPE); + } + + return WebComponentUtil.createDefaultColoredIcon(getModelObject().asPrismContainerValue().getComplexTypeDefinition().getTypeName()); + + } + + private IModel createHeaderModel() { + // TODO: align with DisplayNameModel + return new ReadOnlyModel(() -> { + if (getModelObject() == null) { + return ""; + } + if (ObjectType.class.isAssignableFrom(getModelObject().getClass())) { + return WebComponentUtil.getEffectiveName((ObjectType) getModelObject(), AbstractRoleType.F_DISPLAY_NAME); + } + if (isObjectPolicyConfigurationType()) { + QName typeValue = WebComponentUtil.getValue(getModel().getObject().asPrismContainerValue(), ObjectPolicyConfigurationType.F_TYPE, QName.class); + ObjectReferenceType objectTemplate = ((ObjectPolicyConfigurationType) getModel().getObject()).getObjectTemplateRef(); + if (objectTemplate == null || objectTemplate.getTargetName() == null) { + return ""; + } + String objectTemplateNameValue = objectTemplate.getTargetName().toString(); + StringBuilder sb = new StringBuilder(); + if (typeValue != null) { + sb.append(typeValue.getLocalPart()).append(" - "); + } + sb.append(objectTemplateNameValue); + return sb.toString(); + } + PrismProperty name = getModelObject().asPrismContainerValue().findProperty(ObjectType.F_NAME); + if (name == null || name.isEmpty()) { + return ""; + } + + if (QNameUtil.match(DOMUtil.XSD_STRING,name.getDefinition().getTypeName())) { + return (String) name.getRealValue(); + } else if (QNameUtil.match(PolyStringType.COMPLEX_TYPE, name.getDefinition().getTypeName())) { + return WebComponentUtil.getTranslatedPolyString((PolyString) name.getRealValue()); + } + + return name.getRealValue().toString(); + }); + + } + + private IModel createIdentifierModel() { + if (getModelObject() == null) { + return Model.of(""); + } + if (AbstractRoleType.class.isAssignableFrom(getModelObject().getClass())) { + return Model.of(WebComponentUtil.getEffectiveName((ObjectType) getModelObject(), AbstractRoleType.F_IDENTIFIER)); + } + return Model.of(""); + } + + private boolean isIdentifierVisible() { + if (getModelObject() == null) { + return false; + } + if (AbstractRoleType.class.isAssignableFrom(getModelObject().getClass())) { + return getModelObject().asPrismContainerValue().findProperty(AbstractRoleType.F_IDENTIFIER) != null; + } + return false; + } + + // TODO: maybe move relation methods to subclass if we want this panel to be really reusable + + private boolean isRelationVisible() { + return !WebComponentUtil.isDefaultRelation(getRelation()); + } + + private boolean isKindIntentVisible(IModel kindIntentLabelModel) { + return kindIntentLabelModel != null && StringUtils.isNotEmpty(kindIntentLabelModel.getObject()); + } + + private String getRelationLabel() { + QName relation = getRelation(); + if (relation == null) { + return ""; + } + // TODO: localization? + return relation.getLocalPart(); + } + + protected IModel getKindIntentLabelModel() { + // To be overridden in subclasses + return Model.of(""); + } + + protected IModel getDescriptionLabelModel() { + if (getModel().getObject() != null && getModel().getObject().asPrismContainerValue().contains(ObjectType.F_DESCRIPTION)) { + return new PropertyModel(getModel(), ObjectType.F_DESCRIPTION.getLocalPart()); + } + return null; + } + + protected IModel> getDescriptionLabelsModel() { + List descriptionLabels = new ArrayList(); + IModel des = getDescriptionLabelModel(); + if (des != null) { + descriptionLabels.add(des.getObject()); + } + return new IModel>() { + + @Override + public List getObject() { + return descriptionLabels; + } + }; + } + + protected QName getRelation() { + // To be overridden in subclasses + return null; + } +} 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 5e61b73e696..d71b3f0e9c4 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 @@ -1,507 +1,519 @@ -/* - * Copyright (c) 2018 Evolveum and contributors - * - * This work is dual-licensed under the Apache License 2.0 - * and European Union Public License. See LICENSE file for details. - */ - -package com.evolveum.midpoint.gui.impl.page.admin.configuration.component; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.xml.namespace.QName; - -import com.evolveum.midpoint.gui.impl.prism.ItemPanelSettings; -import com.evolveum.midpoint.gui.impl.prism.ItemPanelSettingsBuilder; -import com.evolveum.midpoint.model.api.AssignmentObjectRelation; -import com.evolveum.midpoint.schema.constants.MidPointConstants; -import com.evolveum.midpoint.xml.ns._public.common.common_3.*; -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.html.panel.Panel; -import org.apache.wicket.markup.repeater.Item; -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; -import com.evolveum.midpoint.gui.api.page.PageBase; -import com.evolveum.midpoint.gui.api.prism.PrismContainerWrapper; -import com.evolveum.midpoint.gui.api.util.WebComponentUtil; -import com.evolveum.midpoint.gui.impl.component.MultivalueContainerDetailsPanel; -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.AbstractItemWrapperColumn.ColumnType; -import com.evolveum.midpoint.gui.impl.component.data.column.PrismPropertyWrapperColumn; -import com.evolveum.midpoint.gui.impl.component.input.QNameIChoiceRenderer; -import com.evolveum.midpoint.gui.impl.factory.ItemRealValueModel; -import com.evolveum.midpoint.gui.impl.prism.PrismContainerValueWrapper; -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.ObjectQuery; -import com.evolveum.midpoint.util.QNameUtil; -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.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.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.ItemVisibility; -import com.evolveum.midpoint.web.component.search.SearchItemDefinition; -import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; -import com.evolveum.midpoint.web.model.PrismContainerWrapperModel; -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.AuditingConfigurationType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ClassLoggerConfigurationType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.DisplayType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.FileAppenderConfigurationType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.LoggingConfigurationType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.SyslogAppenderConfigurationType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType; - -/** - * @author skublik - */ -public class LoggingConfigurationTabPanel extends BasePanel> { - - private static final long serialVersionUID = 1L; - - private static final Trace LOGGER = TraceManager.getTrace(LoggingConfigurationTabPanel.class); - - private static final String ID_LOGGING = "logging"; - private static final String ID_APPENDERS = "appenders"; - private static final String ID_LOGGERS = "loggers"; - private static final String ID_AUDITING = "audit"; - private static final String ID_NEW_ITEM_BUTTON = "newItemButton"; - private static final String ID_BUTTON_TOOLBAR_FRAGMENT = "buttonToolbarFragment"; - private static final String ID_APPENDERS_CHOICE = "appendersChoice"; - private static final String ID_CHOICE_APPENDER_TYPE_FORM = "choiceAppenderTypeForm"; - - - public LoggingConfigurationTabPanel(String id, IModel> model) { - super(id, model); - } - - @Override - protected void onInitialize() { - super.onInitialize(); - initLayout(); - } - - protected void initLayout() { - try { -// getModelObject().setShowOnTopLevel(true); - ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder(); - builder.visibilityHandler(itemWrapper -> getLoggingVisibility(itemWrapper.getPath())).showOnTopLevel(true); - Panel loggingPanel = getPageBase().initItemPanel(ID_LOGGING, LoggingConfigurationType.COMPLEX_TYPE, getModel(), builder.build()); - add(loggingPanel); - } catch (SchemaException e) { - LOGGER.error("Cannot create panel for logging: {}", e.getMessage(), e); - getSession().error("Cannot create panle for logging"); - } - - TableId tableIdLoggers = UserProfileStorage.TableId.LOGGING_TAB_LOGGER_TABLE; - PageStorage pageStorageLoggers = getPageBase().getSessionStorage().getLoggingConfigurationTabLoggerTableStorage(); - - - PrismContainerWrapperModel loggerModel = PrismContainerWrapperModel.fromContainerWrapper(getModel(), LoggingConfigurationType.F_CLASS_LOGGER); - - MultivalueContainerListPanel loggersMultivalueContainerListPanel = - new MultivalueContainerListPanel(ID_LOGGERS, loggerModel, - tableIdLoggers, pageStorageLoggers) { - - private static final long serialVersionUID = 1L; - - @Override - protected List> postSearch( - List> items) { - return items; - } - - @Override - protected void newItemPerformed(AjaxRequestTarget target, AssignmentObjectRelation relation) { - PrismContainerValue newLogger = loggerModel.getObject().getItem().createNewValue(); - PrismContainerValueWrapper newLoggerWrapper = getLoggersMultivalueContainerListPanel().createNewItemContainerValueWrapper(newLogger, loggerModel.getObject(), target); - loggerEditPerformed(target, Model.of(newLoggerWrapper), null); - } - - @Override - protected void initPaging() { - initLoggerPaging(); - } - - @Override - protected boolean enableActionNewObject() { - return true; - } - - @Override - protected ObjectQuery createQuery() { - return null; - } - - @Override - protected List, String>> createColumns() { - return initLoggersBasicColumns(loggerModel); - } - - @Override - protected void itemPerformedForDefaultAction(AjaxRequestTarget target, - IModel> rowModel, - List> listItems) { - loggerEditPerformed(target, rowModel, listItems); - } - - @Override - protected List initSearchableItems( - PrismContainerDefinition containerDef) { - List defs = new ArrayList<>(); - - return defs; - } - }; - add(loggersMultivalueContainerListPanel); - - TableId tableIdAppenders = UserProfileStorage.TableId.LOGGING_TAB_APPENDER_TABLE; - PageStorage pageStorageAppenders = getPageBase().getSessionStorage().getLoggingConfigurationTabAppenderTableStorage(); - - - PrismContainerWrapperModel appenderModel = PrismContainerWrapperModel.fromContainerWrapper(getModel(), LoggingConfigurationType.F_APPENDER); - - MultivalueContainerListPanelWithDetailsPanel appendersMultivalueContainerListPanel = - new MultivalueContainerListPanelWithDetailsPanel(ID_APPENDERS, appenderModel, - tableIdAppenders, pageStorageAppenders) { - - private static final long serialVersionUID = 1L; - - @Override - protected List> postSearch( - List> items) { - return items; - } - - @Override - protected void newItemPerformed(AjaxRequestTarget target, AssignmentObjectRelation relation) { - newAppendersClickPerformed(target); - } - - @Override - protected void initPaging() { - initAppenderPaging(); - } - - @Override - protected boolean enableActionNewObject() { - return true; - } - - @Override - protected ObjectQuery createQuery() { - return null; - } - - @Override - protected List, String>> createColumns() { - return initAppendersBasicColumns(appenderModel); - } - - @Override - protected MultivalueContainerDetailsPanel getMultivalueContainerDetailsPanel( - ListItem> item) { - return LoggingConfigurationTabPanel.this.getAppendersMultivalueContainerDetailsPanel(item); - } - - @Override - protected List initSearchableItems( - PrismContainerDefinition containerDef) { - List defs = new ArrayList<>(); - - 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) { - newItemPerformed(target, null); - } - }; - - 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 = PrismContainerWrapperModel.fromContainerWrapper(getModel(), LoggingConfigurationType.F_AUDITING); - try { - Panel auditPanel = getPageBase().initItemPanel(ID_AUDITING, AuditingConfigurationType.COMPLEX_TYPE, auditModel, null); - add(auditPanel); - } catch (SchemaException e) { - LOGGER.error("Cannot create panel for auditing: {}", e.getMessage(), e); - getSession().error("Cannot create panel for auditing."); - } - setOutputMarkupId(true); - } - - private ItemVisibility getLoggingVisibility(ItemPath pathToCheck) { - if(pathToCheck.isSubPathOrEquivalent(ItemPath.create(getModelObject().getPath(), LoggingConfigurationType.F_ROOT_LOGGER_APPENDER)) || - pathToCheck.isSubPathOrEquivalent(ItemPath.create(getModelObject().getPath(), LoggingConfigurationType.F_ROOT_LOGGER_LEVEL))){ - return ItemVisibility.AUTO; - } - return ItemVisibility.HIDDEN; - } - - - private List, String>> initLoggersBasicColumns(IModel> loggersModel) { - List, String>> columns = new ArrayList<>(); - - columns.add(new CheckBoxHeaderColumn<>()); - columns.add(new IconColumn>(Model.of("")) { - - private static final long serialVersionUID = 1L; - - @Override - protected DisplayType getIconDisplayType(IModel> rowModel) { - return WebComponentUtil.createDisplayType(WebComponentUtil.createDefaultBlackIcon(SystemConfigurationType.COMPLEX_TYPE)); - - } - - }); - - columns.add(new PrismPropertyWrapperColumn(loggersModel, ClassLoggerConfigurationType.F_PACKAGE, ColumnType.VALUE, getPageBase()) { - - @Override - public String getCssClass() { - return " col-md-5 "; - } - - }); - columns.add(new PrismPropertyWrapperColumn<>(loggersModel, ClassLoggerConfigurationType.F_LEVEL, ColumnType.VALUE, getPageBase())); - columns.add(new PrismPropertyWrapperColumn<>(loggersModel, ClassLoggerConfigurationType.F_APPENDER, ColumnType.VALUE, getPageBase())); - - List menuActionsList = getLoggersMultivalueContainerListPanel().getDefaultMenuActions(); - columns.add(new InlineMenuButtonColumn(menuActionsList, getPageBase()) { - - @Override - public String getCssClass() { - return " col-md-1 "; - } - }); - - return columns; - } - - private void loggerEditPerformed(AjaxRequestTarget target, IModel> rowModel, - List> listItems) { - if(rowModel != null) { - PrismContainerValueWrapper logger = rowModel.getObject(); - logger.setSelected(true); - } else { - for(PrismContainerValueWrapper logger : listItems) { - logger.setSelected(true); - } - } - target.add(getLoggersMultivalueContainerListPanel()); - } - - - protected void newAppendersClickPerformed(AjaxRequestTarget target) { - MultivalueContainerListPanelWithDetailsPanel appenders - = (MultivalueContainerListPanelWithDetailsPanel) get(ID_APPENDERS); - 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()); - - PrismContainerValueWrapper newAppenderContainerWrapper = getAppendersMultivalueContainerListPanel().createNewItemContainerValueWrapper(newObjectPolicy, appenders.getModelObject(), target); - getAppendersMultivalueContainerListPanel().itemDetailsPerformed(target, Arrays.asList(newAppenderContainerWrapper)); - } - - private MultivalueContainerDetailsPanel getAppendersMultivalueContainerDetailsPanel( - ListItem> item) { - MultivalueContainerDetailsPanel detailsPanel = - new MultivalueContainerDetailsPanel(MultivalueContainerListPanelWithDetailsPanel.ID_ITEM_DETAILS, item.getModel()) { - - private static final long serialVersionUID = 1L; - - @Override - protected DisplayNamePanel createDisplayNamePanel(String displayNamePanelId) { - IModel displayNameModel = new IModel() { - - private static final long serialVersionUID = 1L; - - @Override - public AppenderConfigurationType getObject() { - return item.getModelObject().getRealValue(); - } - }; - return new DisplayNamePanel(displayNamePanelId, displayNameModel); - } - }; - 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)); - } - - private MultivalueContainerListPanel getLoggersMultivalueContainerListPanel(){ - return ((MultivalueContainerListPanel)get(ID_LOGGERS)); - } - - private void initAppenderPaging() { - getPageBase().getSessionStorage().getLoggingConfigurationTabAppenderTableStorage().setPaging( - getPrismContext().queryFactory().createPaging(0, (int) ((PageBase)getPage()).getItemsPerPage(UserProfileStorage.TableId.LOGGING_TAB_APPENDER_TABLE))); - } - - private void initLoggerPaging() { - getPageBase().getSessionStorage().getLoggingConfigurationTabLoggerTableStorage().setPaging( - getPrismContext().queryFactory().createPaging(0, (int) ((PageBase)getPage()).getItemsPerPage(UserProfileStorage.TableId.LOGGING_TAB_APPENDER_TABLE))); - } - - private List, String>> initAppendersBasicColumns(IModel> appenderModel) { - List, String>> columns = new ArrayList<>(); - - columns.add(new CheckBoxHeaderColumn<>()); - columns.add(new IconColumn>(Model.of("")) { - - private static final long serialVersionUID = 1L; - - @Override - protected DisplayType getIconDisplayType(IModel> rowModel) { - return WebComponentUtil.createDisplayType(WebComponentUtil.createDefaultBlackIcon(SystemConfigurationType.COMPLEX_TYPE)); - } - }); - - columns.add(new PrismPropertyWrapperColumn(appenderModel, AppenderConfigurationType.F_NAME, ColumnType.LINK, getPageBase()) { - - @Override - protected void onClick(AjaxRequestTarget target, IModel> rowModel) { - getAppendersMultivalueContainerListPanel().itemDetailsPerformed(target, rowModel); - } - - }); - - columns.add(new PrismPropertyWrapperColumn(appenderModel, AppenderConfigurationType.F_PATTERN, ColumnType.VALUE, getPageBase()) { - @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) { - ItemRealValueModel appender = - new ItemRealValueModel<>(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()) { - @Override - public String getCssClass() { - return " col-md-1 "; - } - }); - - return columns; - } -} - +/* + * Copyright (c) 2018 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ + +package com.evolveum.midpoint.gui.impl.page.admin.configuration.component; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import javax.xml.namespace.QName; + +import com.evolveum.midpoint.gui.impl.prism.ItemPanelSettings; +import com.evolveum.midpoint.gui.impl.prism.ItemPanelSettingsBuilder; +import com.evolveum.midpoint.model.api.AssignmentObjectRelation; +import com.evolveum.midpoint.schema.constants.MidPointConstants; +import com.evolveum.midpoint.xml.ns._public.common.common_3.*; +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.html.panel.Panel; +import org.apache.wicket.markup.repeater.Item; +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; +import com.evolveum.midpoint.gui.api.page.PageBase; +import com.evolveum.midpoint.gui.api.prism.PrismContainerWrapper; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.gui.impl.component.MultivalueContainerDetailsPanel; +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.AbstractItemWrapperColumn.ColumnType; +import com.evolveum.midpoint.gui.impl.component.data.column.PrismPropertyWrapperColumn; +import com.evolveum.midpoint.gui.impl.component.input.QNameIChoiceRenderer; +import com.evolveum.midpoint.gui.impl.factory.ItemRealValueModel; +import com.evolveum.midpoint.gui.impl.prism.PrismContainerValueWrapper; +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.ObjectQuery; +import com.evolveum.midpoint.util.QNameUtil; +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.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.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.ItemVisibility; +import com.evolveum.midpoint.web.component.search.SearchItemDefinition; +import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; +import com.evolveum.midpoint.web.model.PrismContainerWrapperModel; +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.AuditingConfigurationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ClassLoggerConfigurationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.DisplayType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.FileAppenderConfigurationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.LoggingConfigurationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.SyslogAppenderConfigurationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType; + +/** + * @author skublik + */ +public class LoggingConfigurationTabPanel extends BasePanel> { + + private static final long serialVersionUID = 1L; + + private static final Trace LOGGER = TraceManager.getTrace(LoggingConfigurationTabPanel.class); + + private static final String ID_LOGGING = "logging"; + private static final String ID_APPENDERS = "appenders"; + private static final String ID_LOGGERS = "loggers"; + private static final String ID_AUDITING = "audit"; + private static final String ID_NEW_ITEM_BUTTON = "newItemButton"; + private static final String ID_BUTTON_TOOLBAR_FRAGMENT = "buttonToolbarFragment"; + private static final String ID_APPENDERS_CHOICE = "appendersChoice"; + private static final String ID_CHOICE_APPENDER_TYPE_FORM = "choiceAppenderTypeForm"; + + + public LoggingConfigurationTabPanel(String id, IModel> model) { + super(id, model); + } + + @Override + protected void onInitialize() { + super.onInitialize(); + initLayout(); + } + + protected void initLayout() { + try { +// getModelObject().setShowOnTopLevel(true); + ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder(); + builder.visibilityHandler(itemWrapper -> getLoggingVisibility(itemWrapper.getPath())).showOnTopLevel(true); + Panel loggingPanel = getPageBase().initItemPanel(ID_LOGGING, LoggingConfigurationType.COMPLEX_TYPE, getModel(), builder.build()); + add(loggingPanel); + } catch (SchemaException e) { + LOGGER.error("Cannot create panel for logging: {}", e.getMessage(), e); + getSession().error("Cannot create panle for logging"); + } + + TableId tableIdLoggers = UserProfileStorage.TableId.LOGGING_TAB_LOGGER_TABLE; + PageStorage pageStorageLoggers = getPageBase().getSessionStorage().getLoggingConfigurationTabLoggerTableStorage(); + + + PrismContainerWrapperModel loggerModel = PrismContainerWrapperModel.fromContainerWrapper(getModel(), LoggingConfigurationType.F_CLASS_LOGGER); + + MultivalueContainerListPanel loggersMultivalueContainerListPanel = + new MultivalueContainerListPanel(ID_LOGGERS, loggerModel, + tableIdLoggers, pageStorageLoggers) { + + private static final long serialVersionUID = 1L; + + @Override + protected List> postSearch( + List> items) { + return items; + } + + @Override + protected void newItemPerformed(AjaxRequestTarget target, AssignmentObjectRelation relation) { + PrismContainerValue newLogger = loggerModel.getObject().getItem().createNewValue(); + PrismContainerValueWrapper newLoggerWrapper = getLoggersMultivalueContainerListPanel().createNewItemContainerValueWrapper(newLogger, loggerModel.getObject(), target); + loggerEditPerformed(target, Model.of(newLoggerWrapper), null); + } + + @Override + protected void initPaging() { + initLoggerPaging(); + } + + @Override + protected boolean enableActionNewObject() { + return true; + } + + @Override + protected ObjectQuery createQuery() { + return null; + } + + @Override + protected List, String>> createColumns() { + return initLoggersBasicColumns(loggerModel); + } + + @Override + protected void itemPerformedForDefaultAction(AjaxRequestTarget target, + IModel> rowModel, + List> listItems) { + loggerEditPerformed(target, rowModel, listItems); + } + + @Override + protected List initSearchableItems( + PrismContainerDefinition containerDef) { + List defs = new ArrayList<>(); + + return defs; + } + }; + add(loggersMultivalueContainerListPanel); + + TableId tableIdAppenders = UserProfileStorage.TableId.LOGGING_TAB_APPENDER_TABLE; + PageStorage pageStorageAppenders = getPageBase().getSessionStorage().getLoggingConfigurationTabAppenderTableStorage(); + + + PrismContainerWrapperModel appenderModel = PrismContainerWrapperModel.fromContainerWrapper(getModel(), LoggingConfigurationType.F_APPENDER); + + MultivalueContainerListPanelWithDetailsPanel appendersMultivalueContainerListPanel = + new MultivalueContainerListPanelWithDetailsPanel(ID_APPENDERS, appenderModel, + tableIdAppenders, pageStorageAppenders) { + + private static final long serialVersionUID = 1L; + + @Override + protected List> postSearch( + List> items) { + return items; + } + + @Override + protected void newItemPerformed(AjaxRequestTarget target, AssignmentObjectRelation relation) { + newAppendersClickPerformed(target); + } + + @Override + protected void initPaging() { + initAppenderPaging(); + } + + @Override + protected boolean enableActionNewObject() { + return true; + } + + @Override + protected ObjectQuery createQuery() { + return null; + } + + @Override + protected List, String>> createColumns() { + return initAppendersBasicColumns(appenderModel); + } + + @Override + protected MultivalueContainerDetailsPanel getMultivalueContainerDetailsPanel( + ListItem> item) { + return LoggingConfigurationTabPanel.this.getAppendersMultivalueContainerDetailsPanel(item); + } + + @Override + protected List initSearchableItems( + PrismContainerDefinition containerDef) { + List defs = new ArrayList<>(); + + 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) { + newItemPerformed(target, null); + } + }; + + 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 = PrismContainerWrapperModel.fromContainerWrapper(getModel(), LoggingConfigurationType.F_AUDITING); + try { + Panel auditPanel = getPageBase().initItemPanel(ID_AUDITING, AuditingConfigurationType.COMPLEX_TYPE, auditModel, null); + add(auditPanel); + } catch (SchemaException e) { + LOGGER.error("Cannot create panel for auditing: {}", e.getMessage(), e); + getSession().error("Cannot create panel for auditing."); + } + setOutputMarkupId(true); + } + + private ItemVisibility getLoggingVisibility(ItemPath pathToCheck) { + if (ItemPath.create(SystemConfigurationType.F_LOGGING).equivalent(pathToCheck)) { + return ItemVisibility.AUTO; + } + + if (ItemPath.create(SystemConfigurationType.F_LOGGING, LoggingConfigurationType.F_ROOT_LOGGER_APPENDER).equivalent(pathToCheck)) { + return ItemVisibility.AUTO; + } + + if (ItemPath.create(SystemConfigurationType.F_LOGGING, LoggingConfigurationType.F_ROOT_LOGGER_LEVEL).equivalent(pathToCheck)) { + return ItemVisibility.AUTO; + } + + if (ItemPath.create(SystemConfigurationType.F_LOGGING, LoggingConfigurationType.F_DEBUG).equivalent(pathToCheck)) { + return ItemVisibility.AUTO; + } + + return ItemVisibility.HIDDEN; + } + + + private List, String>> initLoggersBasicColumns(IModel> loggersModel) { + List, String>> columns = new ArrayList<>(); + + columns.add(new CheckBoxHeaderColumn<>()); + columns.add(new IconColumn>(Model.of("")) { + + private static final long serialVersionUID = 1L; + + @Override + protected DisplayType getIconDisplayType(IModel> rowModel) { + return WebComponentUtil.createDisplayType(WebComponentUtil.createDefaultBlackIcon(SystemConfigurationType.COMPLEX_TYPE)); + + } + + }); + + columns.add(new PrismPropertyWrapperColumn(loggersModel, ClassLoggerConfigurationType.F_PACKAGE, ColumnType.VALUE, getPageBase()) { + + @Override + public String getCssClass() { + return " col-md-5 "; + } + + }); + columns.add(new PrismPropertyWrapperColumn<>(loggersModel, ClassLoggerConfigurationType.F_LEVEL, ColumnType.VALUE, getPageBase())); + columns.add(new PrismPropertyWrapperColumn<>(loggersModel, ClassLoggerConfigurationType.F_APPENDER, ColumnType.VALUE, getPageBase())); + + List menuActionsList = getLoggersMultivalueContainerListPanel().getDefaultMenuActions(); + columns.add(new InlineMenuButtonColumn(menuActionsList, getPageBase()) { + + @Override + public String getCssClass() { + return " col-md-1 "; + } + }); + + return columns; + } + + private void loggerEditPerformed(AjaxRequestTarget target, IModel> rowModel, + List> listItems) { + if(rowModel != null) { + PrismContainerValueWrapper logger = rowModel.getObject(); + logger.setSelected(true); + } else { + for(PrismContainerValueWrapper logger : listItems) { + logger.setSelected(true); + } + } + target.add(getLoggersMultivalueContainerListPanel()); + } + + + protected void newAppendersClickPerformed(AjaxRequestTarget target) { + MultivalueContainerListPanelWithDetailsPanel appenders + = (MultivalueContainerListPanelWithDetailsPanel) get(ID_APPENDERS); + 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()); + + PrismContainerValueWrapper newAppenderContainerWrapper = getAppendersMultivalueContainerListPanel().createNewItemContainerValueWrapper(newObjectPolicy, appenders.getModelObject(), target); + getAppendersMultivalueContainerListPanel().itemDetailsPerformed(target, Arrays.asList(newAppenderContainerWrapper)); + } + + private MultivalueContainerDetailsPanel getAppendersMultivalueContainerDetailsPanel( + ListItem> item) { + MultivalueContainerDetailsPanel detailsPanel = + new MultivalueContainerDetailsPanel(MultivalueContainerListPanelWithDetailsPanel.ID_ITEM_DETAILS, item.getModel()) { + + private static final long serialVersionUID = 1L; + + @Override + protected DisplayNamePanel createDisplayNamePanel(String displayNamePanelId) { + IModel displayNameModel = new IModel() { + + private static final long serialVersionUID = 1L; + + @Override + public AppenderConfigurationType getObject() { + return item.getModelObject().getRealValue(); + } + }; + return new DisplayNamePanel(displayNamePanelId, displayNameModel); + } + }; + 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)); + } + + private MultivalueContainerListPanel getLoggersMultivalueContainerListPanel(){ + return ((MultivalueContainerListPanel)get(ID_LOGGERS)); + } + + private void initAppenderPaging() { + getPageBase().getSessionStorage().getLoggingConfigurationTabAppenderTableStorage().setPaging( + getPrismContext().queryFactory().createPaging(0, (int) ((PageBase)getPage()).getItemsPerPage(UserProfileStorage.TableId.LOGGING_TAB_APPENDER_TABLE))); + } + + private void initLoggerPaging() { + getPageBase().getSessionStorage().getLoggingConfigurationTabLoggerTableStorage().setPaging( + getPrismContext().queryFactory().createPaging(0, (int) ((PageBase)getPage()).getItemsPerPage(UserProfileStorage.TableId.LOGGING_TAB_APPENDER_TABLE))); + } + + private List, String>> initAppendersBasicColumns(IModel> appenderModel) { + List, String>> columns = new ArrayList<>(); + + columns.add(new CheckBoxHeaderColumn<>()); + columns.add(new IconColumn>(Model.of("")) { + + private static final long serialVersionUID = 1L; + + @Override + protected DisplayType getIconDisplayType(IModel> rowModel) { + return WebComponentUtil.createDisplayType(WebComponentUtil.createDefaultBlackIcon(SystemConfigurationType.COMPLEX_TYPE)); + } + }); + + columns.add(new PrismPropertyWrapperColumn(appenderModel, AppenderConfigurationType.F_NAME, ColumnType.LINK, getPageBase()) { + + @Override + protected void onClick(AjaxRequestTarget target, IModel> rowModel) { + getAppendersMultivalueContainerListPanel().itemDetailsPerformed(target, rowModel); + } + + }); + + columns.add(new PrismPropertyWrapperColumn(appenderModel, AppenderConfigurationType.F_PATTERN, ColumnType.VALUE, getPageBase()) { + @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) { + ItemRealValueModel appender = + new ItemRealValueModel<>(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()) { + @Override + public String getCssClass() { + return " col-md-1 "; + } + }); + + return columns; + } +} + diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigPanel.java index 2f006e2d66e..8ba51767783 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigPanel.java @@ -1,75 +1,75 @@ -/* - * Copyright (c) 2018 Evolveum and contributors - * - * This work is dual-licensed under the Apache License 2.0 - * and European Union Public License. See LICENSE file for details. - */ - -package com.evolveum.midpoint.gui.impl.page.admin.configuration.component; - -import com.evolveum.midpoint.gui.impl.prism.ItemPanelSettingsBuilder; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; -import org.apache.wicket.markup.html.panel.Panel; -import org.apache.wicket.model.IModel; - -import com.evolveum.midpoint.gui.api.component.BasePanel; -import com.evolveum.midpoint.gui.api.prism.ItemWrapper; -import com.evolveum.midpoint.gui.api.prism.PrismObjectWrapper; -import com.evolveum.midpoint.prism.path.ItemPath; -import com.evolveum.midpoint.util.exception.SchemaException; -import com.evolveum.midpoint.util.logging.Trace; -import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.web.component.prism.ItemVisibility; -import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType; - -/** - * @author skublik - */ -public class SystemConfigPanel extends BasePanel> { - - private static final long serialVersionUID = 1L; - - private static final Trace LOGGER = TraceManager.getTrace(SystemConfigPanel.class); - - private static final String ID_SYSTEM_CONFIG = "basicSystemConfiguration"; - - - public SystemConfigPanel(String id, IModel> model) { - super(id, model); - - setOutputMarkupId(true); - - } - - @Override - protected void onInitialize() { - super.onInitialize(); - - initLayout(); - } - - protected void initLayout() { - try { - ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder().visibilityHandler(itemWrapper -> getBasicTabVisibity(itemWrapper)); - Panel panel = getPageBase().initItemPanel(ID_SYSTEM_CONFIG, SystemConfigurationType.COMPLEX_TYPE, getModel(), builder.build()); - add(panel); - } catch (SchemaException e) { - LOGGER.error("Cannot create basic panel for system configuration."); - getSession().error("Cannot create basic panel for system configuration."); - } - - } - - private ItemVisibility getBasicTabVisibity(ItemWrapper itemWrapper) { - if(itemWrapper.getPath().isSubPathOrEquivalent(ItemPath.create(ItemPath.EMPTY_PATH, SystemConfigurationType.F_DESCRIPTION)) || itemWrapper.getPath().isSubPathOrEquivalent(ItemPath.create( - ItemPath.EMPTY_PATH, SystemConfigurationType.F_GLOBAL_SECURITY_POLICY_REF))) { - return ItemVisibility.AUTO; - } - - if(itemWrapper.getPath().isSuperPathOrEquivalent(ItemPath.create(ObjectType.F_EXTENSION))) { - return ItemVisibility.AUTO; - } - - return ItemVisibility.HIDDEN; - } -} +/* + * Copyright (c) 2018 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ + +package com.evolveum.midpoint.gui.impl.page.admin.configuration.component; + +import com.evolveum.midpoint.gui.impl.prism.ItemPanelSettingsBuilder; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.IModel; + +import com.evolveum.midpoint.gui.api.component.BasePanel; +import com.evolveum.midpoint.gui.api.prism.ItemWrapper; +import com.evolveum.midpoint.gui.api.prism.PrismObjectWrapper; +import com.evolveum.midpoint.prism.path.ItemPath; +import com.evolveum.midpoint.util.exception.SchemaException; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.web.component.prism.ItemVisibility; +import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType; + +/** + * @author skublik + */ +public class SystemConfigPanel extends BasePanel> { + + private static final long serialVersionUID = 1L; + + private static final Trace LOGGER = TraceManager.getTrace(SystemConfigPanel.class); + + private static final String ID_SYSTEM_CONFIG = "basicSystemConfiguration"; + + + public SystemConfigPanel(String id, IModel> model) { + super(id, model); + + setOutputMarkupId(true); + + } + + @Override + protected void onInitialize() { + super.onInitialize(); + + initLayout(); + } + + protected void initLayout() { + try { + ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder().visibilityHandler(this::getBasicTabVisibity); + Panel panel = getPageBase().initItemPanel(ID_SYSTEM_CONFIG, SystemConfigurationType.COMPLEX_TYPE, getModel(), builder.build()); + add(panel); + } catch (SchemaException e) { + LOGGER.error("Cannot create basic panel for system configuration."); + getSession().error("Cannot create basic panel for system configuration."); + } + + } + + private ItemVisibility getBasicTabVisibity(ItemWrapper itemWrapper) { + if(itemWrapper.getPath().isSubPathOrEquivalent(ItemPath.create(ItemPath.EMPTY_PATH, SystemConfigurationType.F_DESCRIPTION)) || itemWrapper.getPath().isSubPathOrEquivalent(ItemPath.create( + ItemPath.EMPTY_PATH, SystemConfigurationType.F_GLOBAL_SECURITY_POLICY_REF))) { + return ItemVisibility.AUTO; + } + + if(itemWrapper.getPath().isSuperPathOrEquivalent(ItemPath.create(ObjectType.F_EXTENSION))) { + return ItemVisibility.AUTO; + } + + return ItemVisibility.HIDDEN; + } +}