diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/password/PasswordPropertyPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/password/PasswordPropertyPanel.java index b81091ef861..5665b5c0fdb 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/password/PasswordPropertyPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/password/PasswordPropertyPanel.java @@ -11,6 +11,7 @@ import com.evolveum.midpoint.gui.api.prism.wrapper.ItemVisibilityHandler; import com.evolveum.midpoint.gui.impl.factory.panel.ItemRealValueModel; import com.evolveum.midpoint.gui.impl.prism.panel.ItemHeaderPanel; +import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettings; import com.evolveum.midpoint.gui.impl.prism.panel.PrismPropertyPanel; import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismPropertyValueWrapper; import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismPropertyWrapper; @@ -28,13 +29,12 @@ public class PasswordPropertyPanel extends PrismPropertyPanel> model, ItemHeaderPanel.ItemPanelSettings settings){ + public PasswordPropertyPanel(String id, IModel> model, ItemPanelSettings settings){ super(id, model, settings); } @Override - protected Component createValuePanel(ListItem> item, GuiComponentFactory factory, - ItemVisibilityHandler visibilityHandler, ItemEditabilityHandler editabilityHandler) { + protected Component createValuePanel(ListItem> item) { PasswordPanel passwordPanel = new PasswordPanel(ID_PASSWORD_PANEL, new ItemRealValueModel<>(item.getModel()), getModelObject() != null && getModelObject().isReadOnly(), @@ -58,9 +58,4 @@ protected void changePasswordPerformed(){ } - @Override - protected void createButtons(ListItem> item) { - //nothing to do - } - } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/factory/AbstractGuiComponentFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/factory/AbstractGuiComponentFactory.java index 5a81371579d..ebd98cf85a7 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/factory/AbstractGuiComponentFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/factory/AbstractGuiComponentFactory.java @@ -13,6 +13,7 @@ import com.evolveum.midpoint.gui.api.registry.GuiComponentRegistry; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import org.apache.wicket.feedback.ComponentFeedbackMessageFilter; import org.apache.wicket.markup.html.panel.Panel; import com.evolveum.midpoint.gui.impl.factory.panel.PrismPropertyPanelContext; @@ -33,7 +34,7 @@ public GuiComponentRegistry getRegistry() { @Override public Panel createPanel(PrismPropertyPanelContext panelCtx) { Panel panel = getPanel(panelCtx); - + panelCtx.getFeedback().setFilter(new ComponentFeedbackMessageFilter(panel)); return panel; } @@ -44,7 +45,5 @@ public Integer getOrder() { protected abstract Panel getPanel(PrismPropertyPanelContext panelCtx); - protected List prepareAutoCompleteList(String input, LookupTableType lookupTable, LocalizationService localizationService) { - return WebComponentUtil.prepareAutoCompleteList(lookupTable, input, localizationService); - } + } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java index f5767eb3920..569da833603 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java @@ -16,6 +16,7 @@ import javax.xml.namespace.QName; import com.evolveum.midpoint.gui.impl.prism.panel.ItemHeaderPanel; +import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettings; import com.evolveum.midpoint.web.page.admin.PageAdminObjectDetails; import com.evolveum.midpoint.web.page.admin.certification.*; @@ -2678,7 +2679,6 @@ public void reloadShoppingCartIcon(AjaxRequestTarget target) { public AsyncWebProcessManager getAsyncWebProcessManager() { return MidPointApplication.get().getAsyncWebProcessManager(); } - @Override public Locale getLocale() { return getSession().getLocale(); @@ -2726,7 +2726,7 @@ private Class getWrapperPanel(QName typeName) { } - public Panel initItemPanel(String panelId, QName typeName, IModel wrapperModel, ItemHeaderPanel.ItemPanelSettings itemPanelSettings) throws SchemaException{ + public Panel initItemPanel(String panelId, QName typeName, IModel wrapperModel, ItemPanelSettings itemPanelSettings) throws SchemaException{ Class panelClass = getWrapperPanel(typeName); if (panelClass == null) { ErrorPanel errorPanel = new ErrorPanel(panelId, () -> "Cannot create panel for " + typeName); @@ -2736,7 +2736,7 @@ public Panel initItemPanel(String panelId, QName typeNa Constructor constructor; try { - constructor = panelClass.getConstructor(String.class, IModel.class, ItemHeaderPanel.ItemPanelSettings.class); + constructor = panelClass.getConstructor(String.class, IModel.class, ItemPanelSettings.class); Panel panel = (Panel) constructor.newInstance(panelId, wrapperModel, itemPanelSettings); return panel; } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { @@ -2744,8 +2744,8 @@ public Panel initItemPanel(String panelId, QName typeNa } } - public , C extends Containerable> Panel initContainerValuePanel(String id, IModel model, - ItemHeaderPanel.ItemPanelSettings settings) { + public Panel initContainerValuePanel(String id, IModel> model, + ItemPanelSettings settings) { //TODO find from registry first return new PrismContainerValuePanel<>(id, model, settings); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/prism/wrapper/ItemWrapper.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/prism/wrapper/ItemWrapper.java index 18dbde3915b..20ca6149633 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/prism/wrapper/ItemWrapper.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/prism/wrapper/ItemWrapper.java @@ -12,8 +12,10 @@ import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.gui.api.prism.ItemStatus; +import com.evolveum.midpoint.gui.api.util.ModelServiceLocator; import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismContainerValueWrapper; import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismValueWrapper; +import com.evolveum.midpoint.model.api.ModelService; import com.evolveum.midpoint.prism.Item; import com.evolveum.midpoint.prism.ItemDefinition; import com.evolveum.midpoint.prism.PrismValue; @@ -30,7 +32,7 @@ * @author katka * */ -public interface ItemWrapper>, VW extends PrismValueWrapper> extends ItemDefinition, Revivable, DebugDumpable, Serializable { +public interface ItemWrapper extends ItemDefinition, Revivable, DebugDumpable, Serializable { String debugDump(int indent); @@ -81,4 +83,8 @@ public interface ItemWrapper void add(PV newValueWrapper, ModelServiceLocator locator) throws SchemaException; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebPrismUtil.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebPrismUtil.java index 26071eff6dc..b485703159a 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebPrismUtil.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebPrismUtil.java @@ -88,6 +88,30 @@ public static VW createNewValueWrapper(IW itemWrapper, PV newValue, ModelServiceLocator modelServiceLocator) throws SchemaException { + LOGGER.debug("Adding value to {}", itemWrapper); + + + + +// if (!(itemWrapper instanceof PrismContainerWrapper)) { +// itemWrapper.getItem().add(newValue); +// } + + Task task = modelServiceLocator.createSimpleTask(OPERATION_CREATE_NEW_VALUE); + OperationResult result = new OperationResult(OPERATION_CREATE_NEW_VALUE); + + WrapperContext context = new WrapperContext(task, result); + context.setObjectStatus(itemWrapper.findObjectStatus()); + context.setShowEmpty(true); + context.setCreateIfEmpty(true); + + VW newValueWrapper = modelServiceLocator.createValueWrapper(itemWrapper, newValue, ValueStatus.ADDED, context); + result.recordSuccess(); + + return newValueWrapper; + } + public static IW findItemWrapper(ItemWrapper child, ItemPath absoluthPathToFind, Class wrapperClass) { PrismObjectWrapper taskWrapper = child.findObjectWrapper(); try { 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 25fc0178aca..08a5ceb3864 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 @@ -10,6 +10,9 @@ import com.evolveum.midpoint.gui.impl.prism.panel.ItemHeaderPanel; +import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettings; +import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettingsBuilder; + import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; @@ -65,7 +68,7 @@ protected void addBasicContainerValuePanel(String idPanel){ } protected Panel getBasicContainerValuePanel(String idPanel){ - ItemHeaderPanel.ItemPanelSettingsBuilder builder = new ItemHeaderPanel.ItemPanelSettingsBuilder() + ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder() .visibilityHandler(wrapper -> getBasicTabVisibity(wrapper)) .showOnTopLevel(true) .editabilityHandler(wrapper -> getBasicTabEditability(wrapper)); @@ -74,7 +77,7 @@ protected Panel getBasicContainerValuePanel(String idPanel){ builder.mandatoryHandler(getMandatoryHandler()); } - ItemHeaderPanel.ItemPanelSettings settings = builder.build(); + ItemPanelSettings settings = builder.build(); Panel containerValue = getPageBase().initContainerValuePanel(idPanel, getModel(), settings); return containerValue; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/AbstractInputGuiComponentFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/AbstractInputGuiComponentFactory.java new file mode 100644 index 00000000000..ef0b7b3f82b --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/AbstractInputGuiComponentFactory.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2020 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.gui.impl.factory.panel; + +import com.evolveum.midpoint.gui.api.factory.GuiComponentFactory; + +import com.evolveum.midpoint.gui.api.registry.GuiComponentRegistry; + +import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismPropertyWrapper; +import com.evolveum.midpoint.web.component.prism.InputPanel; + +import com.evolveum.midpoint.web.component.util.EnableBehaviour; + +import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; + +import org.apache.wicket.AttributeModifier; +import org.apache.wicket.feedback.ComponentFeedbackMessageFilter; +import org.apache.wicket.markup.html.form.FormComponent; +import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LambdaModel; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; + +/** + * abstract factory for all InputPanel panels + * @param + */ +public abstract class AbstractInputGuiComponentFactory implements GuiComponentFactory> { + + @Autowired private GuiComponentRegistry componentRegistry; + + public GuiComponentRegistry getRegistry() { + return componentRegistry; + } + + @Override + public Panel createPanel(PrismPropertyPanelContext panelCtx) { + InputPanel panel = getPanel(panelCtx); + + final List formComponents = panel.getFormComponents(); + for (FormComponent formComponent : formComponents) { + PrismPropertyWrapper propertyWrapper = panelCtx.unwrapWrapperModel(); + IModel label = LambdaModel.of(propertyWrapper::getDisplayName); + formComponent.setLabel(label); + formComponent.setRequired(panelCtx.isMandatory()); + + if (formComponent instanceof TextField) { + formComponent.add(new AttributeModifier("size", "42")); + } + formComponent.add(panelCtx.getAjaxEventBehavior()); + formComponent.add(panelCtx.getVisibleEnableBehavior()); +// formComponent.add(new EnableBehaviour(() -> getEditabilityHandler() == null || +// getEditabilityHandler().isEditable(getModelObject()))); + } + + panel.getValidatableComponent().add(panelCtx.getExpressionValidator()); + + panelCtx.getFeedback().setFilter(new ComponentFeedbackMessageFilter(panel.getValidatableComponent())); + + + return panel; + } + + @Override + public Integer getOrder() { + return Integer.MAX_VALUE; + } + + protected abstract InputPanel getPanel(PrismPropertyPanelContext panelCtx); +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/DatePanelFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/DatePanelFactory.java index f75912dfd83..5463bad9643 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/DatePanelFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/DatePanelFactory.java @@ -9,13 +9,13 @@ import javax.annotation.PostConstruct; import javax.xml.datatype.XMLGregorianCalendar; +import com.evolveum.midpoint.web.component.prism.InputPanel; + import org.apache.wicket.extensions.yui.calendar.DateTimeField; import org.apache.wicket.markup.html.form.Form; -import org.apache.wicket.markup.html.panel.Panel; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.evolveum.midpoint.gui.api.factory.AbstractGuiComponentFactory; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; import com.evolveum.midpoint.gui.api.registry.GuiComponentRegistry; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; @@ -30,7 +30,7 @@ * */ @Component -public class DatePanelFactory extends AbstractGuiComponentFactory { +public class DatePanelFactory extends AbstractInputGuiComponentFactory { private static final long serialVersionUID = 1L; @@ -46,7 +46,7 @@ public boolean match(IW wrapper) { } @Override - protected Panel getPanel(PrismPropertyPanelContext panelCtx) { + protected InputPanel getPanel(PrismPropertyPanelContext panelCtx) { DatePanel panel = new DatePanel(panelCtx.getComponentId(), panelCtx.getRealValueModel()); Form form = Form.findForm(panelCtx.getForm()); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/DropDownChoicePanelFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/DropDownChoicePanelFactory.java index 455169df528..6076ea382da 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/DropDownChoicePanelFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/DropDownChoicePanelFactory.java @@ -11,15 +11,12 @@ import javax.annotation.PostConstruct; import javax.xml.namespace.QName; -import org.apache.wicket.markup.html.panel.Panel; -import org.apache.wicket.model.IModel; +import com.evolveum.midpoint.web.component.prism.InputPanel; + import org.apache.wicket.model.Model; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.evolveum.midpoint.gui.api.factory.GuiComponentFactory; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; -import com.evolveum.midpoint.gui.api.registry.GuiComponentRegistry; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.util.DOMUtil; import com.evolveum.midpoint.web.component.input.DropDownChoicePanel; @@ -32,37 +29,32 @@ * */ @Component -public class DropDownChoicePanelFactory implements GuiComponentFactory> { - - private static final long serialVersionUID = 1L; - @Autowired GuiComponentRegistry registry; +public class DropDownChoicePanelFactory extends AbstractInputGuiComponentFactory { @PostConstruct public void register() { - registry.addToRegistry(this); + getRegistry().addToRegistry(this); } + @Override public boolean match(IW wrapper) { return AssignmentType.F_FOCUS_TYPE.equals(wrapper.getItemName()) || DOMUtil.XSD_QNAME.equals(wrapper.getTypeName()); } - @Override - public Panel createPanel(PrismPropertyPanelContext panelCtx) { - List typesList = null; + @Override + protected InputPanel getPanel(PrismPropertyPanelContext panelCtx) { + List typesList = WebComponentUtil.createObjectTypeList(); if (AssignmentType.F_FOCUS_TYPE.equals(panelCtx.getDefinitionName())){ typesList = WebComponentUtil.createFocusTypeList(); - } else { - typesList = WebComponentUtil.createObjectTypeList(); } - DropDownChoicePanel typePanel = new DropDownChoicePanel(panelCtx.getComponentId(), (IModel) panelCtx.getRealValueModel(), + DropDownChoicePanel typePanel = new DropDownChoicePanel(panelCtx.getComponentId(), panelCtx.getRealValueModel(), Model.ofList(typesList), new QNameObjectTypeChoiceRenderer(), true); typePanel.getBaseFormComponent().add(new EmptyOnChangeAjaxFormUpdatingBehavior()); typePanel.setOutputMarkupId(true); return typePanel; } - @Override public Integer getOrder() { return 10000; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/EnumPanelFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/EnumPanelFactory.java index 70f1296e4e9..1de1fdc2acd 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/EnumPanelFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/EnumPanelFactory.java @@ -8,13 +8,11 @@ import javax.annotation.PostConstruct; -import org.apache.wicket.markup.html.panel.Panel; -import org.springframework.beans.factory.annotation.Autowired; +import com.evolveum.midpoint.web.component.prism.InputPanel; + import org.springframework.stereotype.Component; -import com.evolveum.midpoint.gui.api.factory.AbstractGuiComponentFactory; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; -import com.evolveum.midpoint.gui.api.registry.GuiComponentRegistry; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismPropertyWrapper; @@ -23,15 +21,11 @@ * */ @Component -public class EnumPanelFactory> extends AbstractGuiComponentFactory { - - private static final long serialVersionUID = 1L; - - @Autowired GuiComponentRegistry registry; +public class EnumPanelFactory> extends AbstractInputGuiComponentFactory { @PostConstruct public void register() { - registry.addToRegistry(this); + getRegistry().addToRegistry(this); } private boolean isEnum(ItemWrapper property) { @@ -59,7 +53,7 @@ public boolean match(IW wrapper) { } @Override - protected Panel getPanel(PrismPropertyPanelContext panelCtx) { + protected InputPanel getPanel(PrismPropertyPanelContext panelCtx) { Class clazz = panelCtx.getTypeClass(); if (clazz != null) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ExecuteScriptModel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ExecuteScriptModel.java index 8aa8d818565..75cbfdfa3de 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ExecuteScriptModel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ExecuteScriptModel.java @@ -40,10 +40,8 @@ public String getObject() { return locator.getPrismContext().xmlSerializer().serializeRealValue(value); } catch (Exception e) { - // TODO handle!!!! LoggingUtils.logUnexpectedException(LOGGER, "Cannot serialize script", e); ThreadContext.getSession().error("Cannot serialize script: " + e.getMessage()); -// getSession().error("Cannot serialize filter"); } return null; } @@ -58,10 +56,8 @@ public void setObject(String object) { ExecuteScriptType script = locator.getPrismContext().parserFor(object).parseRealValue(ExecuteScriptType.class); baseModel.setObject(script); } catch (Exception e) { - // TODO handle!!!! LoggingUtils.logUnexpectedException(LOGGER, "Cannot parse script", e); ThreadContext.getSession().error("Cannot parse script: " + e.getMessage()); -// getSession().error("Cannot parse filter"); } } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ExecuteScriptWrapperFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ExecuteScriptWrapperFactory.java index 972eb45f217..7facf0738a9 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ExecuteScriptWrapperFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ExecuteScriptWrapperFactory.java @@ -7,9 +7,8 @@ package com.evolveum.midpoint.gui.impl.factory.panel; -import org.apache.wicket.markup.html.panel.Panel; +import com.evolveum.midpoint.web.component.prism.InputPanel; -import com.evolveum.midpoint.gui.api.factory.AbstractGuiComponentFactory; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; import com.evolveum.midpoint.util.QNameUtil; import com.evolveum.midpoint.web.component.input.TextAreaPanel; @@ -20,7 +19,7 @@ import javax.annotation.PostConstruct; @Component -public class ExecuteScriptWrapperFactory extends AbstractGuiComponentFactory { +public class ExecuteScriptWrapperFactory extends AbstractInputGuiComponentFactory { @PostConstruct public void register() { @@ -38,7 +37,7 @@ public Integer getOrder() { } @Override - protected Panel getPanel(PrismPropertyPanelContext panelCtx) { + protected InputPanel getPanel(PrismPropertyPanelContext panelCtx) { return new TextAreaPanel<>(panelCtx.getComponentId(), new ExecuteScriptModel(panelCtx.getRealValueModel(), panelCtx.getPageBase()), 20); } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ItemPanelContext.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ItemPanelContext.java index 2519a4c7ddd..04316915294 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ItemPanelContext.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ItemPanelContext.java @@ -8,8 +8,21 @@ import java.io.Serializable; +import com.evolveum.midpoint.gui.api.prism.wrapper.ItemEditabilityHandler; + +import com.evolveum.midpoint.gui.api.prism.wrapper.ItemMandatoryHandler; + +import com.evolveum.midpoint.gui.api.prism.wrapper.ItemVisibilityHandler; +import com.evolveum.midpoint.web.component.message.FeedbackAlerts; +import com.evolveum.midpoint.web.component.prism.ItemVisibility; + +import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; + +import com.evolveum.midpoint.web.util.ExpressionValidator; + import org.apache.commons.lang.ClassUtils; import org.apache.wicket.Component; +import org.apache.wicket.ajax.AjaxEventBehavior; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.model.IModel; @@ -29,6 +42,11 @@ public abstract class ItemPanelContext implements Ser private ItemRealValueModel realValueModel; private Form form; + private AjaxEventBehavior ajaxEventBehavior; + private ItemMandatoryHandler mandatoryHandler; + private VisibleEnableBehaviour visibleEnableBehaviour; + private ExpressionValidator expressionValidator; + private FeedbackAlerts feedback; public ItemPanelContext(IModel itemWrapper) { this.itemWrapper = itemWrapper; @@ -86,8 +104,50 @@ public void setParentComponent(Component parentComponent) { this.parentComponent = parentComponent; } + public void setAjaxEventBehavior(AjaxEventBehavior ajaxEventBehavior) { + this.ajaxEventBehavior = ajaxEventBehavior; + } -/** + public AjaxEventBehavior getAjaxEventBehavior() { + return ajaxEventBehavior; + } + + public void setMandatoryHandler(ItemMandatoryHandler mandatoryHandler) { + this.mandatoryHandler = mandatoryHandler; + } + + public void setVisibleEnableBehaviour(VisibleEnableBehaviour visibleEnableBehaviour) { + this.visibleEnableBehaviour = visibleEnableBehaviour; + } + + public VisibleEnableBehaviour getVisibleEnableBehavior() { + return visibleEnableBehaviour; + } + + public boolean isMandatory() { + if (mandatoryHandler != null) { + return mandatoryHandler.isMandatory(itemWrapper.getObject()); + } + return itemWrapper.getObject().isMandatory(); + } + + public void setExpressionValidator(ExpressionValidator expressionValidator) { + this.expressionValidator = expressionValidator; + } + + public ExpressionValidator getExpressionValidator() { + return expressionValidator; + } + + public void setFeedback(FeedbackAlerts feedback) { + this.feedback = feedback; + } + + public FeedbackAlerts getFeedback() { + return feedback; + } + + /** * @return the form */ public Form getForm() { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ObjectDeltaPanelFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ObjectDeltaPanelFactory.java index 3d645268f14..888017c2ff8 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ObjectDeltaPanelFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ObjectDeltaPanelFactory.java @@ -11,16 +11,16 @@ import com.evolveum.midpoint.web.component.input.TextAreaPanel; -import org.apache.wicket.markup.html.panel.Panel; +import com.evolveum.midpoint.web.component.prism.InputPanel; + import org.springframework.stereotype.Component; -import com.evolveum.midpoint.gui.api.factory.AbstractGuiComponentFactory; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; import com.evolveum.midpoint.util.QNameUtil; import com.evolveum.prism.xml.ns._public.types_3.ObjectDeltaType; @Component -public class ObjectDeltaPanelFactory extends AbstractGuiComponentFactory { +public class ObjectDeltaPanelFactory extends AbstractInputGuiComponentFactory { @PostConstruct public void register() { @@ -33,7 +33,7 @@ public Integer getOrder() { } @Override - protected Panel getPanel(PrismPropertyPanelContext panelCtx) { + protected InputPanel getPanel(PrismPropertyPanelContext panelCtx) { return new TextAreaPanel<>(panelCtx.getComponentId(), new ObjectDeltaModel(panelCtx.getRealValueModel(), panelCtx.getPageBase()), 20); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/PolyStringEditorPanelFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/PolyStringEditorPanelFactory.java index df6ae72e7d9..05c8d55fe6f 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/PolyStringEditorPanelFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/PolyStringEditorPanelFactory.java @@ -6,14 +6,12 @@ */ package com.evolveum.midpoint.gui.impl.factory.panel; -import com.evolveum.midpoint.gui.api.factory.AbstractGuiComponentFactory; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; -import com.evolveum.midpoint.gui.api.registry.GuiComponentRegistry; import com.evolveum.midpoint.prism.polystring.PolyString; import com.evolveum.midpoint.gui.impl.prism.panel.PolyStringEditorPanel; +import com.evolveum.midpoint.web.component.prism.InputPanel; import com.evolveum.prism.xml.ns._public.types_3.PolyStringType; -import org.apache.wicket.markup.html.panel.Panel; -import org.springframework.beans.factory.annotation.Autowired; + import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; @@ -22,24 +20,20 @@ * Created by honchar */ @Component -public class PolyStringEditorPanelFactory extends AbstractGuiComponentFactory { - - private static final long serialVersionUID = 1L; - - @Autowired - GuiComponentRegistry registry; +public class PolyStringEditorPanelFactory extends AbstractInputGuiComponentFactory { @PostConstruct public void register() { - registry.addToRegistry(this); + getRegistry().addToRegistry(this); } + @Override public boolean match(IW wrapper) { return PolyStringType.COMPLEX_TYPE.equals(wrapper.getTypeName()); } @Override - protected Panel getPanel(PrismPropertyPanelContext panelCtx) { + protected InputPanel getPanel(PrismPropertyPanelContext panelCtx) { return new PolyStringEditorPanel(panelCtx.getComponentId(), panelCtx.getRealValueModel(), panelCtx.getPredefinedValues(), panelCtx.hasValueEnumerationRef()); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ProfilingLoggerLevelPanelFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ProfilingLoggerLevelPanelFactory.java index 3bfbb3320f2..7b1067a181a 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ProfilingLoggerLevelPanelFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ProfilingLoggerLevelPanelFactory.java @@ -6,19 +6,15 @@ */ package com.evolveum.midpoint.gui.impl.factory.panel; -import java.io.Serializable; - import javax.annotation.PostConstruct; +import com.evolveum.midpoint.web.component.prism.InputPanel; + import org.apache.wicket.markup.html.form.EnumChoiceRenderer; -import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.Model; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.evolveum.midpoint.gui.api.factory.GuiComponentFactory; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; -import com.evolveum.midpoint.gui.api.registry.GuiComponentRegistry; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.gui.impl.page.admin.configuration.component.ProfilingLevel; import com.evolveum.midpoint.gui.impl.prism.wrapper.ProfilingClassLoggerContainerValueWrapperImpl; @@ -31,11 +27,7 @@ * */ @Component -public class ProfilingLoggerLevelPanelFactory implements GuiComponentFactory>, Serializable { - - private static final long serialVersionUID = 1L; - - @Autowired private transient GuiComponentRegistry registry; +public class ProfilingLoggerLevelPanelFactory extends AbstractInputGuiComponentFactory { @Override public Integer getOrder() { @@ -44,7 +36,7 @@ public Integer getOrder() { @PostConstruct public void register() { - registry.addToRegistry(this); + getRegistry().addToRegistry(this); } @Override @@ -52,8 +44,9 @@ public boolean match(IW wrapper) { return wrapper.getParent() instanceof ProfilingClassLoggerContainerValueWrapperImpl && wrapper.getItemName().equals(ClassLoggerConfigurationType.F_LEVEL); } + //FIXME model @Override - public Panel createPanel(PrismPropertyPanelContext panelCtx) { + protected InputPanel getPanel(PrismPropertyPanelContext panelCtx) { DropDownChoicePanel dropDownProfilingLevel = new DropDownChoicePanel<>(panelCtx.getComponentId(), new Model() { private static final long serialVersionUID = 1L; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/QueryTextAreaPanelFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/QueryTextAreaPanelFactory.java index 0af7baffefd..ce9071cac8d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/QueryTextAreaPanelFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/QueryTextAreaPanelFactory.java @@ -11,26 +11,20 @@ import com.evolveum.midpoint.web.component.input.QueryTextAreaPanel; -import org.apache.wicket.markup.html.panel.Panel; -import org.springframework.beans.factory.annotation.Autowired; +import com.evolveum.midpoint.web.component.prism.InputPanel; + import org.springframework.stereotype.Component; -import com.evolveum.midpoint.gui.api.factory.AbstractGuiComponentFactory; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; -import com.evolveum.midpoint.gui.api.registry.GuiComponentRegistry; import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; import com.evolveum.prism.xml.ns._public.query_3.QueryType; @Component -public class QueryTextAreaPanelFactory extends AbstractGuiComponentFactory { - - private static final long serialVersionUID = 1L; - - @Autowired private GuiComponentRegistry registry; +public class QueryTextAreaPanelFactory extends AbstractInputGuiComponentFactory { @PostConstruct public void register() { - registry.addToRegistry(this); + getRegistry().addToRegistry(this); } @Override @@ -38,8 +32,10 @@ public boolean match(IW wrapper) { return QueryType.COMPLEX_TYPE.equals(wrapper.getTypeName()); // || CleanupPoliciesType.COMPLEX_TYPE.equals(wrapper.getTypeName()); } + //FIXME shoud be textAreapanel with custom model + //TODO cleanup @Override - protected Panel getPanel(PrismPropertyPanelContext panelCtx) { + protected InputPanel getPanel(PrismPropertyPanelContext panelCtx) { int size = 10; if (FocusType.F_DESCRIPTION.equals(panelCtx.getDefinitionName())) { size = 2; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/RelationPanelFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/RelationPanelFactory.java index 691db048fd5..0fbcb95f9e8 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/RelationPanelFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/RelationPanelFactory.java @@ -9,10 +9,10 @@ import javax.annotation.PostConstruct; import javax.xml.namespace.QName; -import org.apache.wicket.markup.html.panel.Panel; +import com.evolveum.midpoint.web.component.prism.InputPanel; + import org.springframework.stereotype.Component; -import com.evolveum.midpoint.gui.api.factory.AbstractGuiComponentFactory; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; import com.evolveum.midpoint.gui.impl.model.RelationModel; import com.evolveum.midpoint.gui.impl.validator.RelationValidator; @@ -24,7 +24,7 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType; @Component -public class RelationPanelFactory extends AbstractGuiComponentFactory { +public class RelationPanelFactory extends AbstractInputGuiComponentFactory { @PostConstruct public void register() { @@ -32,7 +32,7 @@ public void register() { } @Override - protected Panel getPanel(PrismPropertyPanelContext panelCtx) { + protected InputPanel getPanel(PrismPropertyPanelContext panelCtx) { TextPanel relationPanel = new TextPanel<>(panelCtx.getComponentId(), new RelationModel(panelCtx.getRealValueModel())); relationPanel.getBaseFormComponent().add(new RelationValidator()); return relationPanel; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ResourceAttributeRefPanelFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ResourceAttributeRefPanelFactory.java index e4be3b76945..8f74b861269 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ResourceAttributeRefPanelFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ResourceAttributeRefPanelFactory.java @@ -11,7 +11,6 @@ import com.evolveum.midpoint.common.refinery.RefinedObjectClassDefinition; import com.evolveum.midpoint.common.refinery.RefinedResourceSchema; import com.evolveum.midpoint.gui.api.component.autocomplete.AutoCompleteQNamePanel; -import com.evolveum.midpoint.gui.api.factory.AbstractGuiComponentFactory; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; import com.evolveum.midpoint.gui.impl.prism.wrapper.ConstructionValueWrapper; import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismContainerValueWrapper; @@ -22,11 +21,10 @@ import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnChangeAjaxFormUpdatingBehavior; +import com.evolveum.midpoint.web.component.prism.InputPanel; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import com.evolveum.prism.xml.ns._public.types_3.ItemPathType; -import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; import org.springframework.stereotype.Component; @@ -36,8 +34,9 @@ import java.util.stream.Collectors; +//FIXME serializable? @Component -public class ResourceAttributeRefPanelFactory extends AbstractGuiComponentFactory implements Serializable { +public class ResourceAttributeRefPanelFactory extends AbstractInputGuiComponentFactory implements Serializable { private static final transient Trace LOGGER = TraceManager.getTrace(ResourceAttributeRefPanelFactory.class); @@ -47,7 +46,7 @@ public void register() { } @Override - protected Panel getPanel(PrismPropertyPanelContext panelCtx) { + protected InputPanel getPanel(PrismPropertyPanelContext panelCtx) { AutoCompleteQNamePanel autoCompleteTextPanel = new AutoCompleteQNamePanel(panelCtx.getComponentId(), new AttributeRefModel(panelCtx.getRealValueModel())) { @@ -58,7 +57,7 @@ public Collection loadChoices() { }; - autoCompleteTextPanel.getBaseFormComponent().add(new EmptyOnChangeAjaxFormUpdatingBehavior()); +// autoCompleteTextPanel.getBaseFormComponent().add(new EmptyOnChangeAjaxFormUpdatingBehavior()); return autoCompleteTextPanel; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/TaskIntentFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/TaskIntentFactory.java index 081196dca11..7e9b95e7335 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/TaskIntentFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/TaskIntentFactory.java @@ -12,11 +12,11 @@ import java.util.Iterator; import javax.annotation.PostConstruct; +import com.evolveum.midpoint.web.component.prism.InputPanel; + import org.apache.wicket.extensions.ajax.markup.html.autocomplete.StringAutoCompleteRenderer; -import org.apache.wicket.markup.html.panel.Panel; import com.evolveum.midpoint.gui.api.component.autocomplete.AutoCompleteTextPanel; -import com.evolveum.midpoint.gui.api.factory.AbstractGuiComponentFactory; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; @@ -34,8 +34,9 @@ import org.springframework.stereotype.Component; +//FIXME serializable? @Component -public class TaskIntentFactory extends AbstractGuiComponentFactory implements Serializable { +public class TaskIntentFactory extends AbstractInputGuiComponentFactory implements Serializable { @PostConstruct public void register() { @@ -43,7 +44,7 @@ public void register() { } @Override - protected Panel getPanel(PrismPropertyPanelContext panelCtx) { + protected InputPanel getPanel(PrismPropertyPanelContext panelCtx) { return new AutoCompleteTextPanel(panelCtx.getComponentId(), panelCtx.getRealValueModel(), String.class, StringAutoCompleteRenderer.INSTANCE) { @Override diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/TaskObjectClassFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/TaskObjectClassFactory.java index aaf621ec848..6e643004720 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/TaskObjectClassFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/TaskObjectClassFactory.java @@ -15,11 +15,11 @@ import com.evolveum.midpoint.gui.api.util.WebPrismUtil; -import org.apache.wicket.markup.html.panel.Panel; +import com.evolveum.midpoint.web.component.prism.InputPanel; + import org.springframework.stereotype.Component; import com.evolveum.midpoint.gui.api.component.autocomplete.AutoCompleteQNamePanel; -import com.evolveum.midpoint.gui.api.factory.AbstractGuiComponentFactory; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; @@ -32,8 +32,9 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType; +//FIXME serializable @Component -public class TaskObjectClassFactory extends AbstractGuiComponentFactory implements Serializable { +public class TaskObjectClassFactory extends AbstractInputGuiComponentFactory implements Serializable { @PostConstruct @@ -42,7 +43,7 @@ public void register() { } @Override - protected Panel getPanel(PrismPropertyPanelContext panelCtx) { + protected InputPanel getPanel(PrismPropertyPanelContext panelCtx) { return new AutoCompleteQNamePanel(panelCtx.getComponentId(), panelCtx.getRealValueModel()) { @Override diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/TextAreaPanelFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/TextAreaPanelFactory.java index aa32b0d111d..cc9d9a21022 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/TextAreaPanelFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/TextAreaPanelFactory.java @@ -11,26 +11,21 @@ import javax.annotation.PostConstruct; -import org.apache.wicket.markup.html.panel.Panel; -import org.springframework.beans.factory.annotation.Autowired; +import com.evolveum.midpoint.web.component.prism.InputPanel; + import org.springframework.stereotype.Component; -import com.evolveum.midpoint.gui.api.factory.AbstractGuiComponentFactory; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; -import com.evolveum.midpoint.gui.api.registry.GuiComponentRegistry; import com.evolveum.midpoint.web.component.input.TextAreaPanel; import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; @Component -public class TextAreaPanelFactory extends AbstractGuiComponentFactory { - - private static final long serialVersionUID = 1L; +public class TextAreaPanelFactory extends AbstractInputGuiComponentFactory { - @Autowired private GuiComponentRegistry registry; @PostConstruct public void register() { - registry.addToRegistry(this); + getRegistry().addToRegistry(this); } @Override @@ -39,7 +34,7 @@ public boolean match(IW wrapper) { } @Override - protected Panel getPanel(PrismPropertyPanelContext panelCtx) { + protected InputPanel getPanel(PrismPropertyPanelContext panelCtx) { int size = 10; if (FocusType.F_DESCRIPTION.equals(panelCtx.getDefinitionName())) { size = 2; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/TextPanelFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/TextPanelFactory.java index 48a70ea4640..01310f7708f 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/TextPanelFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/TextPanelFactory.java @@ -9,33 +9,33 @@ import java.io.Serializable; import java.util.Iterator; +import java.util.List; import javax.annotation.PostConstruct; import javax.xml.namespace.QName; -import org.apache.wicket.markup.html.panel.Panel; -import org.springframework.beans.factory.annotation.Autowired; +import com.evolveum.midpoint.common.LocalizationService; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; + +import com.evolveum.midpoint.web.component.prism.InputPanel; + import org.springframework.stereotype.Component; import com.evolveum.midpoint.gui.api.component.autocomplete.AutoCompleteTextPanel; -import com.evolveum.midpoint.gui.api.factory.AbstractGuiComponentFactory; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; -import com.evolveum.midpoint.gui.api.registry.GuiComponentRegistry; import com.evolveum.midpoint.util.DOMUtil; import com.evolveum.midpoint.web.component.input.TextPanel; import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableType; +//FIXME serializable @Component -public class TextPanelFactory extends AbstractGuiComponentFactory implements Serializable { - - private static final long serialVersionUID = 1L; - - @Autowired transient GuiComponentRegistry registry; +public class TextPanelFactory extends AbstractInputGuiComponentFactory implements Serializable { @PostConstruct public void register() { - registry.addToRegistry(this); + getRegistry().addToRegistry(this); } + @Override public boolean match(IW wrapper) { QName type = wrapper.getTypeName(); @@ -44,7 +44,7 @@ public boolean match(IW wrapper) { } @Override - protected Panel getPanel(PrismPropertyPanelContext panelCtx) { + protected InputPanel getPanel(PrismPropertyPanelContext panelCtx) { LookupTableType lookupTable = panelCtx.getPredefinedValues(); if (lookupTable == null) { return new TextPanel<>(panelCtx.getComponentId(), @@ -63,4 +63,7 @@ public Iterator getIterator(String input) { }; } + protected List prepareAutoCompleteList(String input, LookupTableType lookupTable, LocalizationService localizationService) { + return WebComponentUtil.prepareAutoCompleteList(lookupTable, input, localizationService); + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ThreeStateComboPanelFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ThreeStateComboPanelFactory.java index e4e9944a81b..cc187a63362 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ThreeStateComboPanelFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/ThreeStateComboPanelFactory.java @@ -8,14 +8,11 @@ import javax.annotation.PostConstruct; -import org.apache.wicket.markup.html.panel.Panel; -import org.apache.wicket.model.IModel; -import org.springframework.beans.factory.annotation.Autowired; +import com.evolveum.midpoint.web.component.prism.InputPanel; + import org.springframework.stereotype.Component; -import com.evolveum.midpoint.gui.api.factory.AbstractGuiComponentFactory; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; -import com.evolveum.midpoint.gui.api.registry.GuiComponentRegistry; import com.evolveum.midpoint.util.DOMUtil; import com.evolveum.midpoint.web.component.input.TriStateComboPanel; @@ -24,24 +21,21 @@ * */ @Component -public class ThreeStateComboPanelFactory extends AbstractGuiComponentFactory { - - private static final long serialVersionUID = 1L; - - @Autowired private GuiComponentRegistry registry; +public class ThreeStateComboPanelFactory extends AbstractInputGuiComponentFactory { @PostConstruct public void register() { - registry.addToRegistry(this); + getRegistry().addToRegistry(this); } + @Override public boolean match(IW wrapper) { return DOMUtil.XSD_BOOLEAN.equals(wrapper.getTypeName()); } @Override - protected Panel getPanel(PrismPropertyPanelContext panelCtx) { - return new TriStateComboPanel(panelCtx.getComponentId(), (IModel) panelCtx.getRealValueModel()); + protected InputPanel getPanel(PrismPropertyPanelContext panelCtx) { + return new TriStateComboPanel(panelCtx.getComponentId(), panelCtx.getRealValueModel()); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/UploadDownloadPanelFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/UploadDownloadPanelFactory.java index a48e8364bcc..202e78c2358 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/UploadDownloadPanelFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/UploadDownloadPanelFactory.java @@ -12,15 +12,13 @@ import javax.annotation.PostConstruct; +import com.evolveum.midpoint.web.component.prism.InputPanel; + import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.markup.html.panel.Panel; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.evolveum.midpoint.gui.api.factory.AbstractGuiComponentFactory; import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; -import com.evolveum.midpoint.gui.api.registry.GuiComponentRegistry; import com.evolveum.midpoint.util.DOMUtil; import com.evolveum.midpoint.web.component.input.UploadDownloadPanel; @@ -28,16 +26,13 @@ * @author katkav * */ +//FIXME serializable @Component -public class UploadDownloadPanelFactory extends AbstractGuiComponentFactory implements Serializable { - - private static final long serialVersionUID = 1L; - - @Autowired private transient GuiComponentRegistry registry; +public class UploadDownloadPanelFactory extends AbstractInputGuiComponentFactory implements Serializable { @PostConstruct public void register() { - registry.addToRegistry(this); + getRegistry().addToRegistry(this); } @Override @@ -46,7 +41,7 @@ public boolean match(IW wrapper) { } @Override - protected Panel getPanel(PrismPropertyPanelContext panelCtx) { + protected InputPanel getPanel(PrismPropertyPanelContext panelCtx) { return new UploadDownloadPanel(panelCtx.getComponentId(), false) { //getModel().getObject().isReadonly() private static final long serialVersionUID = 1L; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/WorkItemDetailsPanelFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/WorkItemDetailsPanelFactory.java index ef1e5593f62..a6f033b64d9 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/WorkItemDetailsPanelFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/WorkItemDetailsPanelFactory.java @@ -24,14 +24,9 @@ @Component public class WorkItemDetailsPanelFactory extends AbstractGuiComponentFactory { - private static final long serialVersionUID = 1L; - - @Autowired - GuiComponentRegistry registry; - @PostConstruct public void register() { - registry.addToRegistry(this); + getRegistry().addToRegistry(this); } @Override diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ContainerOfSystemConfigurationPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ContainerOfSystemConfigurationPanel.java index f264583b381..48dc19ba137 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ContainerOfSystemConfigurationPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ContainerOfSystemConfigurationPanel.java @@ -10,6 +10,7 @@ import javax.xml.namespace.QName; import com.evolveum.midpoint.gui.impl.prism.panel.ItemHeaderPanel; +import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettingsBuilder; import com.evolveum.midpoint.prism.path.ItemName; import org.apache.wicket.markup.html.panel.Panel; @@ -55,7 +56,7 @@ protected void onInitialize() { protected void initLayout() { try { - ItemHeaderPanel.ItemPanelSettingsBuilder builder = new ItemHeaderPanel.ItemPanelSettingsBuilder() + ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder() .visibilityHandler(wrapper -> getVisibity(wrapper.getPath())) .showOnTopLevel(true); Panel panel = getPageBase().initItemPanel(ID_CONTAINER, typeName, getModel(), builder.build()); 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 2c7e410ec38..b01b1824ef8 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 @@ -15,6 +15,7 @@ import javax.xml.namespace.QName; import com.evolveum.midpoint.gui.impl.prism.panel.ItemHeaderPanel; +import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettingsBuilder; import com.evolveum.midpoint.model.api.AssignmentObjectRelation; import org.apache.commons.lang.StringUtils; @@ -110,7 +111,7 @@ protected void onInitialize() { protected void initLayout() { try { // getModelObject().setShowOnTopLevel(true); - ItemHeaderPanel.ItemPanelSettingsBuilder builder = new ItemHeaderPanel.ItemPanelSettingsBuilder(); + ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder(); builder.visibilityHandler(itemWrapper -> getLoggingVisibility(itemWrapper.getPath())).showOnTopLevel(true); Panel loggingPanel = getPageBase().initItemPanel(ID_LOGGING, LoggingConfigurationType.COMPLEX_TYPE, getModel(), builder.build()); add(loggingPanel); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ProfilingConfigurationTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ProfilingConfigurationTabPanel.java index ccdec545ac9..92f35d49087 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ProfilingConfigurationTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ProfilingConfigurationTabPanel.java @@ -11,6 +11,8 @@ import com.evolveum.midpoint.gui.impl.prism.panel.ItemHeaderPanel; +import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettingsBuilder; + import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; @@ -84,7 +86,7 @@ public boolean isVisible() { add(profilingEnabledNote); try { - ItemHeaderPanel.ItemPanelSettingsBuilder builder = new ItemHeaderPanel.ItemPanelSettingsBuilder().showOnTopLevel(true); + ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder().showOnTopLevel(true); Panel panel = getPageBase().initItemPanel(ID_PROFILING, ProfilingConfigurationType.COMPLEX_TYPE, getProfilingModel(), builder.build()); add(panel); } catch (SchemaException e) { @@ -94,7 +96,7 @@ public boolean isVisible() { PrismContainerWrapperModel profilingLogger = PrismContainerWrapperModel.fromContainerWrapper(getLoggingModel(), ItemPath.create(ProfilingClassLoggerWrapperFactoryImpl.PROFILING_LOGGER_PATH)); try { - ItemHeaderPanel.ItemPanelSettingsBuilder builder = new ItemHeaderPanel.ItemPanelSettingsBuilder().showOnTopLevel(true); + ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder().showOnTopLevel(true); Panel logger = getPageBase().initItemPanel(ID_PROFILING_LOGGER, ProfilingClassLoggerWrapperFactoryImpl.PROFILING_LOGGER_PATH, profilingLogger, builder.build()); add(logger); } catch (SchemaException e) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigPanel.java index e7a91db856e..071e1a5c859 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/SystemConfigPanel.java @@ -8,6 +8,7 @@ package com.evolveum.midpoint.gui.impl.page.admin.configuration.component; import com.evolveum.midpoint.gui.impl.prism.panel.ItemHeaderPanel; +import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettingsBuilder; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; @@ -50,7 +51,7 @@ protected void onInitialize() { protected void initLayout() { try { - ItemHeaderPanel.ItemPanelSettingsBuilder builder = new ItemHeaderPanel.ItemPanelSettingsBuilder().visibilityHandler(this::getBasicTabVisibity); + ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder().visibilityHandler(this::getBasicTabVisibity); Panel panel = getPageBase().initItemPanel(ID_SYSTEM_CONFIG, SystemConfigurationType.COMPLEX_TYPE, getModel(), builder.build()); add(panel); } catch (SchemaException e) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ExpressionPropertyPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ExpressionPropertyPanel.java index 477c8a1bac1..5f6c5d2e8c9 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ExpressionPropertyPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ExpressionPropertyPanel.java @@ -49,7 +49,7 @@ public class ExpressionPropertyPanel extends PrismPropertyPanel private boolean isExpanded; - public ExpressionPropertyPanel(String id, IModel> model, ItemHeaderPanel.ItemPanelSettings settings) { + public ExpressionPropertyPanel(String id, IModel> model, ItemPanelSettings settings) { super(id, model, settings); isExpanded = model.getObject() != null && CollectionUtils.isNotEmpty(model.getObject().getValues()); //todo how to set displayOrder ? to display expression property the last, in the same way as containers @@ -86,9 +86,8 @@ protected void removeExpressionValuePerformed(AjaxRequestTarget target){ } @Override - protected Component createValuePanel(ListItem> item, GuiComponentFactory factory, ItemVisibilityHandler visibilityHandler, - ItemEditabilityHandler editabilityHandler) { - Component expressionPanel = super.createValuePanel(item, factory, visibilityHandler, editabilityHandler); + protected Component createValuePanel(ListItem> item) { + Component expressionPanel = super.createValuePanel(item); expressionPanel.add(new VisibleBehaviour(() -> isExpanded)); return expressionPanel; } @@ -137,9 +136,4 @@ private void expressionValueAddPerformed(AjaxRequestTarget target, ExpressionVal } - @Override - protected void createButtons(ListItem> item) { - //nothing to do.. buttons are in the prism container panel header/ prism container value header - } - } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ItemHeaderPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ItemHeaderPanel.java index 77c52fdf68d..5fbdea17429 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ItemHeaderPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ItemHeaderPanel.java @@ -233,124 +233,4 @@ public IModel getDeprecatedCss() { ///OLD protected abstract void initButtons(); - public static class ItemPanelSettings implements Serializable { - - private ItemVisibilityHandler visibilityHandler; - private ItemEditabilityHandler editabilityHandler = wrapper -> true; - private boolean showOnTopLevel; - private boolean headerVisible = true; - private ItemMandatoryHandler mandatoryHandler; - - - public ItemVisibilityHandler getVisibilityHandler() { - return visibilityHandler; - } - - void setVisibilityHandler(ItemVisibilityHandler visibilityHandler) { - this.visibilityHandler = visibilityHandler; - } - - public ItemEditabilityHandler getEditabilityHandler() { - return editabilityHandler; - } - - public void setEditabilityHandler(ItemEditabilityHandler editabilityHandler) { - this.editabilityHandler = editabilityHandler; - } - - public boolean isShowOnTopLevel() { - return showOnTopLevel; - } - - void setShowOnTopLevel(boolean showOnTopLevel) { - this.showOnTopLevel = showOnTopLevel; - } - - public boolean isHeaderVisible() { - return headerVisible; - } - - void setHeaderVisible(boolean headerVisible) { - this.headerVisible = headerVisible; - } - - public ItemMandatoryHandler getMandatoryHandler() { - return mandatoryHandler; - } - - public void setMandatoryHandler(ItemMandatoryHandler mandatoryHandler) { - this.mandatoryHandler = mandatoryHandler; - } - } - - public static class ItemPanelSettingsBuilder { - - private ItemPanelSettings settings; - - public ItemPanelSettingsBuilder() { - settings = new ItemPanelSettings(); - } - - public ItemPanelSettingsBuilder visibilityHandler(ItemVisibilityHandler handler) { - settings.setVisibilityHandler(handler); - return this; - } - - public ItemPanelSettingsBuilder editabilityHandler(ItemEditabilityHandler handler) { - settings.setEditabilityHandler(handler); - return this; - } - - public ItemPanelSettingsBuilder mandatoryHandler(ItemMandatoryHandler handler) { - settings.setMandatoryHandler(handler); - return this; - } - - public ItemPanelSettingsBuilder showOnTopLevel(boolean showOnTopLevel) { - settings.setShowOnTopLevel(showOnTopLevel); - return this; - } - - public ItemPanelSettingsBuilder headerVisibility(boolean headerVisibility) { - settings.setHeaderVisible(headerVisibility); - return this; - } - - public ItemPanelSettings build() { - return settings; - } - } - - /** - * @author katka - * - */ - public static class ItemWrapperComparator implements Comparator { - - private Collator collator = null; - private boolean sorted; - - public ItemWrapperComparator(Collator collator, boolean sorted) { - this.collator = collator; - this.sorted = sorted; - } - - @Override - public int compare(IW id1, IW id2) { - if (sorted) { - return compareByDisplayNames(id1, id2, collator); - } - int displayOrder1 = (id1 == null || id1.getDisplayOrder() == null) ? Integer.MAX_VALUE : id1.getDisplayOrder(); - int displayOrder2 = (id2 == null || id2.getDisplayOrder() == null) ? Integer.MAX_VALUE : id2.getDisplayOrder(); - if (displayOrder1 == displayOrder2) { - return compareByDisplayNames(id1, id1, collator); - } else { - return Integer.compare(displayOrder1, displayOrder2); - } - } - - private int compareByDisplayNames(IW pw1, IW pw2, Collator collator) { - return collator.compare(pw1.getDisplayName(), pw2.getDisplayName()); - } - } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ItemPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ItemPanel.java index 3c94e5e9a75..c8a9142669c 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ItemPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ItemPanel.java @@ -13,14 +13,19 @@ import com.evolveum.midpoint.gui.api.prism.wrapper.ItemEditabilityHandler; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemMandatoryHandler; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemVisibilityHandler; +import com.evolveum.midpoint.gui.impl.factory.panel.ItemPanelContext; import com.evolveum.midpoint.gui.impl.prism.wrapper.ItemWrapperVisibilitySpecification; import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismValueWrapper; import com.evolveum.midpoint.prism.Item; import com.evolveum.midpoint.prism.ItemDefinition; import com.evolveum.midpoint.prism.PrismValue; +import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.web.page.admin.server.RefreshableTabPanel; +import com.evolveum.midpoint.web.util.ExpressionValidator; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; + import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; @@ -30,6 +35,7 @@ import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LambdaModel; import org.apache.wicket.model.PropertyModel; import com.evolveum.midpoint.gui.api.component.BasePanel; @@ -64,10 +70,10 @@ public abstract class ItemPanel model, ItemHeaderPanel.ItemPanelSettings itemPanelSettings) { + public ItemPanel(String id, IModel model, ItemPanelSettings itemPanelSettings) { super(id, model); this.itemPanelSettings = itemPanelSettings; } @@ -112,12 +118,10 @@ protected ListView createValuesPanel() { @Override protected void populateItem(ListItem item) { - GuiComponentFactory componentFactory = getPageBase().getRegistry() - .findValuePanelFactory(ItemPanel.this.getModelObject()); - Component panel = createValuePanel(item, componentFactory, getVisibilityHandler(), getEditabilityHandler()); - createButtons(item); + Component panel = createValuePanel(item); +// createButtons(item); } }; @@ -125,6 +129,11 @@ protected void populateItem(ListItem item) { return values; } + + protected String getButtonsCssClass() { + return"col-xs-2"; + } + @Override public boolean isEnabled() { return !getModelObject().isReadOnly(); @@ -139,165 +148,164 @@ public boolean isVisible() { // VALUE REGION - protected abstract Component createValuePanel(ListItem item, GuiComponentFactory componentFactory, - ItemVisibilityHandler visibilityHandler, ItemEditabilityHandler editabilityHandler); - - protected void createButtons(ListItem item) { - WebMarkupContainer buttonContainer = new WebMarkupContainer(ID_BUTTON_CONTAINER); - buttonContainer.add(new AttributeModifier("class", getButtonsCssClass())); - - item.add(buttonContainer); - // buttons - AjaxLink addButton = new AjaxLink(ID_ADD_BUTTON) { - private static final long serialVersionUID = 1L; - - @Override - public void onClick(AjaxRequestTarget target) { - addValue(target); - } - }; - addButton.add(new VisibleBehaviour(() -> isAddButtonVisible())); - buttonContainer.add(addButton); - - AjaxLink removeButton = new AjaxLink(ID_REMOVE_BUTTON) { - private static final long serialVersionUID = 1L; - - @Override - public void onClick(AjaxRequestTarget target) { - try { - removeValue(item.getModelObject(), target); - } catch (SchemaException e) { - LOGGER.error("Cannot remove value: {}", item.getModelObject()); - getSession().error("Cannot remove value "+ item.getModelObject()); - target.add(getPageBase().getFeedbackPanel()); - target.add(ItemPanel.this); - } - } - }; - removeButton.add(new VisibleBehaviour(() -> isRemoveButtonVisible())); - buttonContainer.add(removeButton); - - - item.add(AttributeModifier.append("class", createStyleClassModel(item.getModel()))); - - item.add(new VisibleBehaviour(() -> isVisibleValue(item.getModel()))); - } - - protected String getButtonsCssClass() { - return"col-xs-2"; - } - - protected IModel createStyleClassModel(final IModel value) { - return new IModel() { - private static final long serialVersionUID = 1L; - - @Override - public String getObject() { - if (getIndexOfValue(value.getObject()) > 0) { - return getItemCssClass(); - } - - return null; - } - }; - } - - private int getIndexOfValue(VW value) { - IW property = (IW) value.getParent(); - List values = property.getValues(); - for (int i = 0; i < values.size(); i++) { - if (values.get(i).equals(value)) { - return i; - } - } - - return -1; - } - - protected String getItemCssClass() { - return " col-sm-offset-0 col-md-offset-4 col-lg-offset-2 prism-value "; - } - - protected void addValue(AjaxRequestTarget target) { - IW propertyWrapper = getModel().getObject(); - PrismPropertyValue newValue = getPrismContext().itemFactory().createPropertyValue(); - - WebPrismUtil.createNewValueWrapper(propertyWrapper, createNewValue(propertyWrapper), getPageBase(), target); - - target.add(ItemPanel.this); - } - + protected abstract Component createValuePanel(ListItem item); + +// protected void createButtons(ListItem item) { +// WebMarkupContainer buttonContainer = new WebMarkupContainer(ID_BUTTON_CONTAINER); +// buttonContainer.add(new AttributeModifier("class", getButtonsCssClass())); +// +// item.add(buttonContainer); +// // buttons +// AjaxLink addButton = new AjaxLink(ID_ADD_BUTTON) { +// private static final long serialVersionUID = 1L; +// +// @Override +// public void onClick(AjaxRequestTarget target) { +// addValue(target); +// } +// }; +// addButton.add(new VisibleBehaviour(() -> isAddButtonVisible())); +// buttonContainer.add(addButton); +// +// AjaxLink removeButton = new AjaxLink(ID_REMOVE_BUTTON) { +// private static final long serialVersionUID = 1L; +// +// @Override +// public void onClick(AjaxRequestTarget target) { +// try { +// removeValue(item.getModelObject(), target); +// } catch (SchemaException e) { +// LOGGER.error("Cannot remove value: {}", item.getModelObject()); +// getSession().error("Cannot remove value "+ item.getModelObject()); +// target.add(getPageBase().getFeedbackPanel()); +// target.add(ItemPanel.this); +// } +// } +// }; +// removeButton.add(new VisibleBehaviour(() -> isRemoveButtonVisible())); +// buttonContainer.add(removeButton); +// +// +// item.add(AttributeModifier.append("class", createStyleClassModel(item.getModel()))); +// +// item.add(new VisibleBehaviour(() -> isVisibleValue(item.getModel()))); +// } + +// protected String getButtonsCssClass() { +// return"col-xs-2"; +// } +// +// protected IModel createStyleClassModel(final IModel value) { +// return new IModel() { +// private static final long serialVersionUID = 1L; +// +// @Override +// public String getObject() { +// if (getIndexOfValue(value.getObject()) > 0) { +// return getItemCssClass(); +// } +// +// return null; +// } +// }; +// } +// +// private int getIndexOfValue(VW value) { +// IW property = (IW) value.getParent(); +// List values = property.getValues(); +// for (int i = 0; i < values.size(); i++) { +// if (values.get(i).equals(value)) { +// return i; +// } +// } +// +// return -1; +// } +// +// protected String getItemCssClass() { +// return " col-sm-offset-0 col-md-offset-4 col-lg-offset-2 prism-value "; +// } +// +// protected void addValue(AjaxRequestTarget target) { +// IW propertyWrapper = getModel().getObject(); +// PrismPropertyValue newValue = getPrismContext().itemFactory().createPropertyValue(); +// +// WebPrismUtil.createNewValueWrapper(propertyWrapper, createNewValue(propertyWrapper), getPageBase(), target); +// +// target.add(ItemPanel.this); +// } +// protected abstract PV createNewValue(IW itemWrapper); - - protected void removeValue(VW valueToRemove, AjaxRequestTarget target) throws SchemaException { - LOGGER.debug("Removing value of {}", valueToRemove); - List values = getModelObject().getValues(); - - switch (valueToRemove.getStatus()) { - case ADDED: - values.remove(valueToRemove); - getModelObject().getItem().remove(valueToRemove.getOldValue()); - getModelObject().getItem().remove(valueToRemove.getNewValue()); - break; - case DELETED: - valueToRemove.setStatus(ValueStatus.NOT_CHANGED); - getModelObject().getItem().add(valueToRemove.getNewValue()); - break; - case NOT_CHANGED: - getModelObject().getItem().remove(valueToRemove.getNewValue()); - valueToRemove.setStatus(ValueStatus.DELETED); - break; - } - - int count = countUsableValues(values); - - if (count == 0 && !hasEmptyPlaceholder(values)) { - addValue(target); - } - - target.add(ItemPanel.this); - } - - private int countUsableValues(List values) { - int count = 0; - for (VW value : values) { - if (ValueStatus.DELETED.equals(value.getStatus())) { - continue; - } - if (ValueStatus.ADDED.equals(value.getStatus())) { - continue; - } - count++; - } - return count; - } - - private boolean hasEmptyPlaceholder(List values) { - for (VW value : values) { - if (ValueStatus.ADDED.equals(value.getStatus()) ) {//&& !value.hasValueChanged()) { - return true; - } - } - - return false; - } - - private boolean isAddButtonVisible() { - return getModelObject().isMultiValue(); - } - - - - protected boolean isRemoveButtonVisible() { - return !getModelObject().isReadOnly(); - - } - - - private boolean isVisibleValue(IModel model) { - VW value = model.getObject(); - return !ValueStatus.DELETED.equals(value.getStatus()); - } +// +// protected void removeValue(VW valueToRemove, AjaxRequestTarget target) throws SchemaException { +// LOGGER.debug("Removing value of {}", valueToRemove); +// List values = getModelObject().getValues(); +// +// switch (valueToRemove.getStatus()) { +// case ADDED: +// values.remove(valueToRemove); +// getModelObject().getItem().remove(valueToRemove.getOldValue()); +// getModelObject().getItem().remove(valueToRemove.getNewValue()); +// break; +// case DELETED: +// valueToRemove.setStatus(ValueStatus.NOT_CHANGED); +// getModelObject().getItem().add(valueToRemove.getNewValue()); +// break; +// case NOT_CHANGED: +// getModelObject().getItem().remove(valueToRemove.getNewValue()); +// valueToRemove.setStatus(ValueStatus.DELETED); +// break; +// } +// +// int count = countUsableValues(values); +// +// if (count == 0 && !hasEmptyPlaceholder(values)) { +// addValue(target); +// } +// +// target.add(ItemPanel.this); +// } +// +// private int countUsableValues(List values) { +// int count = 0; +// for (VW value : values) { +// if (ValueStatus.DELETED.equals(value.getStatus())) { +// continue; +// } +// if (ValueStatus.ADDED.equals(value.getStatus())) { +// continue; +// } +// count++; +// } +// return count; +// } +// +// private boolean hasEmptyPlaceholder(List values) { +// for (VW value : values) { +// if (ValueStatus.ADDED.equals(value.getStatus()) ) {//&& !value.hasValueChanged()) { +// return true; +// } +// } +// +// return false; +// } +// +// private boolean isAddButtonVisible() { +// return getModelObject().isMultiValue(); +// } +// +// +// +// protected boolean isRemoveButtonVisible() { +// return !getModelObject().isReadOnly(); +// +// } +// +// +// private boolean isVisibleValue(IModel model) { +// VW value = model.getObject(); +// return !ValueStatus.DELETED.equals(value.getStatus()); +// } public ItemVisibilityHandler getVisibilityHandler() { if (itemPanelSettings == null) { @@ -336,7 +344,7 @@ protected boolean isHeaderVisible() { return itemPanelSettings.isHeaderVisible(); } - public ItemHeaderPanel.ItemPanelSettings getSettings() { + public ItemPanelSettings getSettings() { return itemPanelSettings; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ItemPanelSettings.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ItemPanelSettings.java new file mode 100644 index 00000000000..5240e84d850 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ItemPanelSettings.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2020 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.gui.impl.prism.panel; + +import com.evolveum.midpoint.gui.api.prism.wrapper.ItemEditabilityHandler; +import com.evolveum.midpoint.gui.api.prism.wrapper.ItemMandatoryHandler; +import com.evolveum.midpoint.gui.api.prism.wrapper.ItemVisibilityHandler; + +import java.io.Serializable; + +public class ItemPanelSettings implements Serializable { + + private ItemVisibilityHandler visibilityHandler; + private ItemEditabilityHandler editabilityHandler = wrapper -> true; + private boolean showOnTopLevel; + private boolean headerVisible = true; + private ItemMandatoryHandler mandatoryHandler; + + + public ItemVisibilityHandler getVisibilityHandler() { + return visibilityHandler; + } + + void setVisibilityHandler(ItemVisibilityHandler visibilityHandler) { + this.visibilityHandler = visibilityHandler; + } + + public ItemEditabilityHandler getEditabilityHandler() { + return editabilityHandler; + } + + public void setEditabilityHandler(ItemEditabilityHandler editabilityHandler) { + this.editabilityHandler = editabilityHandler; + } + + public boolean isShowOnTopLevel() { + return showOnTopLevel; + } + + void setShowOnTopLevel(boolean showOnTopLevel) { + this.showOnTopLevel = showOnTopLevel; + } + + public boolean isHeaderVisible() { + return headerVisible; + } + + void setHeaderVisible(boolean headerVisible) { + this.headerVisible = headerVisible; + } + + public ItemMandatoryHandler getMandatoryHandler() { + return mandatoryHandler; + } + + public void setMandatoryHandler(ItemMandatoryHandler mandatoryHandler) { + this.mandatoryHandler = mandatoryHandler; + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ItemPanelSettingsBuilder.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ItemPanelSettingsBuilder.java new file mode 100644 index 00000000000..b8212ad8368 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ItemPanelSettingsBuilder.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2020 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.gui.impl.prism.panel; + +import com.evolveum.midpoint.gui.api.prism.wrapper.ItemEditabilityHandler; +import com.evolveum.midpoint.gui.api.prism.wrapper.ItemMandatoryHandler; +import com.evolveum.midpoint.gui.api.prism.wrapper.ItemVisibilityHandler; + +public class ItemPanelSettingsBuilder { + + private ItemPanelSettings settings; + + public ItemPanelSettingsBuilder() { + settings = new ItemPanelSettings(); + } + + public ItemPanelSettingsBuilder visibilityHandler(ItemVisibilityHandler handler) { + settings.setVisibilityHandler(handler); + return this; + } + + public ItemPanelSettingsBuilder editabilityHandler(ItemEditabilityHandler handler) { + settings.setEditabilityHandler(handler); + return this; + } + + public ItemPanelSettingsBuilder mandatoryHandler(ItemMandatoryHandler handler) { + settings.setMandatoryHandler(handler); + return this; + } + + public ItemPanelSettingsBuilder showOnTopLevel(boolean showOnTopLevel) { + settings.setShowOnTopLevel(showOnTopLevel); + return this; + } + + public ItemPanelSettingsBuilder headerVisibility(boolean headerVisibility) { + settings.setHeaderVisible(headerVisibility); + return this; + } + + public ItemPanelSettings build() { + return settings; + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ItemWrapperComparator.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ItemWrapperComparator.java new file mode 100644 index 00000000000..2f6b1a427a4 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ItemWrapperComparator.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2020 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.gui.impl.prism.panel; + +import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; + +import java.text.Collator; +import java.util.Comparator; + +/** + * @author katka + * + */ +public class ItemWrapperComparator implements Comparator { + + private Collator collator; + private boolean sorted; + + public ItemWrapperComparator(Collator collator, boolean sorted) { + this.collator = collator; + this.sorted = sorted; + } + + @Override + public int compare(IW id1, IW id2) { + if (sorted) { + return compareByDisplayNames(id1, id2, collator); + } + int displayOrder1 = (id1 == null || id1.getDisplayOrder() == null) ? Integer.MAX_VALUE : id1.getDisplayOrder(); + int displayOrder2 = (id2 == null || id2.getDisplayOrder() == null) ? Integer.MAX_VALUE : id2.getDisplayOrder(); + if (displayOrder1 == displayOrder2) { + return compareByDisplayNames(id1, id1, collator); + } else { + return Integer.compare(displayOrder1, displayOrder2); + } + } + + private int compareByDisplayNames(IW pw1, IW pw2, Collator collator) { + return collator.compare(pw1.getDisplayName(), pw2.getDisplayName()); + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismContainerPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismContainerPanel.java index ca833055830..e7642ca1373 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismContainerPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismContainerPanel.java @@ -39,7 +39,7 @@ public class PrismContainerPanel extends ItemPanel> model, ItemHeaderPanel.ItemPanelSettings settings) { + public PrismContainerPanel(String id, IModel> model, ItemPanelSettings settings) { super(id, model, settings); } @@ -85,38 +85,40 @@ protected boolean getHeaderVisibility() { } @Override - protected Component createValuePanel(ListItem> item, GuiComponentFactory componentFactory, - ItemVisibilityHandler visibilityHandler, ItemEditabilityHandler editabilityHandler) { - if (componentFactory == null) { - ItemHeaderPanel.ItemPanelSettings settings = new ItemHeaderPanel.ItemPanelSettingsBuilder() - .visibilityHandler(visibilityHandler) - .editabilityHandler(editabilityHandler) - .showOnTopLevel(isShowOnTopLevel()) - .mandatoryHandler(getMandatoryHandler()) - .build(); - PrismContainerValuePanel> valuePanel = new PrismContainerValuePanel>("value", item.getModel(), - settings) { - - @Override - protected void removePerformed(PrismContainerValueWrapper containerValueWrapper, AjaxRequestTarget target) throws SchemaException { - PrismContainerPanel.this.removeValue(containerValueWrapper, target); - } - - }; - valuePanel.setOutputMarkupId(true); - item.add(valuePanel); - item.setOutputMarkupId(true); - return valuePanel; - } - - - PrismContainerPanelContext panelCtx = new PrismContainerPanelContext<>(getModel()); - panelCtx.setComponentId("value"); - panelCtx.setRealValueModel(item.getModel()); - Panel panel = componentFactory.createPanel(panelCtx); - panel.setOutputMarkupId(true); + protected Component createValuePanel(ListItem> item) { + PrismContainerValuePanel> panel = new PrismContainerValuePanel<>("value", item.getModel(), getSettings()); item.add(panel); return panel; +// if (componentFactory == null) {; +// ItemPanelSettings settings = new ItemPanelSettingsBuilder() +// .visibilityHandler(visibilityHandler) +// .editabilityHandler(editabilityHandler) +// .showOnTopLevel(isShowOnTopLevel()) +// .mandatoryHandler(getMandatoryHandler()) +// .build(); +// PrismContainerValuePanel> valuePanel = new PrismContainerValuePanel>("value", item.getModel(), +// settings) { +// +// @Override +// protected void removePerformed(PrismContainerValueWrapper containerValueWrapper, AjaxRequestTarget target) throws SchemaException { +// PrismContainerPanel.this.removeValue(containerValueWrapper, target); +// } +// +// }; +// valuePanel.setOutputMarkupId(true); +// item.add(valuePanel); +// item.setOutputMarkupId(true); +// return valuePanel; +// } +// +// +// PrismContainerPanelContext panelCtx = new PrismContainerPanelContext<>(getModel()); +// panelCtx.setComponentId("value"); +// panelCtx.setRealValueModel(item.getModel()); +// Panel panel = componentFactory.createPanel(panelCtx); +// panel.setOutputMarkupId(true); +// item.add(panel); +// return panel; } @@ -135,10 +137,10 @@ public boolean isEnabled() { // values.add(new VisibleBehaviour(() -> getModelObject() != null && (getModelObject().isExpanded() || getModelObject().isSingleValue()))); // } - @Override - protected void createButtons(ListItem> item) { - //nothing to do.. buttons are in the prism container panel header/ prism container value header - } +// @Override +// protected void createButtons(ListItem> item) { +// //nothing to do.. buttons are in the prism container panel header/ prism container value header +// } @Override protected PV createNewValue(PrismContainerWrapper itemWrapper) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismContainerValuePanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismContainerValuePanel.html index fed49ac7d53..c632414e43d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismContainerValuePanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismContainerValuePanel.html @@ -8,7 +8,7 @@ -
+
@@ -16,35 +16,36 @@ - - - - + + +
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
-
-
-
-
+
+ diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismContainerValuePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismContainerValuePanel.java index a83b0109039..69037f1cea3 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismContainerValuePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismContainerValuePanel.java @@ -14,6 +14,7 @@ import javax.xml.namespace.QName; import com.evolveum.midpoint.gui.api.prism.wrapper.*; +import com.evolveum.midpoint.gui.impl.factory.panel.PrismContainerPanelContext; import com.evolveum.midpoint.gui.impl.prism.panel.component.ListContainersPopup; import com.evolveum.midpoint.gui.impl.prism.wrapper.ItemWrapperVisibilitySpecification; import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismContainerValueWrapper; @@ -26,6 +27,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.wicket.AttributeModifier; +import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.behavior.AttributeAppender; @@ -41,7 +43,6 @@ import org.apache.wicket.model.StringResourceModel; import com.evolveum.midpoint.gui.api.GuiStyleConstants; -import com.evolveum.midpoint.gui.api.component.BasePanel; import com.evolveum.midpoint.gui.api.component.togglebutton.ToggleIconButton; import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; import com.evolveum.midpoint.gui.api.factory.wrapper.WrapperContext; @@ -59,7 +60,7 @@ * @author katka * */ -public class PrismContainerValuePanel> extends BasePanel{ +public class PrismContainerValuePanel> extends PrismValuePanel, CVW>{ private static final long serialVersionUID = 1L; @@ -75,23 +76,27 @@ public class PrismContainerValuePanel model, ItemHeaderPanel.ItemPanelSettings settings) { - super(id, model); - this.settings = settings; + public PrismContainerValuePanel(String id, IModel model, ItemPanelSettings settings) { + super(id, model, settings); } @Override - public boolean isVisible() { - CVW modelObject = getModelObject(); - if (modelObject == null) { + protected PrismContainerPanelContext createPanelCtx() { + return new PrismContainerPanelContext(getModelObject().getParent()); + } + + @Override + protected boolean isVisibleValue() { + if (!super.isVisibleValue()) { return false; } - - if (ValueStatus.DELETED == modelObject.getStatus()) { + CVW modelObject = getModelObject(); + if (modelObject == null) { return false; } @@ -117,8 +122,8 @@ public boolean isVisible() { @Override protected void onInitialize() { super.onInitialize(); - initLayout(); - setOutputMarkupId(true); +// initLayout(); +// setOutputMarkupId(true); add(AttributeModifier.append("class", () -> { String cssClasses = ""; @@ -133,16 +138,12 @@ protected void onInitialize() { } - private void initLayout() { - initHeader(); - initValues(); - } - - private void initHeader() { + @Override + protected void addToHeader(WebMarkupContainer header) { WebMarkupContainer labelContainer = new WebMarkupContainer(ID_LABEL_CONTAINER); labelContainer.setOutputMarkupId(true); - add(labelContainer); + header.add(labelContainer); LoadableDetachableModel headerLabelModel = getLabelModel(); AjaxButton labelComponent = new AjaxButton(ID_LABEL, headerLabelModel) { @@ -159,7 +160,7 @@ public void onClick(AjaxRequestTarget target) { labelContainer.add(getHelpLabel()); - initButtons(); + initButtons(header); //TODO always visible if isObject } @@ -168,15 +169,21 @@ protected LoadableDetachableModel getLabelModel() { return getPageBase().createStringResource(getModel().getObject().getDisplayName()); } - private void initValues() { - - createNonContainersPanel(); + @Override + protected Component createDefaultPanel(String id) { + WebMarkupContainer defaultPanel = new WebMarkupContainer(id); + defaultPanel.add(createNonContainersPanel()); - createContainersPanel(); + defaultPanel.add(createContainersPanel()); + return defaultPanel; + } + @Override + protected > PrismContainerValue createNewValue(IW itemWrapper) { + return ((PrismContainer)itemWrapper.getItem()).createNewValue(); } - private > void createNonContainersPanel() { + private > WebMarkupContainer createNonContainersPanel() { WebMarkupContainer propertiesLabel = new WebMarkupContainer(ID_PROPERTIES_LABEL); propertiesLabel.setOutputMarkupId(true); @@ -193,7 +200,7 @@ protected void populateItem(final ListItem item) { }; properties.setOutputMarkupId(true); add(propertiesLabel); - propertiesLabel.add(properties); + propertiesLabel.add(properties); AjaxButton labelShowEmpty = new AjaxButton(ID_SHOW_EMPTY_BUTTON) { private static final long serialVersionUID = 1L; @@ -219,10 +226,13 @@ public boolean isVisible() { && getModelObject().isExpanded();// && !model.getObject().isShowEmpty(); } }); - add(labelShowEmpty); + propertiesLabel.add(labelShowEmpty); + return propertiesLabel; } - private void createContainersPanel() { + private WebMarkupContainer createContainersPanel() { + WebMarkupContainer containersLable = new WebMarkupContainer(ID_CONTAINERS_LABEL); + add(containersLable); ListView> containers = new ListView>("containers", new PropertyModel<>(getModel(), "containers")) { private static final long serialVersionUID = 1L; @@ -234,7 +244,8 @@ protected void populateItem(final ListItem> item) { containers.setReuseItems(true); containers.setOutputMarkupId(true); - add(containers); + containersLable.add(containers); + return containersLable; } @@ -261,7 +272,7 @@ private > List getNonContainerWrappers() { Collator collator = Collator.getInstance(locale); collator.setStrength(Collator.SECONDARY); // e.g. "a" should be different from "á" collator.setDecomposition(Collator.FULL_DECOMPOSITION); - ItemHeaderPanel.ItemWrapperComparator comparator = new ItemHeaderPanel.ItemWrapperComparator<>(collator, getModelObject().isSorted()); + ItemWrapperComparator comparator = new ItemWrapperComparator<>(collator, getModelObject().isSorted()); if (CollectionUtils.isNotEmpty(nonContainers)) { nonContainers.sort((Comparator) comparator); @@ -325,7 +336,7 @@ private > void populateNonContainer(ListItem ite typeName = new QName("ResourceAttributeDefinition"); } - ItemHeaderPanel.ItemPanelSettingsBuilder builder = new ItemHeaderPanel.ItemPanelSettingsBuilder() + ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder() .visibilityHandler(getVisibilityHandler()) .editabilityHandler(getReadabilityHandler()) .mandatoryHandler(getMandatoryHandler()) @@ -354,7 +365,7 @@ private > void populateNonContainer(ListItem ite throw new SystemException("Cannot instantiate " + itemWrapper.getTypeName()); } - item.add(AttributeModifier.append("class", createStyleClassModel(item.getModel()))); + item.add(AttributeModifier.append("class", appendStyleClassModel(item.getModel()))); } private void populateContainer(ListItem> container) { @@ -376,12 +387,12 @@ private StringResourceModel getNameOfShowEmptyButton() { private void onShowEmptyClick(AjaxRequestTarget target) { - PrismContainerValueWrapper wrapper = getModelObject(); + CVW wrapper = getModelObject(); wrapper.setShowEmpty(!wrapper.isShowEmpty()); refreshPanel(target); } - private > IModel createStyleClassModel(final IModel wrapper) { + private > IModel appendStyleClassModel(final IModel wrapper) { return new IModel() { private static final long serialVersionUID = 1L; @@ -393,12 +404,12 @@ public String getObject() { }; } - private void initButtons() { - initExpandCollapseButton(); - initMetadataButton(); - initSortButton(); - initAddMoreButton(); - initRemoveButton(); + private void initButtons(WebMarkupContainer header) { + header.add(createExpandCollapseButton()); + header.add(createMetadataButton()); + header.add(createSortButton()); + header.add(createAddMoreButton()); +// initRemoveButton(); } private void onExpandClick(AjaxRequestTarget target) { @@ -411,14 +422,14 @@ private void onExpandClick(AjaxRequestTarget target) { protected Label getHelpLabel() { Label help = new Label(ID_HELP); - help.add(AttributeModifier.replace("title", LambdaModel.of(getModel(), CVW::getHelpText))); + help.add(AttributeModifier.replace("title", LambdaModel.of(getModel(), PrismContainerValueWrapper::getHelpText))); help.add(new InfoTooltipBehavior()); help.add(new VisibleBehaviour(() -> StringUtils.isNotEmpty(getModelObject().getHelpText()))); help.setOutputMarkupId(true); return help; } - private void initMetadataButton() { + private ToggleIconButton createMetadataButton() { ToggleIconButton showMetadataButton = new ToggleIconButton(ID_SHOW_METADATA, GuiStyleConstants.CLASS_ICON_SHOW_METADATA, GuiStyleConstants.CLASS_ICON_SHOW_METADATA) { private static final long serialVersionUID = 1L; @@ -439,11 +450,10 @@ public boolean isOn() { showMetadataButton.add(new VisibleBehaviour(() -> getModelObject().hasMetadata() && shouldBeButtonsShown())); showMetadataButton.setOutputMarkupId(true); showMetadataButton.setOutputMarkupPlaceholderTag(true); - add(showMetadataButton); - + return showMetadataButton; } - private void initSortButton() { + private ToggleIconButton createSortButton() { ToggleIconButton sortPropertiesButton = new ToggleIconButton(ID_SORT_PROPERTIES, GuiStyleConstants.CLASS_ICON_SORT_ALPHA_ASC, GuiStyleConstants.CLASS_ICON_SORT_AMOUNT_ASC) { @@ -462,10 +472,10 @@ public boolean isOn() { sortPropertiesButton.add(new VisibleBehaviour(() -> shouldBeButtonsShown())); sortPropertiesButton.setOutputMarkupId(true); sortPropertiesButton.setOutputMarkupPlaceholderTag(true); - add(sortPropertiesButton); + return sortPropertiesButton; } - private void initAddMoreButton() { + private AjaxLink createAddMoreButton() { AjaxLink addChildContainerButton = new AjaxLink(ID_ADD_CHILD_CONTAINER, new StringResourceModel("PrismContainerValuePanel.addMore")) { private static final long serialVersionUID = 1L; @@ -499,8 +509,7 @@ public boolean isVisible() { }); addChildContainerButton.setOutputMarkupId(true); addChildContainerButton.setOutputMarkupPlaceholderTag(true); - add(addChildContainerButton); - + return addChildContainerButton; } private void initMoreContainersPopup(AjaxRequestTarget parentTarget) { @@ -613,7 +622,7 @@ private void refreshPanel(AjaxRequestTarget target) { target.add(getPageBase().getFeedbackPanel()); } - protected void initExpandCollapseButton() { + protected ToggleIconButton createExpandCollapseButton() { ToggleIconButton expandCollapseButton = new ToggleIconButton(ID_EXPAND_COLLAPSE_BUTTON, GuiStyleConstants.CLASS_ICON_EXPAND_CONTAINER, GuiStyleConstants.CLASS_ICON_COLLAPSE_CONTAINER) { @@ -630,6 +639,6 @@ public boolean isOn() { } }; expandCollapseButton.setOutputMarkupId(true); - add(expandCollapseButton); + return expandCollapseButton; } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismObjectValuePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismObjectValuePanel.java index fee38e64cf8..abd96817377 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismObjectValuePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismObjectValuePanel.java @@ -26,9 +26,9 @@ public class PrismObjectValuePanel extends BasePanel> model, ItemHeaderPanel.ItemPanelSettings settings) { + public PrismObjectValuePanel(String id, IModel> model, ItemPanelSettings settings) { super(id, model); this.settings = settings; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismPropertyPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismPropertyPanel.html index 240d0e0aac8..dbfc22c2f3b 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismPropertyPanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismPropertyPanel.html @@ -11,20 +11,17 @@
-
-
-
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismPropertyPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismPropertyPanel.java index eae0a249726..2b8082444fc 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismPropertyPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismPropertyPanel.java @@ -9,8 +9,10 @@ import com.evolveum.midpoint.gui.api.Validatable; import com.evolveum.midpoint.gui.api.factory.GuiComponentFactory; +import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper; import com.evolveum.midpoint.gui.impl.error.ErrorPanel; +import com.evolveum.midpoint.gui.impl.factory.panel.ItemPanelContext; import com.evolveum.midpoint.gui.impl.factory.panel.PrismPropertyPanelContext; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemEditabilityHandler; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemVisibilityHandler; @@ -66,7 +68,7 @@ public class PrismPropertyPanel extends ItemPanel> model, ItemHeaderPanel.ItemPanelSettings settings) { + public PrismPropertyPanel(String id, IModel> model, ItemPanelSettings settings) { super(id, model, settings); } @@ -77,157 +79,145 @@ protected Panel createHeaderPanel() { @Override - protected Component createValuePanel(ListItem> item, GuiComponentFactory factory, - ItemVisibilityHandler visibilityHandler, ItemEditabilityHandler editabilityHandler) { + protected Component createValuePanel(ListItem> item) { - return createInputPanel(item, factory); + PrismPropertyValuePanel panel = new PrismPropertyValuePanel("value", item.getModel(), getSettings()); + item.add(panel); + return panel; +// return createInputPanel(item, factory); } - private WebMarkupContainer createInputPanel(ListItem> item, GuiComponentFactory factory) { - - WebMarkupContainer valueContainer = new WebMarkupContainer(ID_VALUE_CONTAINER); - valueContainer.setOutputMarkupId(true); - item.add(valueContainer); - // feedback - FeedbackAlerts feedback = new FeedbackAlerts(ID_FEEDBACK); - feedback.setOutputMarkupId(true); - item.add(feedback); - - PrismPropertyWrapper modelObject = getModelObject(); - - LOGGER.trace("create input component for: {}", modelObject.debugDump()); - - Panel component = null; - - Form form = new Form<>(ID_FORM); - valueContainer.add(form); - - if (factory == null) { - if (getPageBase().getApplication().usesDevelopmentConfig()) { - form.add(new ErrorPanel(ID_INPUT, createStringResource("Cannot create component for: " + modelObject.getItem()))); - } else { - Label noComponent = new Label(ID_INPUT); - noComponent.setVisible(false); - form.add(noComponent); - } - return valueContainer; - } - - if (factory != null) { - - PrismPropertyPanelContext panelCtx = new PrismPropertyPanelContext(getModel()); - panelCtx.setForm(form); - panelCtx.setRealValueModel(item.getModel()); - panelCtx.setComponentId(ID_INPUT); - panelCtx.setParentComponent(this); - - try { - component = factory.createPanel(panelCtx); - form.add(component); - } catch (Throwable e) { - LoggingUtils.logUnexpectedException(LOGGER, "Cannot create panel", e); - getSession().error("Cannot create panel"); - throw new RuntimeException(e); - } - } - - if (component instanceof Validatable) { - Validatable inputPanel = (Validatable) component; - // adding valid from/to date range validator, if necessary - ExpressionValidator expressionValidator = new ExpressionValidator( - LambdaModel.of(modelObject::getFormComponentValidator), getPageBase()) { - - private static final long serialVersionUID = 1L; - - @Override - protected O getObjectType() { - return getObject(); - } - }; - inputPanel.getValidatableComponent().add(expressionValidator); - - inputPanel.getValidatableComponent().add(new AjaxFormComponentUpdatingBehavior("change") { - - private static final long serialVersionUID = 1L; - - @Override - protected void onUpdate(AjaxRequestTarget target) { - target.add(getPageBase().getFeedbackPanel()); - target.add(feedback); - } - - @Override - protected void onError(AjaxRequestTarget target, RuntimeException e) { - target.add(getPageBase().getFeedbackPanel()); - target.add(feedback); - } - - }); - feedback.setFilter(new ComponentFeedbackMessageFilter(inputPanel.getValidatableComponent())); - } else { - feedback.setFilter(new ComponentFeedbackMessageFilter(component)); - } - - if (component instanceof InputPanel) { - InputPanel inputPanel = (InputPanel) component; - - final List formComponents = inputPanel.getFormComponents(); - for (FormComponent formComponent : formComponents) { - IModel label = LambdaModel.of(modelObject::getDisplayName); - formComponent.setLabel(label); - formComponent.setRequired(getMandatoryHandler() == null ? modelObject.isMandatory() : getMandatoryHandler().isMandatory(modelObject)); - - if (formComponent instanceof TextField) { - formComponent.add(new AttributeModifier("size", "42")); - } - formComponent.add(new AjaxFormComponentUpdatingBehavior("change") { - - private static final long serialVersionUID = 1L; - - @Override - protected void onUpdate(AjaxRequestTarget target) { - target.add(getPageBase().getFeedbackPanel()); - target.add(feedback); - } - - @Override - protected void onError(AjaxRequestTarget target, RuntimeException e) { - target.add(getPageBase().getFeedbackPanel()); - target.add(feedback); - } - - }); - formComponent.add(new EnableBehaviour(() -> getEditabilityHandler() == null || - getEditabilityHandler().isEditable(getModelObject()))); - } - - - } - if (component == null) { - WebMarkupContainer cont = new WebMarkupContainer(ID_INPUT); - cont.setOutputMarkupId(true); - return cont; - } - return valueContainer; +// private WebMarkupContainer createInputPanel(ListItem> item, GuiComponentFactory factory) { +// +// WebMarkupContainer valueContainer = new WebMarkupContainer(ID_VALUE_CONTAINER); +// valueContainer.setOutputMarkupId(true); +// item.add(valueContainer); +// // feedback +// FeedbackAlerts feedback = new FeedbackAlerts(ID_FEEDBACK); +// feedback.setOutputMarkupId(true); +// item.add(feedback); +// +// PrismPropertyWrapper modelObject = getModelObject(); +// +// LOGGER.trace("create input component for: {}", modelObject.debugDump()); +// +// Panel component = null; +// +// Form form = new Form<>(ID_FORM); +// valueContainer.add(form); +// +// if (factory == null) { +// if (getPageBase().getApplication().usesDevelopmentConfig()) { +// form.add(new ErrorPanel(ID_INPUT, createStringResource("Cannot create component for: " + modelObject.getItem()))); +// } else { +// Label noComponent = new Label(ID_INPUT); +// noComponent.setVisible(false); +// form.add(noComponent); +// } +// return valueContainer; +// } +// +// if (factory != null) { +// +// PrismPropertyPanelContext panelCtx = new PrismPropertyPanelContext(getModel()); +// panelCtx.setForm(form); +// panelCtx.setRealValueModel(item.getModel()); +// panelCtx.setComponentId(ID_INPUT); +// panelCtx.setParentComponent(this); +// +// try { +// component = factory.createPanel(panelCtx); +// form.add(component); +// } catch (Throwable e) { +// LoggingUtils.logUnexpectedException(LOGGER, "Cannot create panel", e); +// getSession().error("Cannot create panel"); +// throw new RuntimeException(e); +// } +// } +// +// if (component instanceof Validatable) { +// Validatable inputPanel = (Validatable) component; +// // adding valid from/to date range validator, if necessary +// ExpressionValidator expressionValidator = new ExpressionValidator( +// LambdaModel.of(modelObject::getFormComponentValidator), getPageBase()) { +// +// private static final long serialVersionUID = 1L; +// +// @Override +// protected O getObjectType() { +// return getObject(); +// } +// }; +// inputPanel.getValidatableComponent().add(expressionValidator); +// +// inputPanel.getValidatableComponent().add(new AjaxFormComponentUpdatingBehavior("change") { +// +// private static final long serialVersionUID = 1L; +// +// @Override +// protected void onUpdate(AjaxRequestTarget target) { +// target.add(getPageBase().getFeedbackPanel()); +// target.add(feedback); +// } +// +// @Override +// protected void onError(AjaxRequestTarget target, RuntimeException e) { +// target.add(getPageBase().getFeedbackPanel()); +// target.add(feedback); +// } +// +// }); +// feedback.setFilter(new ComponentFeedbackMessageFilter(inputPanel.getValidatableComponent())); +// } else { +// feedback.setFilter(new ComponentFeedbackMessageFilter(component)); +// } +// +// if (component instanceof InputPanel) { +// InputPanel inputPanel = (InputPanel) component; +// +// final List formComponents = inputPanel.getFormComponents(); +// for (FormComponent formComponent : formComponents) { +// IModel label = LambdaModel.of(modelObject::getDisplayName); +// formComponent.setLabel(label); +// formComponent.setRequired(getMandatoryHandler() == null ? modelObject.isMandatory() : getMandatoryHandler().isMandatory(modelObject)); +// +// if (formComponent instanceof TextField) { +// formComponent.add(new AttributeModifier("size", "42")); +// } +// formComponent.add(new AjaxFormComponentUpdatingBehavior("change") { +// +// private static final long serialVersionUID = 1L; +// +// @Override +// protected void onUpdate(AjaxRequestTarget target) { +// target.add(getPageBase().getFeedbackPanel()); +// target.add(feedback); +// } +// +// @Override +// protected void onError(AjaxRequestTarget target, RuntimeException e) { +// target.add(getPageBase().getFeedbackPanel()); +// target.add(feedback); +// } +// +// }); +// formComponent.add(new EnableBehaviour(() -> getEditabilityHandler() == null || +// getEditabilityHandler().isEditable(getModelObject()))); +// } +// +// +// } +// if (component == null) { +// WebMarkupContainer cont = new WebMarkupContainer(ID_INPUT); +// cont.setOutputMarkupId(true); +// return cont; +// } +// return valueContainer; +// +// } - } - - private , O extends ObjectType, C extends Containerable> O getObject() { - OW objectWrapper = getModelObject().findObjectWrapper(); - if (objectWrapper == null) { - return null; - } - - try { - PrismObject objectNew = objectWrapper.getObjectApplyDelta(); - return objectNew.asObjectable(); - } catch (SchemaException e) { - LOGGER.error("Cannot apply deltas to object for validation: {}", e.getMessage(), e); - return null; - } - } @Override protected PV createNewValue(PrismPropertyWrapper itemWrapper) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismPropertyValuePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismPropertyValuePanel.java new file mode 100644 index 00000000000..ef5c2165f55 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismPropertyValuePanel.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2020 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.gui.impl.prism.panel; + +import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; +import com.evolveum.midpoint.gui.impl.error.ErrorPanel; +import com.evolveum.midpoint.gui.impl.factory.panel.ItemPanelContext; +import com.evolveum.midpoint.gui.impl.factory.panel.PrismPropertyPanelContext; +import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismPropertyValueWrapper; +import com.evolveum.midpoint.prism.PrismPropertyValue; + +import org.apache.wicket.Component; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.model.IModel; + +public class PrismPropertyValuePanel extends PrismValuePanel, PrismPropertyValueWrapper> { + + private static final String ID_INPUT = "input"; + + public PrismPropertyValuePanel(String id, IModel> model, ItemPanelSettings settings) { + super(id, model, settings); + } + + @Override + protected PrismPropertyPanelContext createPanelCtx() { + PrismPropertyPanelContext panelCtx = new PrismPropertyPanelContext<>(getModelObject().getParent()); +// panelCtx.setComponentId(ID_INPUT); + return panelCtx; + } + + @Override + protected > PrismPropertyValue createNewValue(IW itemWrapper) { + return getPrismContext().itemFactory().createPropertyValue(); + } + + @Override + protected Component createDefaultPanel(String id) { + if (getPageBase().getApplication().usesDevelopmentConfig()) { + return new ErrorPanel(id, createStringResource("Cannot create component for: " + getModelObject().getParent().getItem())); + } else { + Label noComponent = new Label(id); + noComponent.setVisible(false); + return noComponent; + } + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismReferencePanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismReferencePanel.html index d0d186d181e..2ea05b74347 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismReferencePanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismReferencePanel.html @@ -13,14 +13,14 @@
-
- - - - - -
+ + + + + + + +
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismReferencePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismReferencePanel.java index 13b4ac6fc6e..f0528a64e88 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismReferencePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismReferencePanel.java @@ -55,7 +55,7 @@ public class PrismReferencePanel extends ItemPanel> model, ItemHeaderPanel.ItemPanelSettings settings) { + public PrismReferencePanel(String id, IModel> model, ItemPanelSettings settings) { super(id, model, settings); } @@ -65,90 +65,92 @@ protected Panel createHeaderPanel() { } @Override - protected Component createValuePanel(ListItem> item, GuiComponentFactory componentFactory, - ItemVisibilityHandler visibilityHandler, ItemEditabilityHandler editabilityHandler) { - FeedbackAlerts feedback = new FeedbackAlerts(ID_FEEDBACK); - feedback.setOutputMarkupId(true); - item.add(feedback); - - if (componentFactory != null) { - PrismReferencePanelContext panelCtx = new PrismReferencePanelContext<>(getModel()); - panelCtx.setComponentId(ID_VALUE); - panelCtx.setParentComponent(this); - panelCtx.setRealValueModel((IModel)item.getModel()); - - Panel panel = componentFactory.createPanel(panelCtx); - item.add(panel); - return panel; - } else { - ValueChoosePanel panel = new ValueChoosePanel(ID_VALUE, new ItemRealValueModel<>(item.getModel())) { - - private static final long serialVersionUID = 1L; - - @Override - protected ObjectFilter createCustomFilter() { - return PrismReferencePanel.this.getModelObject().getFilter(); - } - - @Override - protected boolean isEditButtonEnabled() { -// if (getModel() == null) { + protected Component createValuePanel(ListItem> item) { + PrismReferenceValuePanel valuePanel = new PrismReferenceValuePanel<>("value", item.getModel(), getSettings()); + item.add(valuePanel); + return valuePanel; +// FeedbackAlerts feedback = new FeedbackAlerts(ID_FEEDBACK); +// feedback.setOutputMarkupId(true); +// item.add(feedback); +// +// if (componentFactory != null) { +// PrismReferencePanelContext panelCtx = new PrismReferencePanelContext<>(getModel()); +// panelCtx.setComponentId(ID_VALUE); +// panelCtx.setParentComponent(this); +// panelCtx.setRealValueModel((IModel)item.getModel()); +// +// Panel panel = componentFactory.createPanel(panelCtx); +// item.add(panel); +// return panel; +// } else { +// ValueChoosePanel panel = new ValueChoosePanel(ID_VALUE, new ItemRealValueModel<>(item.getModel())) { +// +// private static final long serialVersionUID = 1L; +// +// @Override +// protected ObjectFilter createCustomFilter() { +// return PrismReferencePanel.this.getModelObject().getFilter(); +// } +// +// @Override +// protected boolean isEditButtonEnabled() { +//// if (getModel() == null) { +//// return true; +//// } +//// +//// //TODO only is association +//// return getModelObject() == null; +// if (item.getModel() == null || item.getModelObject() == null) { // return true; // } +// return item.getModelObject().isEditEnabled(); // -// //TODO only is association -// return getModelObject() == null; - if (item.getModel() == null || item.getModelObject() == null) { - return true; - } - return item.getModelObject().isEditEnabled(); - - } - - @Override - protected void choosePerformed(AjaxRequestTarget target, O object) { - super.choosePerformed(target, object); - getBaseFormComponent().validate(); - target.add(getPageBase().getFeedbackPanel()); - target.add(feedback); - } - - @Override - public List getSupportedTypes() { - List targetTypeList = PrismReferencePanel.this.getModelObject().getTargetTypes(); - if (targetTypeList == null || WebComponentUtil.isAllNulls(targetTypeList)) { - return Arrays.asList(ObjectType.COMPLEX_TYPE); - } - return targetTypeList; - } - - @Override - protected Class getDefaultType(List supportedTypes) { - if (AbstractRoleType.COMPLEX_TYPE.equals(PrismReferencePanel.this.getModelObject().getTargetTypeName())) { - return (Class) RoleType.class; - } else { - return super.getDefaultType(supportedTypes); - } - } - - }; - - ExpressionValidator expressionValidator = new ExpressionValidator( - LambdaModel.of(getModel().getObject()::getFormComponentValidator), getPageBase()) { - - private static final long serialVersionUID = 1L; - - @Override - protected Object getValueToValidate(IValidatable validatable) { - return item.getModelObject().getRealValue(); - } - }; - panel.getBaseFormComponent().add(expressionValidator); - feedback.setFilter(new ComponentFeedbackMessageFilter(panel)); - item.add(panel); - - return panel; - } +// } +// +// @Override +// protected void choosePerformed(AjaxRequestTarget target, O object) { +// super.choosePerformed(target, object); +// getBaseFormComponent().validate(); +// target.add(getPageBase().getFeedbackPanel()); +// target.add(feedback); +// } +// +// @Override +// public List getSupportedTypes() { +// List targetTypeList = PrismReferencePanel.this.getModelObject().getTargetTypes(); +// if (targetTypeList == null || WebComponentUtil.isAllNulls(targetTypeList)) { +// return Arrays.asList(ObjectType.COMPLEX_TYPE); +// } +// return targetTypeList; +// } +// +// @Override +// protected Class getDefaultType(List supportedTypes) { +// if (AbstractRoleType.COMPLEX_TYPE.equals(PrismReferencePanel.this.getModelObject().getTargetTypeName())) { +// return (Class) RoleType.class; +// } else { +// return super.getDefaultType(supportedTypes); +// } +// } +// +// }; +// +// ExpressionValidator expressionValidator = new ExpressionValidator( +// LambdaModel.of(getModel().getObject()::getFormComponentValidator), getPageBase()) { +// +// private static final long serialVersionUID = 1L; +// +// @Override +// protected Object getValueToValidate(IValidatable validatable) { +// return item.getModelObject().getRealValue(); +// } +// }; +// panel.getBaseFormComponent().add(expressionValidator); +// feedback.setFilter(new ComponentFeedbackMessageFilter(panel)); +// item.add(panel); +// +// return panel; +// } } protected void addValue(AjaxRequestTarget target) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismReferenceValuePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismReferenceValuePanel.java new file mode 100644 index 00000000000..d8115713959 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismReferenceValuePanel.java @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2020 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.gui.impl.prism.panel; + +import com.evolveum.midpoint.gui.api.factory.GuiComponentFactory; +import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.gui.impl.factory.panel.ItemPanelContext; +import com.evolveum.midpoint.gui.impl.factory.panel.ItemRealValueModel; +import com.evolveum.midpoint.gui.impl.factory.panel.PrismReferencePanelContext; +import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismReferenceValueWrapperImpl; +import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismReferenceWrapper; +import com.evolveum.midpoint.prism.PrismReferenceValue; +import com.evolveum.midpoint.prism.Referencable; + +import com.evolveum.midpoint.prism.query.ObjectFilter; +import com.evolveum.midpoint.web.component.form.ValueChoosePanel; +import com.evolveum.midpoint.web.util.ExpressionValidator; +import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractRoleType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType; + +import org.apache.wicket.Component; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.feedback.ComponentFeedbackMessageFilter; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LambdaModel; +import org.apache.wicket.validation.INullAcceptingValidator; +import org.apache.wicket.validation.IValidatable; + +import javax.xml.namespace.QName; +import java.util.Arrays; +import java.util.List; + +public class PrismReferenceValuePanel extends PrismValuePanel> { + + public PrismReferenceValuePanel(String id, IModel> model, ItemPanelSettings settings) { + super(id, model, settings); + } + + @Override + protected PrismReferencePanelContext createPanelCtx() { + PrismReferencePanelContext panelCtx = new PrismReferencePanelContext<>(getModelObject().getParent()); + return panelCtx; + } + + @Override + protected > PrismReferenceValue createNewValue(IW itemWrapper) { + return getPrismContext().itemFactory().createReferenceValue(); + } + + @Override + protected Component createDefaultPanel(String id) { + ValueChoosePanel panel = new ValueChoosePanel(id, new ItemRealValueModel<>(getModel())) { + + private static final long serialVersionUID = 1L; + + @Override + protected ObjectFilter createCustomFilter() { + return getParentWrapper().getFilter(); + } + + @Override + protected boolean isEditButtonEnabled() { +// +// //TODO only is association +// return getModelObject() == null; + if (getModelObject() == null) { + return true; + } + return PrismReferenceValuePanel.this.getModelObject().isEditEnabled(); + + } + + @Override + protected void choosePerformed(AjaxRequestTarget target, O object) { + super.choosePerformed(target, object); + getBaseFormComponent().validate(); + target.add(getPageBase().getFeedbackPanel()); + target.add(getFeedback()); + } + + @Override + public List getSupportedTypes() { + List targetTypeList = getParentWrapper().getTargetTypes(); + if (targetTypeList == null || WebComponentUtil.isAllNulls(targetTypeList)) { + return Arrays.asList(ObjectType.COMPLEX_TYPE); + } + return targetTypeList; + } + + @Override + protected Class getDefaultType(List supportedTypes) { + if (AbstractRoleType.COMPLEX_TYPE.equals(getParentWrapper().getTargetTypeName())) { + return (Class) RoleType.class; + } else { + return super.getDefaultType(supportedTypes); + } + } + + }; + +// ExpressionValidator expressionValidator = new ExpressionValidator( +// LambdaModel.of(getParentWrapper()::getFormComponentValidator), getPageBase()) { +// +// private static final long serialVersionUID = 1L; +// +// @Override +// protected Object getValueToValidate(IValidatable validatable) { +// return item.getModelObject().getRealValue(); +// } +// }; + panel.getBaseFormComponent().add((INullAcceptingValidator) createExpressionValidator()); + getFeedback().setFilter(new ComponentFeedbackMessageFilter(panel)); + return panel; + } + + + private PrismReferenceWrapper getParentWrapper() { + return getModelObject().getParent(); + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismValuePanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismValuePanel.html new file mode 100644 index 00000000000..37525f9e8ea --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismValuePanel.html @@ -0,0 +1,31 @@ + + + + + +
+
+
+
+ +
+ +
+ + + + + +
+
+
+ +
+ + diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismValuePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismValuePanel.java new file mode 100644 index 00000000000..e9a3a1a2401 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/PrismValuePanel.java @@ -0,0 +1,438 @@ +/* + * Copyright (c) 2020 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.gui.impl.prism.panel; + +import com.evolveum.midpoint.gui.api.component.BasePanel; +import com.evolveum.midpoint.gui.api.factory.GuiComponentFactory; +import com.evolveum.midpoint.gui.api.prism.wrapper.ItemEditabilityHandler; +import com.evolveum.midpoint.gui.api.prism.wrapper.ItemMandatoryHandler; +import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; +import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper; +import com.evolveum.midpoint.gui.impl.error.ErrorPanel; +import com.evolveum.midpoint.gui.impl.factory.panel.ItemPanelContext; +import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismPropertyWrapper; +import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismValueWrapper; +import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.prism.PrismValue; + +import com.evolveum.midpoint.util.exception.SchemaException; +import com.evolveum.midpoint.util.logging.LoggingUtils; +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.message.FeedbackAlerts; +import com.evolveum.midpoint.web.component.prism.ValueStatus; +import com.evolveum.midpoint.web.component.util.VisibleBehaviour; + +import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; +import com.evolveum.midpoint.web.util.ExpressionValidator; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; + +import org.apache.wicket.AttributeModifier; +import org.apache.wicket.Component; +import org.apache.wicket.ajax.AjaxEventBehavior; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; +import org.apache.wicket.ajax.markup.html.AjaxLink; +import org.apache.wicket.event.IEventSource; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LambdaModel; + +import java.util.List; + +public abstract class PrismValuePanel> extends BasePanel { + + private static final transient Trace LOGGER = TraceManager.getTrace(PrismValuePanel.class); + + private static final String ID_VALUE_FORM = "valueForm"; + private static final String ID_ADD_BUTTON = "addButton"; + private static final String ID_REMOVE_BUTTON = "removeButton"; + private static final String ID_BUTTON_CONTAINER = "buttonContainer"; + + private static final String ID_FEEDBACK = "feedback"; + private static final String ID_VALUE_CONTAINER = "valueContainer"; + + private static final String ID_HEADER_CONTAINER = "header"; + + + private static final String ID_FORM = "form"; + private static final String ID_INPUT = "input"; + + private ItemPanelSettings settings; + + public PrismValuePanel(String id, IModel model, ItemPanelSettings settings) { + super(id, model); + this.settings = settings; + } + + @Override + protected void onInitialize() { + super.onInitialize(); + initLayout(); + } + + private void initLayout() { + Form form = new Form<>(ID_VALUE_FORM); + add(form); + WebMarkupContainer buttonContainer = createHeaderPanel(); + GuiComponentFactory factory = getPageBase().getRegistry().findValuePanelFactory(getModelObject().getParent()); + createValuePanel(factory); + } + + private WebMarkupContainer createHeaderPanel() { + + WebMarkupContainer buttonContainer = new WebMarkupContainer(ID_HEADER_CONTAINER); +// buttonContainer.add(new AttributeModifier("class", getButtonsCssClass())); + add(buttonContainer); + +// // buttons +// AjaxLink addButton = new AjaxLink(ID_ADD_BUTTON) { +// private static final long serialVersionUID = 1L; +// +// @Override +// public void onClick(AjaxRequestTarget target) { +// addValue(target); +// } +// }; +// addButton.add(new VisibleBehaviour(() -> isAddButtonVisible())); +// buttonContainer.add(addButton); + + AjaxLink removeButton = new AjaxLink(ID_REMOVE_BUTTON) { + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + try { + removeValue(PrismValuePanel.this.getModelObject(), target); + } catch (SchemaException e) { + LOGGER.error("Cannot remove value: {}", getModelObject()); + getSession().error("Cannot remove value "+ getModelObject()); + target.add(getPageBase().getFeedbackPanel()); + target.add(PrismValuePanel.this); + } + } + }; + removeButton.add(new VisibleBehaviour(() -> isRemoveButtonVisible())); + buttonContainer.add(removeButton); + + + add(AttributeModifier.append("class", createStyleClassModel(getModel()))); + +// add(new VisibleBehaviour(() -> isVisibleValue(getModel()))); + + return buttonContainer; + } + + protected void addToHeader(WebMarkupContainer headerContainer) { + + } + + protected WebMarkupContainer createValuePanel(GuiComponentFactory factory) { + + WebMarkupContainer valueContainer = new WebMarkupContainer(ID_VALUE_CONTAINER); + valueContainer.setOutputMarkupId(true); + add(valueContainer); + // feedback + FeedbackAlerts feedback = new FeedbackAlerts(ID_FEEDBACK); + feedback.setOutputMarkupId(true); + add(feedback); + + PrismPropertyWrapper modelObject = getModelObject().getParent(); + + LOGGER.trace("create input component for: {}", modelObject.debugDump()); + + Panel component = null; + + org.apache.wicket.markup.html.form.Form form = new org.apache.wicket.markup.html.form.Form<>(ID_FORM); + valueContainer.add(form); + + if (factory == null) { + form.add(createDefaultPanel(ID_INPUT)); + return valueContainer; + } + + + + ItemPanelContext> panelCtx = createPanelCtx(); + panelCtx.setComponentId(ID_INPUT); + panelCtx.setForm(form); + panelCtx.setRealValueModel(getModel()); + panelCtx.setParentComponent(this); + panelCtx.setAjaxEventBehavior(createEventBehavior()); + panelCtx.setMandatoryHandler(getMandatoryHandler()); + panelCtx.setVisibleEnableBehaviour(createVisibleEnableBehavior()); + panelCtx.setExpressionValidator(createExpressionValidator()); + panelCtx.setFeedback(feedback); + + try { + component = factory.createPanel(panelCtx); + form.add(component); + } catch (Throwable e) { + LoggingUtils.logUnexpectedException(LOGGER, "Cannot create panel", e); + getSession().error("Cannot create panel"); + throw new RuntimeException(e); + } + + +// if (component instanceof Validatable) { +// Validatable inputPanel = (Validatable) component; +// // adding valid from/to date range validator, if necessary +// +// inputPanel.getValidatableComponent().add(expressionValidator); +// +// inputPanel.getValidatableComponent().add(createEventBehavior()); +// feedback.setFilter(new ComponentFeedbackMessageFilter(inputPanel.getValidatableComponent())); +// } else { +// feedback.setFilter(new ComponentFeedbackMessageFilter(component)); +// } + +// if (component instanceof InputPanel) { +// InputPanel inputPanel = (InputPanel) component; +// +// final List formComponents = inputPanel.getFormComponents(); +// for (FormComponent formComponent : formComponents) { +// IModel label = LambdaModel.of(modelObject::getDisplayName); +// formComponent.setLabel(label); +// formComponent.setRequired(getMandatoryHandler() == null ? modelObject.isMandatory() : getMandatoryHandler().isMandatory(modelObject)); +// +// if (formComponent instanceof TextField) { +// formComponent.add(new AttributeModifier("size", "42")); +// } +// formComponent.add(createEventBehavior()); +// formComponent.add(new EnableBehaviour(() -> getEditabilityHandler() == null || +// getEditabilityHandler().isEditable(getModelObject()))); +// } +// +//// } +// if (component == null) { +// WebMarkupContainer cont = new WebMarkupContainer(ID_INPUT); +// cont.setOutputMarkupId(true); +// return cont; +// } + return valueContainer; + + } + + private AjaxEventBehavior createEventBehavior() { + return new AjaxFormComponentUpdatingBehavior("change") { + + private static final long serialVersionUID = 1L; + + @Override + protected void onUpdate(AjaxRequestTarget target) { + target.add(getPageBase().getFeedbackPanel()); + target.add(getFeedback()); + } + + @Override + protected void onError(AjaxRequestTarget target, RuntimeException e) { + target.add(getPageBase().getFeedbackPanel()); + target.add(getFeedback()); + } + + }; + } + + private VisibleEnableBehaviour createVisibleEnableBehavior() { + return new VisibleEnableBehaviour() { + + @Override + public boolean isVisible() { + return isVisibleValue(); + } + + @Override + public boolean isEnabled() { + if (getEditabilityHandler() != null) { + getEditabilityHandler().isEditable(getModelObject().getParent()); + } + return super.isEnabled(); + } + }; + } + + private ItemMandatoryHandler getMandatoryHandler() { + if (settings == null) { + return null; + } + + return settings.getMandatoryHandler(); + } + + private ItemEditabilityHandler getEditabilityHandler() { + if (settings == null) { + return null; + } + + return settings.getEditabilityHandler(); + } + + protected ExpressionValidator createExpressionValidator() { + return new ExpressionValidator( + LambdaModel.of(getModelObject().getParent()::getFormComponentValidator), getPageBase()) { + + @Override + protected O getObjectType() { + return getObject(); + } + }; + } + + protected String getButtonsCssClass() { + return"col-xs-2"; + } + + protected abstract PC createPanelCtx(); + + protected IModel createStyleClassModel(final IModel value) { + return new IModel() { + private static final long serialVersionUID = 1L; + + @Override + public String getObject() { + if (getIndexOfValue(value.getObject()) > 0) { + return getItemCssClass(); + } + + return null; + } + }; + } + + private int getIndexOfValue(VW value) { + ItemWrapper property = value.getParent(); + List values = property.getValues(); + for (int i = 0; i < values.size(); i++) { + if (values.get(i).equals(value)) { + return i; + } + } + + return -1; + } + + protected String getItemCssClass() { + return " col-sm-offset-0 col-md-offset-4 col-lg-offset-2 prism-value "; + } + + private O getObject() { + + PrismObjectWrapper objectWrapper = getModelObject().getParent().findObjectWrapper(); + if (objectWrapper == null) { + return null; + } + + try { + PrismObject objectNew = objectWrapper.getObjectApplyDelta(); + return objectNew.asObjectable(); + } catch (SchemaException e) { + LOGGER.error("Cannot apply deltas to object for validation: {}", e.getMessage(), e); + return null; + } + } + + protected abstract Component createDefaultPanel(String id); + + //TODO move to the ItemPanel, exceptionhandling + protected void addValue(AjaxRequestTarget target) throws SchemaException { + getModelObject().getParent().add(createNewValue(getModelObject().getParent()), getPageBase()); +// getModelObject().getParent().add(createNewValue(getModelObject().getParent()), getPageBase()); +// +// ItemWrapper propertyWrapper = getModel().getObject().getParent(); +// +// WebPrismUtil.createNewValueWrapper(propertyWrapper, createNewValue(propertyWrapper), getPageBase(), target); +// +// target.add(ItemPanel.this); + } + + protected abstract > PV createNewValue(IW itemWrapper); + + //TODO move to the ItemPanel, exception handling + protected void removeValue(VW valueToRemove, AjaxRequestTarget target) throws SchemaException { + LOGGER.debug("Removing value of {}", valueToRemove); + + getModelObject().getParent().remove(valueToRemove, getPageBase()); +// List values = getModelObject().getValues(); +// +// switch (valueToRemove.getStatus()) { +// case ADDED: +// values.remove(valueToRemove); +// getModelObject().getParent().remove(valueToRemove.getOldValue()); +// getModelObject().getParent().remove(valueToRemove.getNewValue()); +// break; +// case DELETED: +// valueToRemove.setStatus(ValueStatus.NOT_CHANGED); +// getModelObject().getItem().add(valueToRemove.getNewValue()); +// break; +// case NOT_CHANGED: +// getModelObject().getItem().remove(valueToRemove.getNewValue()); +// valueToRemove.setStatus(ValueStatus.DELETED); +// break; +// } + +// int count = countUsableValues(values); +// +// if (count == 0 && !hasEmptyPlaceholder(values)) { +// addValue(target); +// } + +// target.add(ItemPanel.this); + } + +// private int countUsableValues(List values) { +// int count = 0; +// for (VW value : values) { +// if (ValueStatus.DELETED.equals(value.getStatus())) { +// continue; +// } +// if (ValueStatus.ADDED.equals(value.getStatus())) { +// continue; +// } +// count++; +// } +// return count; +// } +// +// private boolean hasEmptyPlaceholder(List values) { +// for (VW value : values) { +// if (ValueStatus.ADDED.equals(value.getStatus()) ) {//&& !value.hasValueChanged()) { +// return true; +// } +// } +// +// return false; +// } + + private boolean isAddButtonVisible() { + return getModelObject().getParent().isMultiValue(); + } + + + + protected boolean isRemoveButtonVisible() { + return !getModelObject().getParent().isReadOnly(); + + } + + + protected boolean isVisibleValue() { + VW value = getModelObject(); + return !ValueStatus.DELETED.equals(value.getStatus()); + } + + private Form getForm() { + return (Form) get(ID_VALUE_FORM); + } + + protected FeedbackAlerts getFeedback() { + return (FeedbackAlerts) get(ID_FEEDBACK); + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ProfilingClassLoggerPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ProfilingClassLoggerPanel.java index 5ae74baeb3a..9b7e784ee64 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ProfilingClassLoggerPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ProfilingClassLoggerPanel.java @@ -21,8 +21,8 @@ */ public class ProfilingClassLoggerPanel extends PrismContainerPanel { - public ProfilingClassLoggerPanel(String id, IModel> model, ItemHeaderPanel.ItemPanelSettings settings) { - super(id, model, new ItemHeaderPanel.ItemPanelSettingsBuilder().visibilityHandler(itemWrapper -> checkVisibility(itemWrapper, settings.getVisibilityHandler())).build()); + public ProfilingClassLoggerPanel(String id, IModel> model, ItemPanelSettings settings) { + super(id, model, new ItemPanelSettingsBuilder().visibilityHandler(itemWrapper -> checkVisibility(itemWrapper, settings.getVisibilityHandler())).build()); } private static ItemVisibility checkVisibility(ItemWrapper itemWrapper, ItemVisibilityHandler visibilitytHandler) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ResourceAttributeDefinitionPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ResourceAttributeDefinitionPanel.java index 92da620692a..ef3458ce36c 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ResourceAttributeDefinitionPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ResourceAttributeDefinitionPanel.java @@ -35,7 +35,7 @@ public class ResourceAttributeDefinitionPanel extends PrismPropertyPanel { * @param id * @param model */ - public ResourceAttributeDefinitionPanel(String id, IModel> model, ItemHeaderPanel.ItemPanelSettings settings) { + public ResourceAttributeDefinitionPanel(String id, IModel> model, ItemPanelSettings settings) { super(id, (IModel)model, settings); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ShadowPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ShadowPanel.java index 21b4223703a..efd2ab5fb62 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ShadowPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ShadowPanel.java @@ -63,13 +63,13 @@ private void initLayout() { try { - ItemHeaderPanel.ItemPanelSettingsBuilder attributesSettingsBuilder = new ItemHeaderPanel.ItemPanelSettingsBuilder() + ItemPanelSettingsBuilder attributesSettingsBuilder = new ItemPanelSettingsBuilder() .visibilityHandler(itemWrapper -> checkShadowContainerVisibility(itemWrapper, getModel())); Panel attributesPanel = getPageBase().initItemPanel(ID_ATTRIBUTES, ShadowAttributesType.COMPLEX_TYPE, PrismContainerWrapperModel.fromContainerWrapper(getModel(), ShadowType.F_ATTRIBUTES), attributesSettingsBuilder.build()); add(attributesPanel); - ItemHeaderPanel.ItemPanelSettingsBuilder associationBuilder = new ItemHeaderPanel.ItemPanelSettingsBuilder() + ItemPanelSettingsBuilder associationBuilder = new ItemPanelSettingsBuilder() .visibilityHandler(itemWrapper -> checkShadowContainerVisibility(itemWrapper, getModel())) .showOnTopLevel(true); Panel associationsPanel = getPageBase().initItemPanel(ID_ASSOCIATIONS, ShadowAssociationType.COMPLEX_TYPE, PrismContainerWrapperModel.fromContainerWrapper(getModel(), ShadowType.F_ASSOCIATION), @@ -78,7 +78,7 @@ private void initLayout() { add(associationsPanel); - ItemHeaderPanel.ItemPanelSettingsBuilder activationBuilder = new ItemHeaderPanel.ItemPanelSettingsBuilder() + ItemPanelSettingsBuilder activationBuilder = new ItemPanelSettingsBuilder() .visibilityHandler(itemWrapper -> checkShadowContainerVisibility(itemWrapper, getModel())) .showOnTopLevel(true); Panel activationPanel = getPageBase().initItemPanel(ID_ACTIVATION, ActivationType.COMPLEX_TYPE, PrismContainerWrapperModel.fromContainerWrapper(getModel(), ShadowType.F_ACTIVATION), @@ -86,7 +86,7 @@ private void initLayout() { activationPanel.add(new VisibleBehaviour(() -> isActivationSupported())); add(activationPanel); - ItemHeaderPanel.ItemPanelSettingsBuilder passwordSettingsBuilder = new ItemHeaderPanel.ItemPanelSettingsBuilder() + ItemPanelSettingsBuilder passwordSettingsBuilder = new ItemPanelSettingsBuilder() .visibilityHandler(itemWrapper -> checkShadowContainerVisibility(itemWrapper, getModel())) .showOnTopLevel(true); Panel passwordPanel = getPageBase().initItemPanel(ID_PASSWORD, PasswordType.COMPLEX_TYPE, PrismContainerWrapperModel.fromContainerWrapper(getModel(), ItemPath.create(ShadowType.F_CREDENTIALS, CredentialsType.F_PASSWORD)), diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/wrapper/ItemWrapperImpl.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/wrapper/ItemWrapperImpl.java index 279e4b73a23..d24c43adf22 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/wrapper/ItemWrapperImpl.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/wrapper/ItemWrapperImpl.java @@ -16,6 +16,8 @@ import javax.xml.namespace.QName; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemVisibilityHandler; +import com.evolveum.midpoint.gui.api.util.ModelServiceLocator; +import com.evolveum.midpoint.model.api.ModelService; import com.evolveum.midpoint.prism.*; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; @@ -46,7 +48,7 @@ * @author katka * */ -public abstract class ItemWrapperImpl>, VW extends PrismValueWrapper> implements ItemWrapper, Serializable { +public abstract class ItemWrapperImpl implements ItemWrapper, Serializable { private static final long serialVersionUID = 1L; @@ -637,4 +639,58 @@ public boolean isIndexOnly() { public UserInterfaceElementVisibilityType getVisibleOverwrite() { return visibleOverwrite; } + + @Override + public void remove(VW valueWrapper, ModelServiceLocator locator) throws SchemaException { + switch(valueWrapper.getStatus()) { + case ADDED: + values.remove(valueWrapper); + getItem().remove(valueWrapper.getOldValue()); + getItem().remove(valueWrapper.getNewValue()); + break; + case NOT_CHANGED: + getItem().remove(valueWrapper.getNewValue()); + valueWrapper.setStatus(ValueStatus.DELETED); + break; + } + + int count = countUsableValues(values); + + if (count == 0 && !hasEmptyPlaceholder(values)) { + add(createNewEmptyValue(locator), locator); + } + } + + protected abstract PV createNewEmptyValue(ModelServiceLocator locator); + + @Override + public void add(PV newValue, ModelServiceLocator locator) throws SchemaException { + getItem().add(newValue); + VW newContainerValue = WebPrismUtil.createNewValueWrapper(this, newValue, locator); + values.add(newContainerValue); + } + + private int countUsableValues(List values) { + int count = 0; + for (VW value : values) { + if (ValueStatus.DELETED.equals(value.getStatus())) { + continue; + } + if (ValueStatus.ADDED.equals(value.getStatus())) { + continue; + } + count++; + } + return count; + } + + private boolean hasEmptyPlaceholder(List values) { + for (VW value : values) { + if (ValueStatus.ADDED.equals(value.getStatus()) ) {//&& !value.hasValueChanged()) { + return true; + } + } + + return false; + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/wrapper/ItemWrapperVisibilitySpecification.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/wrapper/ItemWrapperVisibilitySpecification.java index 75418ef49b8..bf7d15092ea 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/wrapper/ItemWrapperVisibilitySpecification.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/wrapper/ItemWrapperVisibilitySpecification.java @@ -11,6 +11,8 @@ import com.evolveum.midpoint.gui.api.prism.wrapper.ItemVisibilityHandler; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper; +import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper; +import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.web.component.prism.ItemVisibility; import com.evolveum.midpoint.xml.ns._public.common.common_3.MetadataType; import com.evolveum.midpoint.xml.ns._public.common.common_3.UserInterfaceElementVisibilityType; @@ -51,6 +53,14 @@ public > boolean isVisible(ItemStatus objectStatus, public boolean isVisible(PrismContainerWrapper containerWrapper, ItemVisibilityHandler visibilityHandler) { + if (containerWrapper == null) { + return false; + } + + if (containerWrapper instanceof PrismObjectWrapper) { + return true; + } + if (containerWrapper.isVirtual() && containerWrapper.getVisibleOverwrite() != null && UserInterfaceElementVisibilityType.HIDDEN == containerWrapper.getVisibleOverwrite()) { return false; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/wrapper/PrismContainerWrapperImpl.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/wrapper/PrismContainerWrapperImpl.java index 60ebf72af45..9faae847ccc 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/wrapper/PrismContainerWrapperImpl.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/wrapper/PrismContainerWrapperImpl.java @@ -18,6 +18,7 @@ import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemVisibilityHandler; +import com.evolveum.midpoint.gui.api.util.ModelServiceLocator; import com.evolveum.midpoint.prism.*; import com.evolveum.midpoint.prism.delta.ContainerDelta; import com.evolveum.midpoint.prism.delta.ItemDelta; @@ -403,4 +404,9 @@ public void accept(Visitor visitor) { public boolean isCompletelyDefined() { return getItemDefinition().isCompletelyDefined(); } + + @Override + protected PrismContainerValue createNewEmptyValue(ModelServiceLocator locator) { + return createValue(); + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/wrapper/PrismPropertyWrapperImpl.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/wrapper/PrismPropertyWrapperImpl.java index ee911244551..19e668a9f46 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/wrapper/PrismPropertyWrapperImpl.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/wrapper/PrismPropertyWrapperImpl.java @@ -11,6 +11,7 @@ import javax.xml.namespace.QName; +import com.evolveum.midpoint.gui.api.util.ModelServiceLocator; import com.evolveum.midpoint.prism.*; import com.evolveum.midpoint.gui.api.prism.ItemStatus; @@ -138,4 +139,9 @@ public boolean accept(Visitor visitor, SmartVisitation v public void accept(Visitor visitor) { // TODO } + + @Override + protected PrismPropertyValue createNewEmptyValue(ModelServiceLocator locator) { + return locator.getPrismContext().itemFactory().createPropertyValue(); + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/wrapper/PrismReferenceWrapperImpl.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/wrapper/PrismReferenceWrapperImpl.java index 5714d457c6b..def649d444c 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/wrapper/PrismReferenceWrapperImpl.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/wrapper/PrismReferenceWrapperImpl.java @@ -9,6 +9,8 @@ import java.util.List; import javax.xml.namespace.QName; +import com.evolveum.midpoint.gui.api.util.ModelServiceLocator; + import org.jetbrains.annotations.NotNull; import com.evolveum.midpoint.gui.api.prism.ItemStatus; @@ -120,4 +122,9 @@ public boolean accept(Visitor visitor, SmartVisitation v public void accept(Visitor visitor) { // TODO } + + @Override + protected PrismReferenceValue createNewEmptyValue(ModelServiceLocator locator) { + return locator.getPrismContext().itemFactory().createReferenceValue(); + } } 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 c74cf57d3ef..0c0ab6be801 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 @@ -13,6 +13,8 @@ import javax.xml.namespace.QName; import com.evolveum.midpoint.gui.impl.prism.panel.ItemHeaderPanel; +import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettings; +import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettingsBuilder; import com.evolveum.midpoint.gui.impl.prism.wrapper.ConstructionValueWrapper; import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismContainerValueWrapper; import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismReferenceValueWrapperImpl; @@ -683,7 +685,7 @@ protected IModel getKindIntentLabelModel() { } protected Panel getBasicContainerPanel(String idPanel, IModel> model) { - ItemHeaderPanel.ItemPanelSettings settings = new ItemHeaderPanel.ItemPanelSettingsBuilder() + ItemPanelSettings settings = new ItemPanelSettingsBuilder() .visibilityHandler(this::getContainerVisibility) .showOnTopLevel(true) .editabilityHandler(this::getContainerReadability) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/AbstractObjectTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/AbstractObjectTabPanel.java index 80ba568f999..fb33a597583 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/AbstractObjectTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/AbstractObjectTabPanel.java @@ -10,6 +10,8 @@ import com.evolveum.midpoint.gui.impl.prism.panel.ItemHeaderPanel; +import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettingsBuilder; + import org.apache.commons.lang.StringUtils; import org.apache.wicket.MarkupContainer; import org.apache.wicket.ajax.AjaxRequestTarget; @@ -110,7 +112,7 @@ protected void showModalWindow(Popupable popupable, AjaxRequestTarget target) { protected Panel addPrismPropertyPanel(MarkupContainer parentComponent, String id, QName typeName, ItemPath propertyPath) { try { - ItemHeaderPanel.ItemPanelSettingsBuilder settingsBuilder = new ItemHeaderPanel.ItemPanelSettingsBuilder(); + ItemPanelSettingsBuilder settingsBuilder = new ItemPanelSettingsBuilder(); settingsBuilder.visibilityHandler(wrapper -> ItemVisibility.AUTO); Panel panel = getPageBase().initItemPanel(id, typeName, PrismPropertyWrapperModel.fromContainerWrapper(getObjectWrapperModel(), propertyPath), settingsBuilder.build()); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/AssignmentHolderTypeDetailsTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/AssignmentHolderTypeDetailsTabPanel.java index 72ead2d345b..9b761d32269 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/AssignmentHolderTypeDetailsTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/AssignmentHolderTypeDetailsTabPanel.java @@ -11,6 +11,8 @@ import com.evolveum.midpoint.gui.impl.prism.panel.ItemHeaderPanel; +import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettingsBuilder; + import org.apache.wicket.Component; import org.apache.wicket.markup.html.panel.Panel; @@ -54,7 +56,7 @@ private void initLayout() { try { - ItemHeaderPanel.ItemPanelSettingsBuilder builder = new ItemHeaderPanel.ItemPanelSettingsBuilder().visibilityHandler(w -> ItemVisibility.AUTO).showOnTopLevel(true); + ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder().visibilityHandler(w -> ItemVisibility.AUTO).showOnTopLevel(true); builder.headerVisibility(false); Panel main = getPageBase().initItemPanel(ID_MAIN_PANEL, getObjectWrapper().getTypeName(), diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/certification/DefinitionStagePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/certification/DefinitionStagePanel.java index a24c287b267..c4f87b8b73e 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/certification/DefinitionStagePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/certification/DefinitionStagePanel.java @@ -10,6 +10,7 @@ import java.util.List; import com.evolveum.midpoint.gui.impl.prism.panel.ItemHeaderPanel; +import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettingsBuilder; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.web.component.prism.ItemVisibility; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; @@ -164,7 +165,7 @@ public boolean isEnabled() { try { - ItemHeaderPanel.ItemPanelSettingsBuilder builder = new ItemHeaderPanel.ItemPanelSettingsBuilder().visibilityHandler(iw -> ItemVisibility.AUTO); + ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder().visibilityHandler(iw -> ItemVisibility.AUTO); Panel defaultOwnerRefPanel = pageBase.initItemPanel(ID_DEFAULT_REVIEWER_REF, ObjectReferenceType.COMPLEX_TYPE, new PropertyModel<>(getModel(), StageDefinitionDto.F_REVIEWER_DTO + "." + AccessCertificationReviewerDto.F_DEFAULT_REVIEWERS), builder.build()); add(defaultOwnerRefPanel); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskBasicTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskBasicTabPanel.java index 431bf971cb5..4189c04d518 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskBasicTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskBasicTabPanel.java @@ -10,6 +10,8 @@ import com.evolveum.midpoint.gui.api.prism.wrapper.*; import com.evolveum.midpoint.gui.impl.prism.panel.ItemHeaderPanel; +import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettings; +import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettingsBuilder; import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismContainerValueWrapper; import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismPropertyWrapper; import com.evolveum.midpoint.web.component.prism.ValueStatus; @@ -65,7 +67,7 @@ protected void onInitialize() { } private void initLayout() { - ItemHeaderPanel.ItemPanelSettings settings = new ItemHeaderPanel.ItemPanelSettingsBuilder().editabilityHandler(wrapper -> getTask().getHandlerUri() == null).build(); + ItemPanelSettings settings = new ItemPanelSettingsBuilder().editabilityHandler(wrapper -> getTask().getHandlerUri() == null).build(); TaskHandlerSelectorPanel handlerSelectorPanel = new TaskHandlerSelectorPanel(ID_HANDLER, PrismPropertyWrapperModel.fromContainerWrapper(getModel(), TaskType.F_HANDLER_URI), settings) { @Override protected void onUpdatePerformed(AjaxRequestTarget target) { @@ -136,7 +138,7 @@ public boolean isVisible() { ItemVisibilityHandler visibilityHandler = wrapper -> getBasicTabVisibility(wrapper.getPath()); ItemEditabilityHandler editabilityHandler = wrapper -> getBasicTabEditability(wrapper.getPath()); try { - ItemHeaderPanel.ItemPanelSettingsBuilder builder = new ItemHeaderPanel.ItemPanelSettingsBuilder() + ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder() .visibilityHandler(visibilityHandler) .editabilityHandler(editabilityHandler) .mandatoryHandler(getItemMandatoryHandler()) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskHandlerSelectorPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskHandlerSelectorPanel.java index 1dbb5ed902b..b7d4899bf7b 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskHandlerSelectorPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskHandlerSelectorPanel.java @@ -9,6 +9,7 @@ import com.evolveum.midpoint.gui.api.prism.wrapper.ItemEditabilityHandler; import com.evolveum.midpoint.gui.api.prism.wrapper.ItemVisibilityHandler; import com.evolveum.midpoint.gui.impl.prism.panel.ItemHeaderPanel; +import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettings; import com.evolveum.midpoint.gui.impl.prism.panel.PrismPropertyPanel; import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismPropertyValueWrapper; import com.evolveum.midpoint.gui.impl.prism.wrapper.PrismPropertyWrapper; @@ -31,7 +32,7 @@ public class TaskHandlerSelectorPanel extends PrismPropertyPanel { * @param model * @param settings */ - public TaskHandlerSelectorPanel(String id, IModel> model, ItemHeaderPanel.ItemPanelSettings settings) { + public TaskHandlerSelectorPanel(String id, IModel> model, ItemPanelSettings settings) { super(id, model, settings); Label label = new Label(ID_TASK_SPECIFICATION, createStringResource("TaskHandlerSelectorPanel.selector.header")); @@ -40,8 +41,8 @@ public TaskHandlerSelectorPanel(String id, IModel> } @Override - protected Component createValuePanel(ListItem> item, GuiComponentFactory factory, ItemVisibilityHandler visibilityHandler, ItemEditabilityHandler editabilityHandler) { - Component handlerPanel = super.createValuePanel(item, factory, visibilityHandler, editabilityHandler); + protected Component createValuePanel(ListItem> item) { + Component handlerPanel = super.createValuePanel(item); if (handlerPanel.get("form:input") instanceof InputPanel) { ((InputPanel) handlerPanel.get("form:input")).getBaseFormComponent().add(new OnChangeAjaxBehavior() { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskMainPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskMainPanel.java index 2c317e1400c..84e4e342d5b 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskMainPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskMainPanel.java @@ -12,6 +12,8 @@ import com.evolveum.midpoint.gui.impl.prism.panel.ItemHeaderPanel; +import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettingsBuilder; + import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.markup.html.tabs.ITab; import org.apache.wicket.markup.html.WebMarkupContainer; @@ -395,7 +397,7 @@ public boolean isEnabled() { private Panel createContainerPanel(String id, QName typeName, IModel> model, ItemVisibilityHandler visibilityHandler, ItemEditabilityHandler editabilityHandler) { try { - ItemHeaderPanel.ItemPanelSettingsBuilder builder = new ItemHeaderPanel.ItemPanelSettingsBuilder() + ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder() .visibilityHandler(visibilityHandler) .editabilityHandler(editabilityHandler) .showOnTopLevel(true);