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 2c066b1b4b2..9d88e810b41 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 @@ -98,6 +98,7 @@ import com.evolveum.midpoint.gui.api.model.NonEmptyModel; import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.prism.Containerable; +import com.evolveum.midpoint.prism.DefaultReferencableImpl; import com.evolveum.midpoint.prism.Objectable; import com.evolveum.midpoint.prism.PrismContainer; import com.evolveum.midpoint.prism.PrismContainerValue; @@ -274,6 +275,21 @@ public static String getReferencedObjectDisplayNamesAndNames(List emptyIfNull(getDisplayNameAndName(ref)) + (showTypes ? (" (" + emptyIfNull(getTypeLocalized(ref)) + ")") : "")) .collect(Collectors.joining(", ")); } + + public static String getReferencedObjectDisplayNamesAndNames(DefaultReferencableImpl ref, boolean showTypes) { + String name = ref.getTargetName() == null ? "" : ref.getTargetName().getOrig(); + StringBuilder sb = new StringBuilder(name); + if(showTypes) { + sb.append(" ("); + ObjectTypes type = ObjectTypes.getObjectTypeFromTypeQName(ref.getType()); + ObjectTypeGuiDescriptor descriptor = ObjectTypeGuiDescriptor.getDescriptor(type); + if (descriptor == null) { + return null; + } + sb.append(emptyIfNull(createStringResourceStatic(null, descriptor.getLocalizationKey()).getString())).append(")"); + } + return sb.toString(); + } public static void addAjaxOnUpdateBehavior(WebMarkupContainer container) { container.visitChildren(new IVisitor() { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebModelServiceUtils.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebModelServiceUtils.java index cad36101e42..8cbb39aa788 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebModelServiceUtils.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebModelServiceUtils.java @@ -26,6 +26,10 @@ import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.task.api.TaskManager; import com.evolveum.midpoint.util.exception.*; +import com.evolveum.midpoint.web.component.prism.ContainerStatus; +import com.evolveum.midpoint.web.component.prism.ObjectWrapper; +import com.evolveum.midpoint.web.component.prism.ObjectWrapperFactory; +import com.evolveum.midpoint.web.page.error.PageError; import com.evolveum.midpoint.web.page.login.PageLogin; import com.evolveum.midpoint.web.security.MidPointApplication; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; @@ -81,6 +85,7 @@ public class WebModelServiceUtils { private static final String OPERATION_COUNT_OBJECT = DOT_CLASS + "countObjects"; private static final String OPERATION_ASSUME_POWER_OF_ATTORNEY = DOT_CLASS + "assumePowerOfAttorney"; private static final String OPERATION_DROP_POWER_OF_ATTORNEY = DOT_CLASS + "dropPowerOfAttorney"; + private static final String OPERATION_GET_SYSTEM_CONFIG = DOT_CLASS + "getSystemConfiguration"; public static String resolveReferenceName(ObjectReferenceType ref, PageBase page) { Task task = page.createSimpleTask(WebModelServiceUtils.class.getName() + ".resolveReferenceName"); @@ -798,4 +803,36 @@ public static boolean isPostAuthenticationEnabled(TaskManager taskManager, Model } return false; } + + public static ObjectWrapper loadSystemConfigurationAsObjectWrapper(PageBase pageBase) { + Task task = pageBase.createSimpleTask(OPERATION_GET_SYSTEM_CONFIG); + OperationResult result = new OperationResult(OPERATION_GET_SYSTEM_CONFIG); + + Collection> options = SelectorOptions.createCollection( + GetOperationOptions.createResolve(), SystemConfigurationType.F_DEFAULT_USER_TEMPLATE, + SystemConfigurationType.F_GLOBAL_PASSWORD_POLICY); + + ObjectWrapper wrapper = null; + try { + PrismObject systemConfig = loadObject( + SystemConfigurationType.class, SystemObjectsType.SYSTEM_CONFIGURATION.value(), options, + pageBase, task, result); + + ObjectWrapperFactory owf = new ObjectWrapperFactory(pageBase); + + wrapper = owf.createObjectWrapper("adminPage.systemConfiguration", null, systemConfig, ContainerStatus.MODIFYING, task); + + result.recordSuccess(); + } catch (Exception ex) { + LoggingUtils.logUnexpectedException(LOGGER, "Couldn't load system configuration", ex); + result.recordFatalError("Couldn't load system configuration.", ex); + } + + if (!WebComponentUtil.isSuccessOrHandledError(result) || wrapper == null) { + pageBase.showResult(result, false); + throw pageBase.getRestartResponseException(PageError.class); + } + + return wrapper; + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerDetailsPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerDetailsPanel.java index c39af50106d..e7665e37678 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerDetailsPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerDetailsPanel.java @@ -15,6 +15,7 @@ */ package com.evolveum.midpoint.gui.impl.component; +import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.model.IModel; @@ -64,13 +65,14 @@ protected void initLayout(){ add(getSpecificContainers(ID_SPECIFIC_CONTAINERS_PANEL)); } - protected abstract Fragment getSpecificContainers(String contentAreaId); + protected WebMarkupContainer getSpecificContainers(String contentAreaId) { + return new WebMarkupContainer(contentAreaId); + } protected void getBasicContainerValuePanel(String idPanel){ Form form = new Form<>("form"); ItemPath itemPath = getModelObject().getPath(); IModel> model = getModel(); - model.getObject().setShowEmpty(true, true); model.getObject().getContainer().setShowOnTopLevel(true); add(new ContainerValuePanel(idPanel, getModel(), true, form, itemWrapper -> getBasicTabVisibity(itemWrapper, itemPath), getPageBase())); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanel.html index 72155b73555..0e9be5d6e06 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanel.html @@ -30,9 +30,9 @@
-
+
\ No newline at end of file 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 e74fe6c58ca..ef306d12a52 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 @@ -36,6 +36,8 @@ import com.evolveum.midpoint.gui.api.GuiStyleConstants; import com.evolveum.midpoint.gui.api.component.BasePanel; +import com.evolveum.midpoint.gui.api.model.LoadableModel; +import com.evolveum.midpoint.gui.impl.model.PropertyWrapperFromContainerValueWrapperModel; import com.evolveum.midpoint.gui.impl.util.GuiImplUtil; import com.evolveum.midpoint.prism.Containerable; import com.evolveum.midpoint.prism.PrismContainerValue; @@ -56,11 +58,14 @@ 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.ObjectWrapper; import com.evolveum.midpoint.web.component.prism.ValueStatus; +import com.evolveum.midpoint.web.component.prism.ValueWrapper; import com.evolveum.midpoint.web.component.util.MultivalueContainerListDataProvider; import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.web.session.PageStorage; import com.evolveum.midpoint.web.session.UserProfileStorage.TableId; +import com.evolveum.midpoint.xml.ns._public.common.common_3.GlobalPolicyRuleType; import com.evolveum.midpoint.xml.ns._public.common.common_3.PolicyRuleType; /** @@ -120,28 +125,28 @@ private void initListPanel() { BoxedTablePanel> itemTable = initItemTable(); itemsContainer.add(itemTable); - AjaxIconButton newObjectIcon = new AjaxIconButton(ID_NEW_ITEM_BUTTON, new Model<>("fa fa-plus"), - createStringResource("MainObjectListPanel.newObject")) { - - private static final long serialVersionUID = 1L; - - @Override - public void onClick(AjaxRequestTarget target) { - newItemPerformed(target); - } - }; - - newObjectIcon.add(new VisibleEnableBehaviour() { - private static final long serialVersionUID = 1L; - - @Override - public boolean isVisible() { - return enableActionNewObject(); - } - }); - itemsContainer.add(newObjectIcon); +// AjaxIconButton newObjectIcon = new AjaxIconButton(ID_NEW_ITEM_BUTTON, new Model<>("fa fa-plus"), +// createStringResource("MainObjectListPanel.newObject")) { +// +// private static final long serialVersionUID = 1L; +// +// @Override +// public void onClick(AjaxRequestTarget target) { +// newItemPerformed(target); +// } +// }; +// +// newObjectIcon.add(new VisibleEnableBehaviour() { +// private static final long serialVersionUID = 1L; +// +// @Override +// public boolean isVisible() { +// return enableActionNewObject(); +// } +// }); +// itemsContainer.add(newObjectIcon); - Fragment searchContainer = getSearchPanel(ID_SEARCH_ITEM_PANEL); + WebMarkupContainer searchContainer = getSearchPanel(ID_SEARCH_ITEM_PANEL); itemsContainer.add(searchContainer); itemsContainer.add(new VisibleEnableBehaviour() { @@ -159,7 +164,9 @@ protected boolean isListPanelVisible() { return true; } - protected abstract Fragment getSearchPanel(String contentAreaId); + protected WebMarkupContainer getSearchPanel(String contentAreaId) { + return new WebMarkupContainer(contentAreaId); + } protected abstract boolean enableActionNewObject(); @@ -212,6 +219,31 @@ public String getObject() { })); return item; } + + @Override + protected WebMarkupContainer createButtonToolbar(String id) { + AjaxIconButton newObjectIcon = new AjaxIconButton(id, new Model<>("fa fa-plus"), + createStringResource("MainObjectListPanel.newObject")) { + + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + newItemPerformed(target); + } + }; + + newObjectIcon.add(new VisibleEnableBehaviour() { + private static final long serialVersionUID = 1L; + + @Override + public boolean isVisible() { + return enableActionNewObject(); + } + }); + newObjectIcon.add(AttributeModifier.append("class", createStyleClassModelForNewObjectIcon())); + return newObjectIcon; + } }; itemTable.setOutputMarkupId(true); @@ -220,6 +252,17 @@ public String getObject() { } + private IModel createStyleClassModelForNewObjectIcon() { + return new AbstractReadOnlyModel() { + private static final long serialVersionUID = 1L; + + @Override + public String getObject() { + return "btn btn-success btn-sm"; + } + }; + } + protected abstract List> postSearch(List> items); protected abstract ObjectQuery createQuery(); @@ -233,6 +276,14 @@ public BoxedTablePanel> getItemTable() { } public void refreshTable(AjaxRequestTarget ajaxRequestTarget) { + IModel objectModel = new LoadableModel>(false) { + private static final long serialVersionUID = 1L; + + @Override + protected ContainerValueWrapper load() { + return ((ContainerValueWrapper)getModelObject().getValues().get(0)); + } + }; ajaxRequestTarget.add(getItemContainer().addOrReplace(initItemTable())); } @@ -269,7 +320,7 @@ public ContainerValueWrapper createNewItemContainerValueWrapper( Task task = getPageBase().createSimpleTask("Creating new object policy"); ContainerValueWrapper valueWrapper = factory.createContainerValueWrapper(model.getObject(), newItem, model.getObject().getObjectStatus(), ValueStatus.ADDED, model.getObject().getPath(), task); - valueWrapper.setShowEmpty(true, false); + valueWrapper.setShowEmpty(true, true); model.getObject().getValues().add(valueWrapper); return valueWrapper; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanelWithDetailsPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanelWithDetailsPanel.html index d584bd1a0fd..57e0adcb6b2 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanelWithDetailsPanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanelWithDetailsPanel.html @@ -30,9 +30,9 @@
-
+
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/data/column/EditableLinkPropertyWrapperColumn.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/data/column/EditableLinkPropertyWrapperColumn.java new file mode 100644 index 00000000000..1f958bfc042 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/data/column/EditableLinkPropertyWrapperColumn.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2018 Evolveum + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.evolveum.midpoint.gui.impl.component.data.column; + +import com.evolveum.midpoint.gui.api.page.PageBase; +import com.evolveum.midpoint.gui.impl.model.PropertyWrapperFromContainerValueWrapperModel; +import com.evolveum.midpoint.prism.Containerable; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.web.component.data.column.LinkColumn; +import com.evolveum.midpoint.web.component.form.Form; + +import javax.xml.namespace.QName; + +import org.apache.wicket.Component; +import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; +import org.apache.wicket.markup.repeater.Item; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; + +import com.evolveum.midpoint.web.component.prism.ContainerValueWrapper; +import com.evolveum.midpoint.web.component.prism.PrismPropertyColumn; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ClassLoggerConfigurationType; + +/** + * @author skublik + */ +public class EditableLinkPropertyWrapperColumn extends LinkColumn> { + + private static final long serialVersionUID = 1L; + + private static final Trace LOGGER = TraceManager.getTrace(EditableLinkPropertyWrapperColumn.class); + + private QName qNameOfProperty; + private PageBase page; + + public EditableLinkPropertyWrapperColumn(IModel displayModel, QName item, PageBase page) { + super(displayModel); + this.qNameOfProperty = item; + this.page = page; + } + + public EditableLinkPropertyWrapperColumn(IModel displayModel, String propertyExpression, QName item, PageBase page) { + super(displayModel, propertyExpression); + this.qNameOfProperty = item; + this.page = page; + } + + public EditableLinkPropertyWrapperColumn(IModel displayModel, String sortProperty, String propertyExpression, QName item, PageBase page) { + super(displayModel, sortProperty, propertyExpression); + this.qNameOfProperty = item; + this.page = page; + } + + @Override + public void populateItem(Item>> cellItem, String componentId, + final IModel> rowModel) { + if (!rowModel.getObject().isSelected()) { + super.populateItem(cellItem, componentId, rowModel); + } else { + cellItem.add(createInputPanel(componentId, rowModel)); + rowModel.getObject().setSelected(true); + } + } + + protected Component createInputPanel(String componentId, IModel> rowModel) { + Form form= new Form("form"); + PropertyWrapperFromContainerValueWrapperModel model = new PropertyWrapperFromContainerValueWrapperModel<>(rowModel, qNameOfProperty); + PrismPropertyColumn panel = new PrismPropertyColumn<>(componentId, model, form, getPageBase()); + return panel; + } + + @Override + protected IModel createLinkModel(IModel> rowModel) { + Form form= new Form("form"); + PropertyWrapperFromContainerValueWrapperModel model = new PropertyWrapperFromContainerValueWrapperModel<>(rowModel, qNameOfProperty); + return Model.of(String.valueOf(model.getObject().getItem().getRealValue())); + } + + private PageBase getPageBase() { + return page; + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/data/column/EditablePropertyWrapperColumn.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/data/column/EditablePropertyWrapperColumn.java new file mode 100644 index 00000000000..8458040506c --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/data/column/EditablePropertyWrapperColumn.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2010-2013 Evolveum + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.evolveum.midpoint.gui.impl.component.data.column; + +import java.util.List; + +import javax.xml.namespace.QName; + +import org.apache.wicket.Component; +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.markup.html.basic.Label; +import org.apache.wicket.markup.repeater.Item; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; + +import com.evolveum.midpoint.gui.api.page.PageBase; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; +import com.evolveum.midpoint.gui.impl.model.PropertyWrapperFromContainerValueWrapperModel; +import com.evolveum.midpoint.prism.Containerable; +import com.evolveum.midpoint.prism.path.ItemPath; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.web.component.form.Form; +import com.evolveum.midpoint.web.component.prism.ContainerValueWrapper; +import com.evolveum.midpoint.web.component.prism.PrismPropertyColumn; +import com.evolveum.midpoint.web.component.prism.PropertyWrapper; +import com.evolveum.midpoint.xml.ns._public.common.common_3.AppenderConfigurationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ClassLoggerConfigurationType; +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.LookupTableRowType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType; + +/** + * @author lazyman + */ +public class EditablePropertyWrapperColumn extends AbstractColumn, S> { + + private static final long serialVersionUID = 1L; + + private static final Trace LOGGER = TraceManager.getTrace(EditablePropertyWrapperColumn.class); + + private QName qNameOfProperty; + private PageBase page; + + public EditablePropertyWrapperColumn(IModel displayModel, QName item, PageBase page) { + super(displayModel); + this.qNameOfProperty = item; + this.page = page; + } + + public EditablePropertyWrapperColumn(IModel displayModel, S sortProperty, QName item, PageBase page) { + super(displayModel, sortProperty); + this.qNameOfProperty = item; + this.page = page; + } + + @Override + public void populateItem(Item>> cellItem, String componentId, + final IModel> rowModel) { + if (!rowModel.getObject().isSelected()) { + cellItem.add(createStaticPanel(componentId, rowModel)); + } else { + cellItem.add(createInputPanel(componentId, rowModel)); + } + } + + protected Component createInputPanel(String componentId, IModel> rowModel) { + Form form= new Form("form"); + PropertyWrapperFromContainerValueWrapperModel model = new PropertyWrapperFromContainerValueWrapperModel<>(rowModel, qNameOfProperty); + PrismPropertyColumn panel = new PrismPropertyColumn<>(componentId, model, form, getPageBase()); + return panel; + } + + protected Component createStaticPanel(String componentId, IModel> rowModel) { + Form form= new Form("form"); + PropertyWrapperFromContainerValueWrapperModel model = new PropertyWrapperFromContainerValueWrapperModel<>(rowModel, qNameOfProperty); + + if(model.getObject().getPath().removeIdentifiers().equivalent(new ItemPath(SystemConfigurationType.F_LOGGING, LoggingConfigurationType.F_CLASS_LOGGER, ClassLoggerConfigurationType.F_APPENDER))){ + if(((PropertyWrapper)model.getObject()).isEmpty()){ + IModel inheritModel = page.createStringResource("LoggingConfigPanel.appenders.Inherit"); + return new Label(componentId, inheritModel); + } + } + + PrismPropertyColumn panel = new PrismPropertyColumn<>(componentId, model, form, getPageBase()); + panel.setEnabled(false); + return panel; + } + + private PageBase getPageBase() { + return page; + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/data/column/EditableTextColumnForContainerWrapper.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/data/column/EditableTextColumnForContainerWrapper.java index 8631a2704c6..60d30422d69 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/data/column/EditableTextColumnForContainerWrapper.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/data/column/EditableTextColumnForContainerWrapper.java @@ -42,7 +42,7 @@ public EditableTextColumnForContainerWrapper(IModel displayModel, S sort public void populateItem(Item> cellItem, String componentId, final IModel rowModel) { if (!rowModel.getObject().isSelected()) { - cellItem.add(staticPanel(componentId, rowModel)); + cellItem.add(createStaticPanel(componentId, rowModel)); } else { cellItem.add(createInputPanel(componentId, rowModel)); } @@ -50,5 +50,5 @@ public void populateItem(Item> cellItem, String comp protected abstract Component createInputPanel(String componentId, IModel rowModel); - protected abstract Component staticPanel(String componentId, IModel rowModel); + protected abstract Component createStaticPanel(String componentId, IModel rowModel); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/model/PropertyWrapperFromContainerValueWrapperModel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/model/PropertyWrapperFromContainerValueWrapperModel.java new file mode 100644 index 00000000000..ca5040de802 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/model/PropertyWrapperFromContainerValueWrapperModel.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2010-2017 Evolveum + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.evolveum.midpoint.gui.impl.model; + +import com.evolveum.midpoint.prism.*; +import com.evolveum.midpoint.prism.path.ItemPath; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.web.component.prism.ContainerValueWrapper; +import com.evolveum.midpoint.web.component.prism.ObjectWrapper; +import com.evolveum.midpoint.web.component.prism.PropertyWrapper; +import com.evolveum.midpoint.web.model.AbstractWrapperModel; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ClassLoggerConfigurationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.LoggingLevelType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; + +import org.apache.commons.lang.Validate; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; + +import javax.xml.namespace.QName; + +/** + * Model that returns property real values. This implementation works on ObjectWrapper models (not PrismObject). + * + * @author katkav + * + */ +public class PropertyWrapperFromContainerValueWrapperModel implements IModel> { + + private static final long serialVersionUID = 1L; + + private ContainerValueWrapper value; + private QName item; + + public PropertyWrapperFromContainerValueWrapperModel(IModel> model, QName item) { + this.value = model.getObject(); + this.item = item; + } + + public PropertyWrapperFromContainerValueWrapperModel(ContainerValueWrapper value, QName item) { + this.value = value; + this.item = item; + } + + @Override + public void detach() { + } + + @Override + public PropertyWrapper getObject() { + return (PropertyWrapper)value.findPropertyWrapper(new ItemPath(value.getPath(), item)); + } + + @Override + public void setObject(PropertyWrapper object) { + throw new UnsupportedOperationException(); + } + +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/GlobalPolicyRuleTabPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/GlobalPolicyRuleTabPanel.html index d90270b1906..cae8d49b96c 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/GlobalPolicyRuleTabPanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/GlobalPolicyRuleTabPanel.html @@ -21,8 +21,5 @@
- - - \ No newline at end of file diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/GlobalPolicyRuleTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/GlobalPolicyRuleTabPanel.java index 0a053366540..22e053ae145 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/GlobalPolicyRuleTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/GlobalPolicyRuleTabPanel.java @@ -49,9 +49,11 @@ import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; import com.evolveum.midpoint.gui.impl.component.MultivalueContainerDetailsPanel; import com.evolveum.midpoint.gui.impl.component.MultivalueContainerListPanelWithDetailsPanel; +import com.evolveum.midpoint.gui.impl.model.PropertyWrapperFromContainerValueWrapperModel; import com.evolveum.midpoint.prism.Containerable; import com.evolveum.midpoint.prism.PrismContainerValue; import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.prism.PrismPropertyValue; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.query.AllFilter; import com.evolveum.midpoint.prism.query.ObjectPaging; @@ -94,6 +96,8 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectPolicyConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.PolicyActionsType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.PolicyConstraintsType; import com.evolveum.midpoint.xml.ns._public.common.common_3.PolicyRuleType; import com.evolveum.midpoint.xml.ns._public.common.common_3.PropertyConstraintType; import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType; @@ -109,8 +113,6 @@ public class GlobalPolicyRuleTabPanel extends BasePanel> detailsPanelObjectPoliciesList = new ArrayList<>(); @@ -191,7 +193,7 @@ private List> getObjects() { protected void newGlobalPolicuRuleClickPerformed(AjaxRequestTarget target) { PrismContainerValue newObjectPolicy = getModel().getObject().getItem().createNewValue(); ContainerValueWrapper newObjectPolicyWrapper = getMultivalueContainerListPanel().createNewItemContainerValueWrapper(newObjectPolicy, getModel()); - newObjectPolicyWrapper.setShowEmpty(true, false); + newObjectPolicyWrapper.setShowEmpty(true, true); newObjectPolicyWrapper.computeStripes(); getMultivalueContainerListPanel().itemDetailsPerformed(target, Arrays.asList(newObjectPolicyWrapper)); } @@ -217,11 +219,6 @@ public GlobalPolicyRuleType getObject() { return new DisplayNamePanel(displayNamePanelId, displayNameModel); } - @Override - protected Fragment getSpecificContainers(String contentAreaId) { - Fragment specificContainers = new Fragment(contentAreaId, ID_SPECIFIC_CONTAINERS_FRAGMENT, GlobalPolicyRuleTabPanel.this); - return specificContainers; - } }; return detailsPanel; } @@ -268,8 +265,8 @@ public String getObject() { @Override protected IModel createLinkModel(IModel> rowModel) { - GlobalPolicyRuleType policyRuleType = rowModel.getObject().getContainerValue().getValue(); - String name = policyRuleType.getName(); + PropertyWrapperFromContainerValueWrapperModel propertyModel = new PropertyWrapperFromContainerValueWrapperModel(rowModel, GlobalPolicyRuleType.F_NAME); + String name = propertyModel.getObject().getValues().get(0).getValue().getRealValue(); if (StringUtils.isBlank(name)) { return createStringResource("AssignmentPanel.noName"); } @@ -288,8 +285,8 @@ public void onClick(AjaxRequestTarget target, IModel>> cellItem, String componentId, final IModel> rowModel) { - GlobalPolicyRuleType policyRuleType = rowModel.getObject().getContainerValue().getValue(); - String constraints = PolicyRuleTypeUtil.toShortString(policyRuleType.getPolicyConstraints()); + ContainerWrapper wrapper = rowModel.getObject().findContainerWrapper(new ItemPath(rowModel.getObject().getPath(), GlobalPolicyRuleType.F_POLICY_CONSTRAINTS)); + String constraints = PolicyRuleTypeUtil.toShortString(wrapper.getValues().get(0).getContainerValue().getValue()); cellItem.add(new MultiLineLabel(componentId, Model.of(constraints != null && !constraints.equals("null") ? constraints : ""))); } @@ -300,8 +297,8 @@ public void populateItem(Item>> cellItem, String componentId, final IModel> rowModel) { - GlobalPolicyRuleType globalPolicyRuleTypeModel = rowModel.getObject().getContainerValue().getValue(); - String situationValue = globalPolicyRuleTypeModel == null ? "" : globalPolicyRuleTypeModel.getPolicySituation(); + PropertyWrapperFromContainerValueWrapperModel propertyModel = new PropertyWrapperFromContainerValueWrapperModel(rowModel, GlobalPolicyRuleType.F_POLICY_SITUATION); + String situationValue = propertyModel.getObject().getValues().get(0).getValue().getRealValue(); cellItem.add(new Label(componentId, Model.of(situationValue))); } @@ -312,8 +309,8 @@ public void populateItem(Item>> cellItem, String componentId, final IModel> rowModel) { - GlobalPolicyRuleType globalPolicyRuleTypeModel = rowModel.getObject().getContainerValue().getValue(); - String action = PolicyRuleTypeUtil.toShortString(globalPolicyRuleTypeModel.getPolicyActions(), new ArrayList<>()); + ContainerWrapper wrapper = rowModel.getObject().findContainerWrapper(new ItemPath(rowModel.getObject().getPath(), GlobalPolicyRuleType.F_POLICY_ACTIONS)); + String action = PolicyRuleTypeUtil.toShortString(wrapper.getValues().get(0).getContainerValue().getValue(), new ArrayList<>()); cellItem.add(new MultiLineLabel(componentId, Model.of(action != null && !action.equals("null") ? action : ""))); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/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 abd43765182..9e3eafa436c 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 @@ -25,8 +25,5 @@
- - - \ 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 3f0b39dfc97..e648caaf945 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 @@ -18,10 +18,8 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; import java.util.Iterator; import java.util.List; -import java.util.Map; import org.apache.commons.lang.StringUtils; import org.apache.wicket.Component; @@ -31,14 +29,12 @@ 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; @@ -52,11 +48,11 @@ 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.EditableLinkColumnForContainerWrapper; +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.data.column.EditableTextColumnForContainerWrapper; import com.evolveum.midpoint.prism.PrismContainer; import com.evolveum.midpoint.prism.PrismContainerValue; -import com.evolveum.midpoint.prism.PrismPropertyValue; -import com.evolveum.midpoint.prism.PrismValue; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.query.AllFilter; import com.evolveum.midpoint.prism.query.ObjectPaging; @@ -70,27 +66,17 @@ 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.input.ListMultipleChoicePanel; -import com.evolveum.midpoint.web.component.input.StringChoiceRenderer; 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.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; @@ -102,7 +88,10 @@ 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.LoggingLevelType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableRowType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableType; import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType; +import com.evolveum.prism.xml.ns._public.types_3.PolyStringType; /** * @author skublik @@ -121,8 +110,8 @@ public class LoggingConfigurationTabPanel extends BasePanel>(createStringResource("LoggingConfigurationTabPanel.loggers.package")){ - private static final long serialVersionUID = 1L; - - @Override - protected IModel createLinkModel(IModel> rowModel) { - ClassLoggerConfigurationType logger = rowModel.getObject().getContainerValue().getValue(); - String loggerPackage = logger.getPackage(); - return Model.of(loggerPackage); - } - - @Override - protected Component createInputPanel(String componentId, - IModel> rowModel) { - - List allLoggers = new ArrayList(); - IModel> standardLoggers = WebComponentUtil.createReadonlyModelFromEnum(StandardLoggerType.class); - IModel> componentLoggers = WebComponentUtil.createReadonlyModelFromEnum(LoggingComponentType.class); - - for(StandardLoggerType standardLogger : standardLoggers.getObject()) { - allLoggers.add(standardLogger.name()); - } - for(LoggingComponentType componentLogger : componentLoggers.getObject()) { - allLoggers.add(componentLogger.name()); - } - - 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 - public void setObject(String name) { - - String packageValue = name; - for (StandardLoggerType standardLogger : StandardLoggerType.values()) { - if (name.equals(standardLogger.name())) { - packageValue = standardLogger.getValue(); - } - } - - for (LoggingComponentType componentLogger : LoggingComponentType.values()) { - if (name.equals(componentLogger.name())) { - packageValue = componentLogger.value(); - } - } - super.setObject(packageValue); - } - - } - , String.class, new AbstractAutoCompleteRenderer() { - - private static final long serialVersionUID = 1L; - - @Override - protected String getTextValue(Object name) { - - for (StandardLoggerType standardLogger : StandardLoggerType.values()) { - if (name.equals(standardLogger.name())) { - return standardLogger.getValue(); - } - } - - for (LoggingComponentType componentLogger : LoggingComponentType.values()) { - if (name.equals(componentLogger.name())) { - return componentLogger.value(); - } - } - - return name.toString(); - } - - @Override - protected void renderChoice(Object name, Response response, String criteria) { - - String displayName = name.toString(); - for (StandardLoggerType standardLogger : StandardLoggerType.values()) { - if (name.equals(standardLogger.name())) { - displayName = createStringResource("StandardLoggerType." + name).getString(); - } - } - - for (LoggingComponentType componentLogger : LoggingComponentType.values()) { - if (name.equals(componentLogger.name())) { - displayName = createStringResource("LoggingComponentType." + name).getString(); - } - } - - displayName = Strings.escapeMarkup(displayName).toString(); - response.write(displayName); - } - - }) { - - private static final long serialVersionUID = 1L; - - @Override - public Iterator getIterator(String input) { - return allLoggers.iterator(); - } - - }; - return autoCompleteTextPanel; - } - - @Override - public void onClick(AjaxRequestTarget target, IModel> rowModel) { - loggerEditPerformed(target, rowModel, null); - } - }); - - columns.add(new EditableTextColumnForContainerWrapper, String>(createStringResource("LoggingConfigurationTabPanel.loggers.level")){ - private static final long serialVersionUID = 1L; - - @Override - 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; - Form form= new Form("form"); - return new PrismPropertyColumn<>(componentId, new Model(levelWrapper), form, getPageBase()); - } - + columns.add(new EditableLinkPropertyWrapperColumn(createStringResource("LoggingConfigurationTabPanel.loggers.package"), ClassLoggerConfigurationType.F_PACKAGE, getPageBase()) { @Override - protected Component staticPanel(String componentId, - IModel> rowModel) { - ClassLoggerConfigurationType logger = rowModel.getObject().getContainerValue().getValue(); - return new Label(componentId, WebComponentUtil.createLocalizedModelForEnum(logger.getLevel(), getPageBase())); + public void onClick(AjaxRequestTarget target, IModel> rowModel) { + loggerEditPerformed(target, rowModel, null); } - }); - - columns.add(new EditableTextColumnForContainerWrapper, String>(createStringResource("LoggingConfigurationTabPanel.loggers.appender")){ - private static final long serialVersionUID = 1L; - - @Override - protected Component createInputPanel(String componentId, - IModel> rowModel) { -// 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<>(); -// - 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; - } - - @Override - protected Component staticPanel(String componentId, - IModel> rowModel) { - ClassLoggerConfigurationType logger = rowModel.getObject().getContainerValue().getValue(); - - IModel model = Model.of(""); - if(logger.getAppender().isEmpty()){ - model = createStringResource("LoggingConfigPanel.appenders.Inherit"); - } else{ - model = new LoadableModel() { - - private static final long serialVersionUID = 1L; - - @Override - protected String load() { - StringBuilder builder = new StringBuilder(); - for (String appender : logger.getAppender()) { - if (logger.getAppender().indexOf(appender) != 0) { - builder.append(", "); - } - builder.append(appender); - } - - return builder.toString(); - } - }; - } - - return new Label(componentId, model); - } - }); - + }); + columns.add(new EditablePropertyWrapperColumn(createStringResource("LoggingConfigurationTabPanel.loggers.level"), ClassLoggerConfigurationType.F_LEVEL, getPageBase())); + columns.add(new EditablePropertyWrapperColumn(createStringResource("LoggingConfigurationTabPanel.loggers.appender"), ClassLoggerConfigurationType.F_APPENDER, getPageBase())); List menuActionsList = getLoggersMultivalueContainerListPanel().getDefaultMenuActions(); columns.add(new InlineMenuButtonColumn<>(menuActionsList, menuActionsList.size(), getPageBase())); @@ -693,7 +425,6 @@ protected void getBasicContainerValuePanel(String idPanel) { Form form = new Form<>("form"); ItemPath itemPath = getModelObject().getPath(); IModel> model = getModel(); - model.getObject().setShowEmpty(true, true); model.getObject().getContainer().setShowOnTopLevel(true); ContainerValuePanel panel; if(item.getModelObject().getContainerValue().getValue() instanceof FileAppenderConfigurationType) { @@ -736,50 +467,50 @@ protected ItemVisibility getBasicTabVisibity(ItemWrapper itemWrapper, ItemPath p return ItemVisibility.VISIBLE; } - @Override - protected Fragment getSpecificContainers(String contentAreaId) { - Fragment specificContainers = new Fragment(contentAreaId, ID_SPECIFIC_CONTAINERS_FRAGMENT, LoggingConfigurationTabPanel.this); -// -// Form form = new Form<>("form"); -// ItemPath itemPath = getModelObject().getPath(); -// IModel> model = getModel(); -// model.getObject().setShowEmpty(true, true); -// model.getObject().getContainer().setShowOnTopLevel(true); -// ContainerValuePanel panel; -// if(item.getModelObject().getContainerValue().getValue() instanceof FileAppenderConfigurationType) { -// -// LOGGER.info("XXXXXXXXXXXXX item: " + item.getModelObject().get); -// LOGGER.info("XXXXXXXXXXXXX getFilePattern: " + ((FileAppenderConfigurationType)item.getModelObject().getContainerValue().getValue()).getFilePattern()); -// -// FileAppenderConfigurationType appender = (FileAppenderConfigurationType) item.getModelObject().getContainerValue().getValue(); -// ContainerWrapperFactory cwf = new ContainerWrapperFactory(getPageBase()); -// Task task = LoggingConfigurationTabPanel.this.getPageBase().createSimpleTask(TASK_CREATE_APPENDER); -// ContainerWrapper wrapper = cwf.createContainerWrapper((PrismContainer)appender.asPrismContainerValue().getContainer(), item.getModelObject().getObjectStatus(), -// item.getModelObject().getObjectStatus(), item.getModelObject().getPath(), task); -// ContainerValueWrapper value = cwf.createContainerValueWrapper(wrapper, (PrismContainerValue)appender.asPrismContainerValue(), item.getModelObject().getObjectStatus(), item.getModelObject().getStatus(), item.getModelObject().getPath(), task); -// -// IModel> valueModel = new LoadableModel>(false) { -// -// private static final long serialVersionUID = 1L; -// -// @Override -// protected ContainerValueWrapper load() { -// return value; -// } -// }; -// -// panel = new ContainerValuePanel(ID_SPECIFIC_CONTAINER, valueModel, true, form, -// itemWrapper -> getBasicTabVisibity(itemWrapper, itemPath), getPageBase()); -//// } else if(item.getModelObject().getContainerValue().getValue() instanceof SyslogAppenderConfigurationType) { -//// panel = new ContainerValuePanel(ID_SPECIFIC_CONTAINER, model, true, form, -//// null, getPageBase()); -// } else { -// panel = new ContainerValuePanel(ID_SPECIFIC_CONTAINER, getModel(), true, form, -// itemWrapper -> getBasicTabVisibity(itemWrapper, itemPath), getPageBase()); -// } -// specificContainers.add(panel); - return specificContainers; - } +// @Override +// protected Fragment getSpecificContainers(String contentAreaId) { +// Fragment specificContainers = new Fragment(contentAreaId, ID_SPECIFIC_CONTAINERS_FRAGMENT, LoggingConfigurationTabPanel.this); +//// +//// Form form = new Form<>("form"); +//// ItemPath itemPath = getModelObject().getPath(); +//// IModel> model = getModel(); +//// model.getObject().setShowEmpty(true, true); +//// model.getObject().getContainer().setShowOnTopLevel(true); +//// ContainerValuePanel panel; +//// if(item.getModelObject().getContainerValue().getValue() instanceof FileAppenderConfigurationType) { +//// +//// LOGGER.info("XXXXXXXXXXXXX item: " + item.getModelObject().get); +//// LOGGER.info("XXXXXXXXXXXXX getFilePattern: " + ((FileAppenderConfigurationType)item.getModelObject().getContainerValue().getValue()).getFilePattern()); +//// +//// FileAppenderConfigurationType appender = (FileAppenderConfigurationType) item.getModelObject().getContainerValue().getValue(); +//// ContainerWrapperFactory cwf = new ContainerWrapperFactory(getPageBase()); +//// Task task = LoggingConfigurationTabPanel.this.getPageBase().createSimpleTask(TASK_CREATE_APPENDER); +//// ContainerWrapper wrapper = cwf.createContainerWrapper((PrismContainer)appender.asPrismContainerValue().getContainer(), item.getModelObject().getObjectStatus(), +//// item.getModelObject().getObjectStatus(), item.getModelObject().getPath(), task); +//// ContainerValueWrapper value = cwf.createContainerValueWrapper(wrapper, (PrismContainerValue)appender.asPrismContainerValue(), item.getModelObject().getObjectStatus(), item.getModelObject().getStatus(), item.getModelObject().getPath(), task); +//// +//// IModel> valueModel = new LoadableModel>(false) { +//// +//// private static final long serialVersionUID = 1L; +//// +//// @Override +//// protected ContainerValueWrapper load() { +//// return value; +//// } +//// }; +//// +//// panel = new ContainerValuePanel(ID_SPECIFIC_CONTAINER, valueModel, true, form, +//// itemWrapper -> getBasicTabVisibity(itemWrapper, itemPath), getPageBase()); +////// } else if(item.getModelObject().getContainerValue().getValue() instanceof SyslogAppenderConfigurationType) { +////// panel = new ContainerValuePanel(ID_SPECIFIC_CONTAINER, model, true, form, +////// null, getPageBase()); +//// } else { +//// panel = new ContainerValuePanel(ID_SPECIFIC_CONTAINER, getModel(), true, form, +//// itemWrapper -> getBasicTabVisibity(itemWrapper, itemPath), getPageBase()); +//// } +//// specificContainers.add(panel); +// return specificContainers; +// } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ObjectPolicyConfigurationTabPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ObjectPolicyConfigurationTabPanel.html index 352ebb52fef..7a6d3e9f20e 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ObjectPolicyConfigurationTabPanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ObjectPolicyConfigurationTabPanel.html @@ -21,8 +21,5 @@
- - - \ No newline at end of file diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ObjectPolicyConfigurationTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ObjectPolicyConfigurationTabPanel.java index 176148ec219..b8be335386d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ObjectPolicyConfigurationTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ObjectPolicyConfigurationTabPanel.java @@ -107,7 +107,6 @@ public class ObjectPolicyConfigurationTabPanel extends BasePanel> detailsPanelObjectPoliciesList = new ArrayList<>(); @@ -213,12 +212,6 @@ public ObjectPolicyConfigurationType getObject() { return new DisplayNamePanel(displayNamePanelId, displayNameModel); } - @Override - protected Fragment getSpecificContainers(String contentAreaId) { - Fragment specificContainers = new Fragment(contentAreaId, ID_SPECIFIC_CONTAINERS_FRAGMENT, ObjectPolicyConfigurationTabPanel.this); - return specificContainers; - } - // @Override // protected ContainerValuePanel getBasicContainerValuePanel( // String idPanel) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AbstractRoleAssignmentPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AbstractRoleAssignmentPanel.java index f97262f7be7..5a3c3e8da65 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AbstractRoleAssignmentPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AbstractRoleAssignmentPanel.java @@ -51,6 +51,8 @@ import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.gui.impl.component.MultivalueContainerListPanelWithDetailsPanel; +import com.evolveum.midpoint.gui.impl.model.PropertyWrapperFromContainerValueWrapperModel; +import com.evolveum.midpoint.prism.DefaultReferencableImpl; import com.evolveum.midpoint.prism.PrismConstants; import com.evolveum.midpoint.prism.PrismContainerDefinition; import com.evolveum.midpoint.prism.path.ItemPath; @@ -244,6 +246,7 @@ public void populateItem(Item>> item, String componentId, final IModel> rowModel) { + item.add(new Label(componentId, getTenantLabelModel(rowModel.getObject()))); } }); @@ -333,8 +336,9 @@ private IModel getTenantLabelModel(ContainerValueWrapper if (assignmentContainer == null || assignmentContainer.getContainerValue() == null){ return Model.of(""); } - AssignmentType assignment = assignmentContainer.getContainerValue().asContainerable(); - return Model.of(WebComponentUtil.getReferencedObjectDisplayNamesAndNames(Arrays.asList(assignment.getTenantRef()), false)); + PropertyOrReferenceWrapper policyRuleWrapper = (PropertyOrReferenceWrapper)assignmentContainer.findPropertyWrapper(new ItemPath(assignmentContainer.getPath(), AssignmentType.F_TENANT_REF)); +// AssignmentType assignment = assignmentContainer.getContainerValue().asContainerable(); + return Model.of(WebComponentUtil.getReferencedObjectDisplayNamesAndNames((DefaultReferencableImpl)policyRuleWrapper.getItem().getRealValue(), false)); } @@ -342,8 +346,10 @@ private IModel getOrgRefLabelModel(ContainerValueWrapper if (assignmentContainer == null || assignmentContainer.getContainerValue() == null){ return Model.of(""); } - AssignmentType assignment = assignmentContainer.getContainerValue().asContainerable(); - return Model.of(WebComponentUtil.getReferencedObjectDisplayNamesAndNames(Arrays.asList(assignment.getOrgRef()), false)); + PropertyOrReferenceWrapper policyRuleWrapper = (PropertyOrReferenceWrapper)assignmentContainer.findPropertyWrapper(new ItemPath(assignmentContainer.getPath(), AssignmentType.F_ORG_REF)); + return Model.of(WebComponentUtil.getReferencedObjectDisplayNamesAndNames((DefaultReferencableImpl)policyRuleWrapper.getItem().getRealValue(), false)); +// AssignmentType assignment = assignmentContainer.getContainerValue().asContainerable(); +// return Model.of(WebComponentUtil.getReferencedObjectDisplayNamesAndNames(Arrays.asList(assignment.getOrgRef()), false)); } @@ -367,7 +373,6 @@ protected IModel getSpecificContainerModel(ContainerValueWrapp if (ConstructionType.COMPLEX_TYPE.equals(AssignmentsUtil.getTargetType(modelObject.getContainerValue().getValue()))) { ContainerWrapper constructionWrapper = modelObject.findContainerWrapper(new ItemPath(modelObject.getPath(), AssignmentType.F_CONSTRUCTION)); - constructionWrapper.setShowEmpty(true, true); return Model.of(constructionWrapper); } @@ -375,7 +380,6 @@ protected IModel getSpecificContainerModel(ContainerValueWrapp if (PersonaConstructionType.COMPLEX_TYPE.equals(AssignmentsUtil.getTargetType(modelObject.getContainerValue().getValue()))) { ContainerWrapper personasWrapper = modelObject.findContainerWrapper(new ItemPath(modelObject.getPath(), AssignmentType.F_PERSONA_CONSTRUCTION)); - personasWrapper.setShowEmpty(true, true); return Model.of(personasWrapper); } 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 8e1a6c8f8c7..5f495afc9cf 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 @@ -201,7 +201,7 @@ public String getObject() { @Override protected IModel createLinkModel(IModel> rowModel) { - String name = AssignmentsUtil.getName(rowModel.getObject().getContainerValue().asContainerable(), getParentPage()); + String name = AssignmentsUtil.getName(rowModel.getObject(), getParentPage()); if (StringUtils.isBlank(name)) { return createStringResource("AssignmentPanel.noName"); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentsUtil.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentsUtil.java index 4bfc447a8f9..8a26b433531 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentsUtil.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentsUtil.java @@ -10,6 +10,7 @@ import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.util.QNameUtil; import com.evolveum.midpoint.web.component.prism.ContainerValueWrapper; +import com.evolveum.midpoint.web.component.prism.ContainerWrapper; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.apache.commons.lang3.StringUtils; import org.apache.wicket.model.AbstractReadOnlyModel; @@ -19,6 +20,8 @@ import com.evolveum.midpoint.gui.api.component.BasePanel; import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.gui.impl.model.PropertyWrapperFromContainerValueWrapperModel; +import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.util.MiscUtil; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; @@ -219,16 +222,21 @@ public String getObject() { }; } - public static String getName(AssignmentType assignment, PageBase pageBase) { + public static String getName(ContainerValueWrapper assignmentValueWrapper, PageBase pageBase) { + AssignmentType assignment = assignmentValueWrapper.getContainerValue().asContainerable(); + if (assignment == null) { return null; } if (assignment.getPolicyRule() != null){ - PolicyRuleType policyRuleContainer = assignment.getPolicyRule(); - if (StringUtils.isNotEmpty(policyRuleContainer.getName())){ - return policyRuleContainer.getName(); + ContainerWrapper policyRuleWrapper = assignmentValueWrapper.findContainerWrapper(new ItemPath(assignmentValueWrapper.getPath(), AssignmentType.F_POLICY_RULE)); + PropertyWrapperFromContainerValueWrapperModel propertyModel = new PropertyWrapperFromContainerValueWrapperModel(policyRuleWrapper.getValues().get(0), PolicyRuleType.F_NAME); + String name = propertyModel.getObject().getValues().get(0).getValue().getRealValue(); + if (StringUtils.isNotEmpty(name)){ + return name; } else { + PolicyRuleType policyRuleContainer = assignment.getPolicyRule(); StringBuilder sb = new StringBuilder(""); PolicyConstraintsType constraints = policyRuleContainer.getPolicyConstraints(); if (constraints != null && constraints.getExclusion() != null && constraints.getExclusion().size() > 0){ diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/PolicyRulesPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/PolicyRulesPanel.java index 334e0808672..6ec405360c8 100755 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/PolicyRulesPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/PolicyRulesPanel.java @@ -20,9 +20,13 @@ import java.util.List; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.gui.impl.model.PropertyWrapperFromContainerValueWrapperModel; +import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.GlobalPolicyRuleTabPanel; import com.evolveum.midpoint.prism.PrismContainerValue; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.schema.util.PolicyRuleTypeUtil; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.web.component.prism.ContainerValueWrapper; import com.evolveum.midpoint.web.component.prism.ContainerWrapper; import com.evolveum.midpoint.web.component.prism.ItemVisibility; @@ -57,6 +61,8 @@ public class PolicyRulesPanel extends AssignmentPanel { private static final long serialVersionUID = 1L; + + private static final Trace LOGGER = TraceManager.getTrace(PolicyRulesPanel.class); public PolicyRulesPanel(String id, IModel> assignmentContainerWrapperModel){ super(id, assignmentContainerWrapperModel); @@ -71,8 +77,9 @@ protected List, String>> initColum @Override public void populateItem(Item>> cellItem, String componentId, final IModel> rowModel) { - PolicyRuleType policyRuleType = rowModel.getObject().getContainerValue().getValue().getPolicyRule(); - String constraints = PolicyRuleTypeUtil.toShortString(policyRuleType.getPolicyConstraints()); + ContainerWrapper policyRuleWrapper = rowModel.getObject().findContainerWrapper(new ItemPath(rowModel.getObject().getPath(), AssignmentType.F_POLICY_RULE)); + ContainerWrapper wrapper = policyRuleWrapper.getValues().get(0).findContainerWrapper(new ItemPath(policyRuleWrapper.getPath(), PolicyRuleType.F_POLICY_CONSTRAINTS)); + String constraints = PolicyRuleTypeUtil.toShortString(wrapper.getValues().get(0).getContainerValue().getValue()); cellItem.add(new MultiLineLabel(componentId, Model.of(constraints != null && !constraints.equals("null") ? constraints : ""))); } @@ -83,8 +90,9 @@ public void populateItem(Item>> cellItem, String componentId, final IModel> rowModel) { - PolicyRuleType policyRuleType = rowModel.getObject().getContainerValue().getValue().getPolicyRule(); - String situationValue = policyRuleType == null ? "" : policyRuleType.getPolicySituation(); + ContainerWrapper policyRuleWrapper = rowModel.getObject().findContainerWrapper(new ItemPath(rowModel.getObject().getPath(), AssignmentType.F_POLICY_RULE)); + PropertyWrapperFromContainerValueWrapperModel propertyModel = new PropertyWrapperFromContainerValueWrapperModel(policyRuleWrapper.getValues().get(0), PolicyRuleType.F_POLICY_SITUATION); + String situationValue = propertyModel.getObject().getValues().get(0).getValue().getRealValue(); cellItem.add(new Label(componentId, Model.of(situationValue))); } @@ -95,8 +103,11 @@ public void populateItem(Item>> cellItem, String componentId, final IModel> rowModel) { - PolicyRuleType policyRuleType = rowModel.getObject().getContainerValue().getValue().getPolicyRule(); - String action = PolicyRuleTypeUtil.toShortString(policyRuleType.getPolicyActions(), new ArrayList<>()); + ContainerWrapper policyRuleWrapper = rowModel.getObject().findContainerWrapper(new ItemPath(rowModel.getObject().getPath(), AssignmentType.F_POLICY_RULE)); + ContainerWrapper wrapper = policyRuleWrapper.getValues().get(0).findContainerWrapper(new ItemPath(policyRuleWrapper.getValues().get(0).getPath(), PolicyRuleType.F_POLICY_ACTIONS)); +// LOGGER.info("XXXXXXXXXXXXXXXXXXX propertyModel " + wrapper.getValues().get(0).getContainerValue()); + String action = PolicyRuleTypeUtil.toShortString(wrapper.getValues().get(0).getContainerValue().getValue(), new ArrayList<>()); +// LOGGER.info("XXXXXXXXXXXXXXXXXXX action " + action); cellItem.add(new MultiLineLabel(componentId, Model.of(action != null && !action.equals("null") ? action : ""))); } @@ -107,13 +118,15 @@ public void populateItem(Item>> cellItem, String componentId, final IModel> rowModel) { - AssignmentType assignment = rowModel.getObject().getContainerValue().getValue(); + PropertyWrapperFromContainerValueWrapperModel propertyModel = new PropertyWrapperFromContainerValueWrapperModel(rowModel.getObject(), AssignmentType.F_ORDER); + + AssignmentType assignment = rowModel.getObject().getContainerValue().getValue(); String orderValue; - if (assignment == null || assignment.getOrder() == null){ + if (propertyModel == null || propertyModel.getObject().getValues().get(0).getValue().getRealValue() == null){ orderValue = ""; } else { - orderValue = Integer.toString(assignment.getOrder()); + orderValue = Integer.toString(propertyModel.getObject().getValues().get(0).getValue().getRealValue()); } cellItem.add(new Label(componentId, Model.of(orderValue))); } @@ -172,7 +185,6 @@ protected Fragment getCustomSpecificContainers(String contentAreaId, ContainerVa @Override protected IModel getSpecificContainerModel(ContainerValueWrapper modelObject) { ContainerWrapper policyRuleWrapper = modelObject.findContainerWrapper(new ItemPath(modelObject.getPath(), AssignmentType.F_POLICY_RULE)); - policyRuleWrapper.setShowEmpty(true, true); return Model.of(policyRuleWrapper); } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerWrapper.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerWrapper.java index c986c806293..32b606a5e4c 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerWrapper.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerWrapper.java @@ -152,10 +152,10 @@ public PropertyOrReferenceWrapper findPropertyWrapper(QName name) { return null; } - public ContainerWrapper findContainerWrapper(ItemPath path) { + public ContainerWrapper findContainerWrapper(ItemPath path) { Validate.notNull(path, "QName must not be null."); for (ContainerValueWrapper wrapper : getValues()) { - ContainerWrapper containerWrapper = wrapper.findContainerWrapper(path); + ContainerWrapper containerWrapper = wrapper.findContainerWrapper(path); if (containerWrapper != null) { return containerWrapper; } 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 index cd240fd6749..18e875a8219 100644 --- 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 @@ -29,13 +29,38 @@ import com.evolveum.midpoint.gui.api.component.BasePanel; import com.evolveum.midpoint.gui.api.page.PageBase; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; +import com.evolveum.midpoint.gui.impl.model.PropertyWrapperFromContainerValueWrapperModel; +import com.evolveum.midpoint.prism.path.ItemPath; +import com.evolveum.midpoint.prism.query.AllFilter; +import com.evolveum.midpoint.prism.query.AndFilter; +import com.evolveum.midpoint.prism.query.ObjectQuery; +import com.evolveum.midpoint.prism.query.TypeFilter; +import com.evolveum.midpoint.schema.result.OperationResult; +import com.evolveum.midpoint.util.exception.CommunicationException; +import com.evolveum.midpoint.util.exception.ConfigurationException; +import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; +import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.SchemaException; +import com.evolveum.midpoint.util.exception.SecurityViolationException; 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.web.page.admin.configuration.dto.StandardLoggerType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.AppenderConfigurationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ClassLoggerConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ConstructionType; +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.LookupTableRowType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableType; import com.evolveum.midpoint.xml.ns._public.common.common_3.MappingType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.NodeType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceObjectAssociationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType; +import com.evolveum.prism.xml.ns._public.types_3.PolyStringType; /** * @author katkav @@ -47,14 +72,50 @@ public class PrismPropertyColumn extends BasePanel { 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()); - + + if(model.getObject().getPath().removeIdentifiers().equivalent(new ItemPath(SystemConfigurationType.F_LOGGING, LoggingConfigurationType.F_CLASS_LOGGER, ClassLoggerConfigurationType.F_APPENDER))){ + LookupTableType lookupTable = new LookupTableType(); + List list = lookupTable.createRowList(); + + for (AppenderConfigurationType appender : WebModelServiceUtils.loadSystemConfigurationAsObjectWrapper(pageBase).getObject().getRealValue().getLogging().getAppender()) { + LookupTableRowType row = new LookupTableRowType(); + String name = appender.getName(); + row.setKey(name); + row.setValue(name); + row.setLabel(new PolyStringType(name)); + list.add(row); + } + ((PropertyWrapper)model.getObject()).setPredefinedValues(lookupTable); + } else if(model.getObject().getPath().removeIdentifiers().equivalent(new ItemPath(SystemConfigurationType.F_LOGGING, LoggingConfigurationType.F_CLASS_LOGGER, ClassLoggerConfigurationType.F_PACKAGE))){ + LookupTableType lookupTable = new LookupTableType(); + List list = lookupTable.createRowList(); + IModel> standardLoggers = WebComponentUtil.createReadonlyModelFromEnum(StandardLoggerType.class); + IModel> componentLoggers = WebComponentUtil.createReadonlyModelFromEnum(LoggingComponentType.class); + + for(StandardLoggerType standardLogger : standardLoggers.getObject()) { + LookupTableRowType row = new LookupTableRowType(); + row.setKey(standardLogger.getValue()); + row.setValue(standardLogger.getValue()); + row.setLabel(new PolyStringType(createStringResource("StandardLoggerType." + standardLogger.name()).getString())); + list.add(row); + } + for(LoggingComponentType componentLogger : componentLoggers.getObject()) { + LookupTableRowType row = new LookupTableRowType(); + row.setKey(componentLogger.value()); + row.setValue(componentLogger.value()); + row.setLabel(new PolyStringType(createStringResource("LoggingComponentType." + componentLogger.name()).getString())); + list.add(row); + } + ((PropertyWrapper)model.getObject()).setPredefinedValues(lookupTable); + } + setOutputMarkupId(true); add(new VisibleEnableBehaviour() { private static final long serialVersionUID = 1L; @@ -70,6 +131,9 @@ public boolean isVisible() { @Override public boolean isEnabled() { + if(model.getObject() instanceof PropertyWrapper && model.getObject().getPath().isSuperPathOrEquivalent(new ItemPath(SystemConfigurationType.F_LOGGING, LoggingConfigurationType.F_CLASS_LOGGER))){ + return ((PropertyWrapper)model.getObject()).getContainerValue().isSelected(); + } return !model.getObject().isReadonly(); } }); @@ -124,7 +188,7 @@ protected IModel createStyleClassModel(final IModel value) @Override public String getObject() { if (getIndexOfValue(value.getObject()) > 0) { - return "col-md-offset-2 prism-value"; + return "prism-value"; } return null; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismValuePanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismValuePanel.html index 74502b70025..c0eabcb68ab 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismValuePanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismValuePanel.html @@ -22,8 +22,10 @@
- - + + +
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismValuePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismValuePanel.java index ee144ea6b1e..9bfeddd6d98 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismValuePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismValuePanel.java @@ -648,7 +648,29 @@ protected AttributeAppender getSpecificLabelStyleAppender() { PrismPropertyDefinition def = property.getDefinition(); - if (def.getValueEnumerationRef() != null) { + if(getModelObject().getItem() instanceof PropertyWrapper && ((PropertyWrapper)getModelObject().getItem()).getPredefinedValues() != null) { + LookupTableType lookupTable = ((PropertyWrapper)getModelObject().getItem()).getPredefinedValues(); + panel = new AutoCompleteTextPanel(id, new LookupPropertyModel<>(getModel(), + baseExpression, lookupTable), type) { + + private static final long serialVersionUID = 1L; + + @Override + public Iterator getIterator(String input) { + return prepareAutoCompleteList(input, lookupTable.asPrismObject()).iterator(); + } + + @Override + protected void updateFeedbackPanel(AutoCompleteTextField input, boolean isError, + AjaxRequestTarget target) { + if (isError) { + input.error("Entered value doesn't match any of available values and will not be saved."); + } + target.add(PrismValuePanel.this.get(ID_FEEDBACK)); + } + }; + + } else if (def.getValueEnumerationRef() != null) { PrismReferenceValue valueEnumerationRef = def.getValueEnumerationRef(); String lookupTableUid = valueEnumerationRef.getOid(); Task task = getPageBase().createSimpleTask("loadLookupTable"); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PropertyWrapper.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PropertyWrapper.java index 4c4849ebac5..42690f33370 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PropertyWrapper.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PropertyWrapper.java @@ -23,6 +23,8 @@ import com.evolveum.midpoint.util.DebugDumpable; import com.evolveum.midpoint.util.DebugUtil; import com.evolveum.midpoint.util.PrettyPrinter; +import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableType; + import org.jetbrains.annotations.Nullable; import java.io.Serializable; @@ -35,6 +37,7 @@ public class PropertyWrapper extends PropertyOrReferenceWrapper, PrismPropertyDefinition> implements Serializable, DebugDumpable { private static final long serialVersionUID = -6347026284758253783L; + private LookupTableType predefinedValues; public PropertyWrapper(@Nullable ContainerValueWrapper container, PrismProperty property, boolean readonly, ValueStatus status) { super(container, property, readonly, status, null); @@ -160,6 +163,14 @@ public String debugDump(int indent) { protected String getDebugName() { return "PropertyWrapper"; } + + public void setPredefinedValues(LookupTableType predefinedValues) { + this.predefinedValues = predefinedValues; + } + + public LookupTableType getPredefinedValues() { + return predefinedValues; + } } \ No newline at end of file diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageSystemConfigurationNew.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageSystemConfigurationNew.java index 3abf0924dd6..b22200f0424 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageSystemConfigurationNew.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageSystemConfigurationNew.java @@ -32,6 +32,7 @@ import org.apache.wicket.model.Model; import org.apache.wicket.request.mapper.parameter.PageParameters; +import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.GlobalPolicyRuleTabPanel; @@ -132,41 +133,8 @@ public PageSystemConfigurationNew(final PrismObject uni @Override protected void initializeModel(final PrismObject objectToEdit, boolean isNewObject, boolean isReadonly) { - super.initializeModel(loadSystemConfigurationAsWrapperObject().getObject(), false, isReadonly); + super.initializeModel(WebModelServiceUtils.loadSystemConfigurationAsObjectWrapper(this).getObject(), false, isReadonly); } - - - private ObjectWrapper loadSystemConfigurationAsWrapperObject() { - Task task = createSimpleTask(TASK_GET_SYSTEM_CONFIG); - OperationResult result = new OperationResult(TASK_GET_SYSTEM_CONFIG); - - Collection> options = SelectorOptions.createCollection( - GetOperationOptions.createResolve(), SystemConfigurationType.F_DEFAULT_USER_TEMPLATE, - SystemConfigurationType.F_GLOBAL_PASSWORD_POLICY); - - ObjectWrapper wrapper = null; - try { - PrismObject systemConfig = WebModelServiceUtils.loadObject( - SystemConfigurationType.class, SystemObjectsType.SYSTEM_CONFIGURATION.value(), options, - this, task, result); - - ObjectWrapperFactory owf = new ObjectWrapperFactory(this); - - wrapper = owf.createObjectWrapper("adminPage.systemConfiguration", null, systemConfig, ContainerStatus.MODIFYING, task); - - result.recordSuccess(); - } catch (Exception ex) { - LoggingUtils.logUnexpectedException(LOGGER, "Couldn't load system configuration", ex); - result.recordFatalError("Couldn't load system configuration.", ex); - } - - if (!WebComponentUtil.isSuccessOrHandledError(result) || wrapper == null) { - showResult(result, false); - throw getRestartResponseException(PageError.class); - } - - return wrapper; - } private List getTabs(){ List tabs = new ArrayList<>();