Skip to content

Commit

Permalink
Improving remaining multi value components on RW - prevents saving em…
Browse files Browse the repository at this point in the history
…pty objects.
  • Loading branch information
Erik Suta committed Jan 28, 2015
1 parent 8ef81dd commit cdd9f36
Show file tree
Hide file tree
Showing 11 changed files with 196 additions and 83 deletions.
Expand Up @@ -17,6 +17,12 @@
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
<wicket:panel>

<dd wicket:id="placeholderContainer" class="cap-dl-multivalue">
<a wicket:id="placeholderAdd" class="btn btn-sm btn-success" title="Add">
<i class="fa fa-plus"/>
</a>
</dd>

<wicket:container wicket:id="repeater">
<dd class="cap-dl-multivalue">
<div class="input-group">
Expand Down
Expand Up @@ -17,6 +17,7 @@
package com.evolveum.midpoint.web.component.form.multivalue;

import com.evolveum.midpoint.web.component.util.SimplePanel;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
Expand All @@ -27,6 +28,7 @@
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.util.string.Strings;
Expand All @@ -40,6 +42,8 @@
* */
public class MultiValueAutoCompleteTextPanel<T extends Serializable> extends SimplePanel<List<T>>{

private static final String ID_PLACEHOLDER_CONTAINER = "placeholderContainer";
private static final String ID_PLACEHOLDER_ADD = "placeholderAdd";
private static final String ID_REPEATER = "repeater";
private static final String ID_TEXT = "input";
private static final String ID_BUTTON_GROUP = "buttonGroup";
Expand All @@ -49,32 +53,49 @@ public class MultiValueAutoCompleteTextPanel<T extends Serializable> extends Sim
private static final String CSS_DISABLED = " disabled";
private static final Integer AUTO_COMPLETE_LIST_SIZE = 10;

public MultiValueAutoCompleteTextPanel(String id, IModel<List<T>> model, boolean inputEnabled, boolean prepareModel){
public MultiValueAutoCompleteTextPanel(String id, IModel<List<T>> model, boolean inputEnabled){
super(id, model);

setOutputMarkupId(true);

initLayout(inputEnabled, prepareModel);
initLayout(inputEnabled);
}

private IModel<List<T>> prepareModel(boolean prepareModel){
if(prepareModel){
if(getModel().getObject() == null){
getModel().setObject(new ArrayList<>(Arrays.asList(createNewEmptyItem())));
} else if(getModel().getObject().isEmpty()){
getModel().getObject().add(createNewEmptyItem());
private void initLayout(final boolean inputEnabled){
WebMarkupContainer placeholderContainer = new WebMarkupContainer(ID_PLACEHOLDER_CONTAINER);
placeholderContainer.setOutputMarkupPlaceholderTag(true);
placeholderContainer.setOutputMarkupPlaceholderTag(true);
placeholderContainer.add(new VisibleEnableBehaviour(){

@Override
public boolean isVisible() {
return getModel().getObject().isEmpty();
}
}
return getModel();
}
});
add(placeholderContainer);

protected T createNewEmptyItem(){
return null;
}
AjaxLink placeholderAdd = new AjaxLink(ID_PLACEHOLDER_ADD) {

private void initLayout(final boolean inputEnabled, boolean prepareModel){
@Override
public void onClick(AjaxRequestTarget target) {
addValuePerformed(target);
}
};
placeholderAdd.add(new AttributeAppender("class", new AbstractReadOnlyModel<String>() {

ListView repeater = new ListView<T>(ID_REPEATER, prepareModel(prepareModel)){
@Override
public String getObject() {
if (buttonsDisabled()) {
return " " + CSS_DISABLED;
}

return "";
}
}));
placeholderAdd.setOutputMarkupId(true);
placeholderAdd.setOutputMarkupPlaceholderTag(true);
placeholderContainer.add(placeholderAdd);

ListView repeater = new ListView<T>(ID_REPEATER, getModel()){

@Override
protected void populateItem(final ListItem<T> item) {
Expand Down Expand Up @@ -108,9 +129,22 @@ protected void onUpdate(AjaxRequestTarget target) {}
initButtons(buttonGroup, item);
}
};
repeater.setOutputMarkupId(true);
repeater.setOutputMarkupPlaceholderTag(true);
repeater.add(new VisibleEnableBehaviour(){

@Override
public boolean isVisible() {
return !getModel().getObject().isEmpty();
}
});
add(repeater);
}

protected T createNewEmptyItem(){
return null;
}

private Iterator<String> createAutoCompleteObjectList(String input) {
List<T> list = createObjectList();
List<String> choices = new ArrayList<>(AUTO_COMPLETE_LIST_SIZE);
Expand Down Expand Up @@ -179,12 +213,11 @@ protected String getPlusClassModifier(ListItem<T> item){
}

protected String getMinusClassModifier(){
int size = getModelObject().size();
if (size > 1) {
return "";
if(buttonsDisabled()){
return CSS_DISABLED;
}

return CSS_DISABLED;
return "";
}

/**
Expand Down
Expand Up @@ -17,6 +17,12 @@
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
<wicket:panel>

<dd wicket:id="placeholderContainer" class="cap-dl-multivalue">
<a wicket:id="placeholderAdd" class="btn btn-sm btn-success" title="Add">
<i class="fa fa-plus"/>
</a>
</dd>

<wicket:container wicket:id="repeater">
<dd class="cap-dl-multivalue">
<div class="input-group">
Expand Down
Expand Up @@ -17,20 +17,17 @@
package com.evolveum.midpoint.web.component.form.multivalue;

import com.evolveum.midpoint.web.component.util.SimplePanel;
import org.apache.wicket.AttributeModifier;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteTextField;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.IChoiceRenderer;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.util.string.Strings;

import java.io.Serializable;
import java.util.*;
Expand All @@ -40,6 +37,8 @@
* */
public class MultiValueDropDownPanel<T extends Serializable> extends SimplePanel<List<T>>{

private static final String ID_PLACEHOLDER_CONTAINER = "placeholderContainer";
private static final String ID_PLACEHOLDER_ADD = "placeholderAdd";
private static final String ID_REPEATER = "repeater";
private static final String ID_INPUT = "input";
private static final String ID_BUTTON_GROUP = "buttonGroup";
Expand All @@ -48,30 +47,49 @@ public class MultiValueDropDownPanel<T extends Serializable> extends SimplePanel

private static final String CSS_DISABLED = " disabled";

public MultiValueDropDownPanel(String id, IModel<List<T>> model, boolean prepareModel, boolean nullValid){
public MultiValueDropDownPanel(String id, IModel<List<T>> model, boolean nullValid){
super(id, model);
setOutputMarkupId(true);

initLayout(prepareModel, nullValid);
initLayout(nullValid);
}

private IModel<List<T>> prepareModel(boolean prepareModel){
if(prepareModel){
if(getModel().getObject() == null){
getModel().setObject(new ArrayList<>(Arrays.asList(createNewEmptyItem())));
} else if(getModel().getObject().isEmpty()){
getModel().getObject().add(createNewEmptyItem());
private void initLayout(final boolean nullValid){
WebMarkupContainer placeholderContainer = new WebMarkupContainer(ID_PLACEHOLDER_CONTAINER);
placeholderContainer.setOutputMarkupPlaceholderTag(true);
placeholderContainer.setOutputMarkupPlaceholderTag(true);
placeholderContainer.add(new VisibleEnableBehaviour(){

@Override
public boolean isVisible() {
return getModel().getObject().isEmpty();
}
}
return getModel();
}
});
add(placeholderContainer);

protected T createNewEmptyItem(){
return null;
}
AjaxLink placeholderAdd = new AjaxLink(ID_PLACEHOLDER_ADD) {

private void initLayout(final boolean prepareModel, final boolean nullValid){
ListView repeater = new ListView<T>(ID_REPEATER, prepareModel(prepareModel)){
@Override
public void onClick(AjaxRequestTarget target) {
addValuePerformed(target);
}
};
placeholderAdd.add(new AttributeAppender("class", new AbstractReadOnlyModel<String>() {

@Override
public String getObject() {
if (buttonsDisabled()) {
return " " + CSS_DISABLED;
}

return "";
}
}));
placeholderAdd.setOutputMarkupId(true);
placeholderAdd.setOutputMarkupPlaceholderTag(true);
placeholderContainer.add(placeholderAdd);

ListView repeater = new ListView<T>(ID_REPEATER, getModel()){

@Override
protected void populateItem(final ListItem<T> item) {
Expand All @@ -86,6 +104,15 @@ protected void populateItem(final ListItem<T> item) {
initButtons(buttonGroup, item);
}
};
repeater.setOutputMarkupId(true);
repeater.setOutputMarkupPlaceholderTag(true);
repeater.add(new VisibleEnableBehaviour(){

@Override
public boolean isVisible() {
return !getModel().getObject().isEmpty();
}
});
add(repeater);
}

Expand Down Expand Up @@ -130,6 +157,10 @@ public void onClick(AjaxRequestTarget target) {
buttonGroup.add(remove);
}

protected T createNewEmptyItem(){
return null;
}

protected String getPlusClassModifier(ListItem<T> item){
if(buttonsDisabled()){
return CSS_DISABLED;
Expand All @@ -147,12 +178,11 @@ protected String getPlusClassModifier(ListItem<T> item){
}

protected String getMinusClassModifier(){
int size = getModelObject().size();
if (size > 1) {
return "";
if(buttonsDisabled()){
return CSS_DISABLED;
}

return CSS_DISABLED;
return "";
}

protected void addValuePerformed(AjaxRequestTarget target){
Expand Down
Expand Up @@ -17,6 +17,12 @@
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
<wicket:panel>

<dd wicket:id="placeholderContainer" class="cap-dl-multivalue">
<a wicket:id="placeholderAdd" class="btn btn-sm btn-success" title="Add">
<i class="fa fa-plus"/>
</a>
</dd>

<wicket:container wicket:id="repeater">
<dd class="cap-dl-multivalue">
<div class="input-group">
Expand Down

0 comments on commit cdd9f36

Please sign in to comment.