Skip to content

Commit

Permalink
fixing value panel creation, added configure method to GuiComponentFa…
Browse files Browse the repository at this point in the history
…ctory to be able to do post panel creation configuration, such as adding behaviors etc.
  • Loading branch information
katkav committed Apr 27, 2020
1 parent c7f707e commit 2f09dec
Show file tree
Hide file tree
Showing 12 changed files with 240 additions and 144 deletions.
Expand Up @@ -7,6 +7,8 @@

package com.evolveum.midpoint.gui.api.factory;

import org.apache.wicket.Component;
import org.apache.wicket.feedback.ComponentFeedbackMessageFilter;
import org.apache.wicket.markup.html.panel.Panel;

import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper;
Expand All @@ -21,6 +23,10 @@ public interface GuiComponentFactory<T extends ItemPanelContext>{

Integer getOrder();

default void configure(T panelCtx, Component component) {
panelCtx.getFeedback().setFilter(new ComponentFeedbackMessageFilter(component));
}

// Panel build(PanelContext panelContext);

}
Expand Up @@ -74,7 +74,7 @@ public interface ItemWrapper<I extends Item, VW extends PrismValueWrapper> exten
boolean isColumn();
void setColumn(boolean column);

<D extends ItemDelta<? extends PrismValue, ?>> Collection<D> getDelta() throws SchemaException;
<D extends ItemDelta<? extends PrismValue, ? extends ItemDefinition>> Collection<D> getDelta() throws SchemaException;

ItemStatus findObjectStatus();

Expand Down
Expand Up @@ -6,27 +6,21 @@
*/
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 java.util.List;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.feedback.ComponentFeedbackMessageFilter;
import org.apache.wicket.Component;
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;
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;

/**
* abstract factory for all InputPanel panels
Expand All @@ -43,7 +37,44 @@ public GuiComponentRegistry getRegistry() {
@Override
public Panel createPanel(PrismPropertyPanelContext<T> panelCtx) {
InputPanel panel = getPanel(panelCtx);
// panel.append(panelCtx.getAjaxEventBehavior());
// panel.append(panelCtx.getVisibleEnableBehavior());
// PrismPropertyWrapper<T> propertyWrapper = panelCtx.unwrapWrapperModel();
// IModel<String> label = LambdaModel.of(propertyWrapper::getDisplayName);
// panel.setComponentLabel(label);
// panel.required(panelCtx.isMandatory());
//

// final List<FormComponent> formComponents = panel.getFormComponents();
// for (FormComponent<T> formComponent : formComponents) {
// PrismPropertyWrapper<T> propertyWrapper = panelCtx.unwrapWrapperModel();
// IModel<String> 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 void configure(PrismPropertyPanelContext<T> panelCtx, Component component) {
if (!(component instanceof InputPanel)) {
return;
}
InputPanel panel = (InputPanel) component;
final List<FormComponent> formComponents = panel.getFormComponents();
for (FormComponent<T> formComponent : formComponents) {
PrismPropertyWrapper<T> propertyWrapper = panelCtx.unwrapWrapperModel();
Expand All @@ -61,11 +92,6 @@ public Panel createPanel(PrismPropertyPanelContext<T> panelCtx) {
}

panel.getValidatableComponent().add(panelCtx.getExpressionValidator());

panelCtx.getFeedback().setFilter(new ComponentFeedbackMessageFilter(panel.getValidatableComponent()));


return panel;
}

@Override
Expand Down
Expand Up @@ -8,23 +8,24 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
<div class="prism-header" wicket:id="header">
<div class="pull-left">
<button wicket:id="expandCollapseButton" wicket:message="title:PrismObjectPanel.expandCollapseContainer"
class="btn btn-box-tool expand-collapse-button" trigger="hover"><i class="fa fa-caret-down"></i></button>
</div>
<div class="labelContainer" wicket:id="labelContainer">
<a class="prism-title" wicket:id="label"/>
<i class="helpTextIcon" wicket:id="help"/>
<form wicket:id="valueForm">
<div class="prism-header" wicket:id="header">
<div class="pull-left">
<button wicket:id="expandCollapseButton" wicket:message="title:PrismObjectPanel.expandCollapseContainer"
class="btn btn-box-tool expand-collapse-button" trigger="hover"><i class="fa fa-caret-down"></i></button>
</div>
<div class="labelContainer" wicket:id="labelContainer">
<a class="prism-title" wicket:id="label"/>
<i class="helpTextIcon" wicket:id="help"/>
</div>
<button wicket:id="showMetadata" wicket:message="title:PrismObjectPanel.showMetadata" class="btn btn-box-tool"><i class="fa fa-asterisk"></i></button>
<button wicket:id="sortProperties" wicket:message="title:PrismObjectPanel.sortProperties" class="btn btn-box-tool"><i class="fa fa-sort-alpha-asc"></i></button>
<button wicket:id="addChildContainer" wicket:message="title:PrismObjectPanel.addChildContainer" class="btn btn-box-tool" trigger="hover"><i class="fa fa-plus-circle"></i></button>
<button wicket:id="removeButton" wicket:message="title:PrismObjectPanel.deleteContainer" class="btn btn-box-tool" trigger="hover"><i class="fa fa-minus-circle"></i></button>

</div>
<button wicket:id="showMetadata" wicket:message="title:PrismObjectPanel.showMetadata" class="btn btn-box-tool"><i class="fa fa-asterisk"></i></button>
<button wicket:id="sortProperties" wicket:message="title:PrismObjectPanel.sortProperties" class="btn btn-box-tool"><i class="fa fa-sort-alpha-asc"></i></button>
<button wicket:id="addChildContainer" wicket:message="title:PrismObjectPanel.addChildContainer" class="btn btn-box-tool" trigger="hover"><i class="fa fa-plus-circle"></i></button>
<button wicket:id="removeButton" wicket:message="title:PrismObjectPanel.deleteContainer" class="btn btn-box-tool" trigger="hover"><i class="fa fa-minus-circle"></i></button>
<div wicket:id="valueContainer">

</div>
<div wicket:id="valueContainer">
<form wicket:id="form">
<div wicket:id="input">
<div class="prism-properties">
<div wicket:id="propertiesLabel">
Expand All @@ -39,13 +40,18 @@
</div>
</div>

<div class="prism-containers" wicket:id="containers">
<div class="row prism-property" wicket:id="container"/>
<div wicket:id="containersLabel">
<div class="prism-containers" wicket:id="containers">
<div class="row prism-property" wicket:id="container"/>
</div>
</div>
</div>
</div>
</form>
</div>
<div class="row" style="margin-left: 15px;">
<span wicket:id="feedback" class="text-danger"/>
</div>

</div>
</form>
</wicket:panel>
</html>
Expand Up @@ -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.ItemPanelContext;
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;
Expand Down Expand Up @@ -60,7 +61,7 @@
* @author katka
*
*/
public class PrismContainerValuePanel<C extends Containerable, CVW extends PrismContainerValueWrapper<C>> extends PrismValuePanel<C, PrismContainerValue<C>, CVW>{
public class PrismContainerValuePanel<C extends Containerable, CVW extends PrismContainerValueWrapper<C>> extends PrismValuePanel<C, PrismContainerWrapper<C>, CVW> {

private static final long serialVersionUID = 1L;

Expand All @@ -79,15 +80,14 @@ public class PrismContainerValuePanel<C extends Containerable, CVW extends Prism
private static final String ID_CONTAINERS_LABEL = "containersLabel";
private static final String ID_SHOW_EMPTY_BUTTON = "showEmptyButton";

private ItemPanelSettings settings;

public PrismContainerValuePanel(String id, IModel<CVW> model, ItemPanelSettings settings) {
super(id, model, settings);
}

@Override
protected PrismContainerPanelContext<C> createPanelCtx() {
return new PrismContainerPanelContext<C>(getModelObject().getParent());
protected <PC extends ItemPanelContext> PC createPanelCtx(IModel<PrismContainerWrapper<C>> wrapper) {
return (PC) new PrismContainerPanelContext<C>(wrapper);
}

@Override
Expand Down Expand Up @@ -179,8 +179,8 @@ protected Component createDefaultPanel(String id) {
}

@Override
protected <IW extends ItemWrapper<?, ?>> PrismContainerValue<C> createNewValue(IW itemWrapper) {
return ((PrismContainer)itemWrapper.getItem()).createNewValue();
protected <PV extends PrismValue> PV createNewValue(PrismContainerWrapper<C> itemWrapper) {
return (PV) itemWrapper.getItem().createNewValue();
}

private <IW extends ItemWrapper<?,?>> WebMarkupContainer createNonContainersPanel() {
Expand Down Expand Up @@ -296,36 +296,36 @@ private <IW extends ItemWrapper<?,?>> List<IW> getNonContainerWrappers() {
return (List<IW>) nonContainers;
}

private ItemVisibilityHandler getVisibilityHandler() {
if (settings == null) {
return null;
}

return settings.getVisibilityHandler();
}

private ItemEditabilityHandler getReadabilityHandler() {
if (settings == null) {
return null;
}

return settings.getEditabilityHandler();
}

private ItemMandatoryHandler getMandatoryHandler() {
if (settings == null) {
return null;
}
return settings.getMandatoryHandler();
}

private boolean isShowOnTopLevel() {
if (settings == null) {
return false;
}

return settings.isShowOnTopLevel();
}
// private ItemVisibilityHandler getVisibilityHandler() {
// if (settings == null) {
// return null;
// }
//
// return settings.getVisibilityHandler();
// }
//
// private ItemEditabilityHandler getReadabilityHandler() {
// if (settings == null) {
// return null;
// }
//
// return settings.getEditabilityHandler();
// }
//
// private ItemMandatoryHandler getMandatoryHandler() {
// if (settings == null) {
// return null;
// }
// return settings.getMandatoryHandler();
// }
//
// private boolean isShowOnTopLevel() {
// if (settings == null) {
// return false;
// }
//
// return settings.isShowOnTopLevel();
// }

private <IW extends ItemWrapper<?,?>> void populateNonContainer(ListItem<IW> item) {
item.setOutputMarkupId(true);
Expand All @@ -338,7 +338,7 @@ private <IW extends ItemWrapper<?,?>> void populateNonContainer(ListItem<IW> ite

ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder()
.visibilityHandler(getVisibilityHandler())
.editabilityHandler(getReadabilityHandler())
.editabilityHandler(getEditabilityHandler())
.mandatoryHandler(getMandatoryHandler())
.showOnTopLevel(isShowOnTopLevel());
Panel panel = getPageBase().initItemPanel("property", typeName, item.getModel(), builder.build());
Expand Down Expand Up @@ -371,7 +371,7 @@ private <IW extends ItemWrapper<?,?>> void populateNonContainer(ListItem<IW> ite
private void populateContainer(ListItem<PrismContainerWrapper<?>> container) {
PrismContainerWrapper<?> itemWrapper = container.getModelObject();
try {
Panel panel = getPageBase().initItemPanel("container", itemWrapper.getTypeName(), container.getModel(), settings);
Panel panel = getPageBase().initItemPanel("container", itemWrapper.getTypeName(), container.getModel(), getSettings());
panel.setOutputMarkupId(true);
container.add(panel);
} catch (SchemaException e) {
Expand Down
Expand Up @@ -23,9 +23,9 @@
<!-- </span>-->
<!-- </div>-->
</div>
<div class="row" style="margin-left: 15px;">
<span wicket:id="feedback" class="text-danger"/>
</div>
<!-- <div class="row" style="margin-left: 15px;">-->
<!-- <span wicket:id="feedback" class="text-danger"/>-->
<!-- </div>-->
</div>
</wicket:panel>
</html>
Expand Up @@ -11,30 +11,26 @@
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.gui.impl.prism.wrapper.PrismPropertyWrapper;
import com.evolveum.midpoint.prism.PrismPropertyValue;

import com.evolveum.midpoint.prism.PrismValue;

import org.apache.wicket.Component;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.IModel;

public class PrismPropertyValuePanel<T> extends PrismValuePanel<T, PrismPropertyValue<T>, PrismPropertyValueWrapper<T>> {
public class PrismPropertyValuePanel<T> extends PrismValuePanel<T, PrismPropertyWrapper<T>, PrismPropertyValueWrapper<T>> {

private static final String ID_INPUT = "input";

public PrismPropertyValuePanel(String id, IModel<PrismPropertyValueWrapper<T>> model, ItemPanelSettings settings) {
super(id, model, settings);
}

@Override
protected PrismPropertyPanelContext<T> createPanelCtx() {
PrismPropertyPanelContext<T> panelCtx = new PrismPropertyPanelContext<>(getModelObject().getParent());
// panelCtx.setComponentId(ID_INPUT);
return panelCtx;
}

@Override
protected <IW extends ItemWrapper<?, ?>> PrismPropertyValue<T> createNewValue(IW itemWrapper) {
return getPrismContext().itemFactory().createPropertyValue();
protected <PC extends ItemPanelContext> PC createPanelCtx(IModel<PrismPropertyWrapper<T>> wrapper) {
PrismPropertyPanelContext<T> panelCtx = new PrismPropertyPanelContext<>(wrapper);
return (PC) panelCtx;
}

@Override
Expand All @@ -47,4 +43,9 @@ protected Component createDefaultPanel(String id) {
return noComponent;
}
}

@Override
protected <PV extends PrismValue> PV createNewValue(PrismPropertyWrapper<T> itemWrapper) {
return (PV) getPrismContext().itemFactory().createPropertyValue();
}
}
Expand Up @@ -11,7 +11,7 @@
<div class="col-lg-2 col-md-4 col-xs-12 prism-property-label " wicket:id="header"/>
<div class="col-lg-10 col-md-8 col-xs-12 prism-property-value" wicket:id="values">
<div class="row">
<div wicket:id="value" class="col-xs-10"/>
<div wicket:id="value"/>

<!-- <div wicket:id="buttonContainer" class="col-xs-2">-->
<!-- <span class="btn-group">-->
Expand All @@ -22,9 +22,9 @@
<!-- </span>-->
<!-- </div>-->
</div>
<div class="row">
<span wicket:id="feedback" class="text-danger"/>
</div>
<!-- <div class="row">-->
<!-- <span wicket:id="feedback" class="text-danger"/>-->
<!-- </div>-->
</div>
</wicket:panel>
</html>

0 comments on commit 2f09dec

Please sign in to comment.