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 05ba8fb44bb..3f0b39dfc97 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 @@ -31,12 +31,14 @@ import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.FormComponent; +import org.apache.wicket.markup.html.form.IChoiceRenderer; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.model.util.ListModel; import org.apache.wicket.request.Response; import org.apache.wicket.util.string.Strings; @@ -77,12 +79,18 @@ 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.ItemVisibilityHandler; import com.evolveum.midpoint.web.component.prism.ItemWrapper; import com.evolveum.midpoint.web.component.prism.ObjectWrapperFactory; import com.evolveum.midpoint.web.component.prism.PrismContainerHeaderPanel; import com.evolveum.midpoint.web.component.prism.PrismContainerPanel; +import com.evolveum.midpoint.web.component.prism.PrismPropertyColumn; +import com.evolveum.midpoint.web.component.prism.PrismPropertyPanel; import com.evolveum.midpoint.web.component.prism.PropertyWrapper; import com.evolveum.midpoint.web.component.prism.ValueWrapper; +import com.evolveum.midpoint.web.model.ContainerValueWrapperFromObjectWrapperModel; +import com.evolveum.midpoint.web.model.PrismPropertyRealValueFromContainerableModel; +import com.evolveum.midpoint.web.model.PrismPropertyRealValuesFromContainerValueWrapperModel; import com.evolveum.midpoint.web.page.admin.configuration.dto.StandardLoggerType; import com.evolveum.midpoint.web.session.PageStorage; import com.evolveum.midpoint.web.session.UserProfileStorage; @@ -392,6 +400,8 @@ protected Component createInputPanel(String componentId, } PropertyWrapper packageWrapper = (PropertyWrapper)rowModel.getObject().findPropertyWrapper(new ItemPath(rowModel.getObject().getPath(), ClassLoggerConfigurationType.F_PACKAGE)); +// packageWrapper.setDefaultValues(); + //TODO: what about using AutoCompleteTextPanel autoCompleteTextPanel = new AutoCompleteTextPanel(componentId, new PropertyModel(packageWrapper.getValues(), "[0].value.value") { @Override @@ -482,10 +492,12 @@ protected Component createInputPanel(String componentId, IModel> rowModel) { ClassLoggerConfigurationType logger = rowModel.getObject().getContainerValue().getValue(); PropertyWrapper levelWrapper = (PropertyWrapper)rowModel.getObject().findPropertyWrapper(new ItemPath(rowModel.getObject().getPath(), ClassLoggerConfigurationType.F_LEVEL)); - DropDownChoicePanel dropDownChoicePanel = new DropDownChoicePanel<>(componentId, - new PropertyModel(levelWrapper.getValues(), "[0].value.value"), - WebComponentUtil.createReadonlyModelFromEnum(LoggingLevelType.class)); - return dropDownChoicePanel; +// DropDownChoicePanel dropDownChoicePanel = new DropDownChoicePanel<>(componentId, +// new PropertyModel(levelWrapper.getValues(), "[0].value.value"), +// WebComponentUtil.createReadonlyModelFromEnum(LoggingLevelType.class)); +// return dropDownChoicePanel; + Form form= new Form("form"); + return new PrismPropertyColumn<>(componentId, new Model(levelWrapper), form, getPageBase()); } @Override @@ -502,65 +514,95 @@ protected Component staticPanel(String componentId, @Override protected Component createInputPanel(String componentId, IModel> rowModel) { - ClassLoggerConfigurationType logger = rowModel.getObject().getContainerValue().getValue(); +// ClassLoggerConfigurationType logger = rowModel.getObject().getContainerValue().getValue(); - IModel> options = new Model(null); - Map optionsMap = new HashMap<>(); - optionsMap.put("nonSelectedText", createStringResource("LoggingConfigPanel.appenders.Inherit").getString()); - options.setObject(optionsMap); - PropertyWrapper appenderWrapper = (PropertyWrapper)rowModel.getObject().findPropertyWrapper(new ItemPath(rowModel.getObject().getPath(), ClassLoggerConfigurationType.F_APPENDER)); - - List list = new ArrayList<>(); - - for (ValueWrapper appender : appenderWrapper.getValues()) { - list.add(appender.getValue().getRealValue()); - } +// IModel> options = new Model(null); +// Map optionsMap = new HashMap<>(); +// optionsMap.put("nonSelectedText", createStringResource("LoggingConfigPanel.appenders.Inherit").getString()); +// options.setObject(optionsMap); + + PropertyWrapper appenderWrapper = (PropertyWrapper)rowModel.getObject().findPropertyWrapper(new ItemPath(rowModel.getObject().getPath(), ClassLoggerConfigurationType.F_APPENDER)); - LOGGER.info("XXXXXXXXXXXXXXXXXX appenders: " + appenderWrapper.getValues().get(0).getValue()); - - ListMultipleChoicePanel panel = new ListMultipleChoicePanel<>(componentId, - new IModel>(){ - - private static final long serialVersionUID = 1L; - - @Override - public void setObject(List list) { - appenderWrapper.getValues().clear(); - List appenders = new ArrayList(); - for(String value : list){ - ValueWrapper appender = appenderWrapper.createAddedValue(); - PrismPropertyValue prismValueAppender = (PrismPropertyValue)appender.getValue(); - prismValueAppender.setValue(value); - appenders.add(appender); - } - appenderWrapper.getValues().addAll(appenders); - - } - - @Override - public void detach() { - } - - @Override - public List getObject() { - return list; - } - }, - new AbstractReadOnlyModel>() { - - private static final long serialVersionUID = 1L; - @Override - public List getObject() { - List list = new ArrayList<>(); - - for (AppenderConfigurationType appender : getModelObject().getValues().get(0).getContainerValue().getValue().getAppender()) { - list.add(appender.getName()); - } - - return list; - } - }, - StringChoiceRenderer.simple(), options); +// List list = new ArrayList<>(); +// + Form form = new Form("form"); + PrismPropertyColumn> panel = new PrismPropertyColumn<>(componentId, new Model(appenderWrapper), form, getPageBase()); + +// for (ValueWrapper appender : appenderWrapper.getValues()) { +// list.add(appender.getValue().getRealValue()); +// } +// +// LOGGER.info("XXXXXXXXXXXXXXXXXX appenders: " + appenderWrapper.getValues().get(0).getValue()); +// +// IModel> choiceModel = new AbstractReadOnlyModel>() { +// +// private static final long serialVersionUID = 1L; +// +// @Override +// public List getObject() { +// List list = new ArrayList<>(); +// +// for (AppenderConfigurationType appender : getModelObject().getValues().get(0).getContainerValue() +// .getValue().getAppender()) { +// list.add(appender.getName()); +// } +// +// return list; +// } +// }; +// +// +// List choices = getModelObject().getValues().get(0).findPropertyWrapper(new ItemPath(getModel().getObject().getPath(), LoggingConfigurationType.F_APPENDER, AppenderConfigurationType.F_NAME)).getValues(); +// +// ListMultipleChoicePanel panel = new ListMultipleChoicePanel(componentId, +// new ListModel(appenderWrapper.getValues()), new ListModel(choices), +// +// new IChoiceRenderer() { +// +// public Object getDisplayValue(ValueWrapper object) { +// +// return object.getValue().getRealValue(); +// +// }; +// +// @Override +// public String getIdValue(ValueWrapper object, int index) { +// return Integer.toString(index); +// } +// @Override +// public ValueWrapper getObject(String id, IModel> choices) { +// if (StringUtils.isEmpty(id)) { +// return null; +// } +// return choices.getObject().get(Integer.parseInt(id)); +// } +// +// } +// , options); +// + +// ListMultipleChoicePanel panel = new ListMultipleChoicePanel<>(componentId, +// new IModel>(){ +// +// private static final long serialVersionUID = 1L; +// +// @Override +// public void setObject(List object) { +// logger.getAppender().clear(); +// logger.getAppender().addAll(object); +// } +// +// @Override +// public void detach() { +// } +// +// @Override +// public List getObject() { +// return list; +// } +// }, +// , +// StringChoiceRenderer.simple(), options); return panel; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismPropertyColumn.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismPropertyColumn.html new file mode 100644 index 00000000000..30e16f2ccef --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismPropertyColumn.html @@ -0,0 +1,24 @@ + + + + + +
+
+
+ + diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismPropertyColumn.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismPropertyColumn.java new file mode 100644 index 00000000000..cd240fd6749 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismPropertyColumn.java @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2010-2018 Evolveum + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.evolveum.midpoint.web.component.prism; + +import java.util.List; + +import org.apache.commons.lang.Validate; +import org.apache.wicket.AttributeModifier; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.ListView; +import org.apache.wicket.model.AbstractReadOnlyModel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.PropertyModel; + +import com.evolveum.midpoint.gui.api.component.BasePanel; +import com.evolveum.midpoint.gui.api.page.PageBase; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.web.component.input.ExpressionValuePanel; +import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ConstructionType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.MappingType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceObjectAssociationType; + +/** + * @author katkav + */ +public class PrismPropertyColumn extends BasePanel { + private static final long serialVersionUID = 1L; + + private static final Trace LOGGER = TraceManager.getTrace(PrismPropertyColumn.class); + + private boolean labelContainerVisible = true; + private PageBase pageBase; + + public PrismPropertyColumn(String id, final IModel model, Form form, PageBase pageBase) { + super(id, model); + Validate.notNull(model, "no model"); + this.pageBase= pageBase; + + LOGGER.trace("Creating property panel for {}", model.getObject()); + + setOutputMarkupId(true); + add(new VisibleEnableBehaviour() { + private static final long serialVersionUID = 1L; + + @Override + public boolean isVisible() { +// IW propertyWrapper = model.getObject(); +// boolean visible = propertyWrapper.isVisible(); +// LOGGER.trace("isVisible: {}: {}", propertyWrapper, visible); +// return visible; + return true; + } + + @Override + public boolean isEnabled() { + return !model.getObject().isReadonly(); + } + }); + + initLayout(model, form); + } + + private void initLayout(final IModel model, final Form form) { + + ListView values = new ListView("values", + new PropertyModel<>(model, "values")) { + private static final long serialVersionUID = 1L; + + @Override + protected void populateItem(final ListItem item) { + BasePanel panel = new PrismValuePanel("value", item.getModel(), createStringResource("smth"), form, getValueCssClass(), getInputCssClass()); + item.add(panel); + item.add(AttributeModifier.append("class", createStyleClassModel(item.getModel()))); + + item.add(new VisibleEnableBehaviour() { + private static final long serialVersionUID = 1L; + + @Override + public boolean isVisible() { + return isVisibleValue(item.getModel()); + } + }); + } + }; + values.add(new AttributeModifier("class", getValuesClass())); + values.setReuseItems(true); + add(values); + } + + protected String getInputCssClass() { + return"col-xs-10"; + } + + protected String getValuesClass() { + return "col-md-6"; + } + + protected String getValueCssClass() { + return "row"; + } + + + protected IModel createStyleClassModel(final IModel value) { + return new AbstractReadOnlyModel() { + private static final long serialVersionUID = 1L; + + @Override + public String getObject() { + if (getIndexOfValue(value.getObject()) > 0) { + return "col-md-offset-2 prism-value"; + } + + return null; + } + }; + } + + private int getIndexOfValue(ValueWrapper value) { + ItemWrapper property = value.getItem(); + List values = property.getValues(); + for (int i = 0; i < values.size(); i++) { + if (values.get(i).equals(value)) { + return i; + } + } + + return -1; + } + + private boolean isVisibleValue(IModel model) { + ValueWrapper value = model.getObject(); + return !ValueStatus.DELETED.equals(value.getStatus()); + } + + public boolean isLabelContainerVisible() { + return labelContainerVisible; + } + + public void setLabelContainerVisible(boolean labelContainerVisible) { + this.labelContainerVisible = labelContainerVisible; + } +}