/** * */ package org.gcube.portlets.user.dataminermanager.client.form; import java.util.ArrayList; import java.util.List; import org.gcube.portlets.user.dataminermanager.client.DataMinerManager; import org.gcube.portlets.user.dataminermanager.client.bean.parameters.ListParameter; import org.gcube.portlets.user.dataminermanager.client.bean.parameters.ObjectParameter; import org.gcube.portlets.user.dataminermanager.client.bean.parameters.Parameter; import com.google.gwt.user.client.ui.Widget; import com.sencha.gxt.widget.core.client.button.TextButton; import com.sencha.gxt.widget.core.client.container.HorizontalLayoutContainer; import com.sencha.gxt.widget.core.client.container.SimpleContainer; import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; import com.sencha.gxt.widget.core.client.event.SelectEvent; /** * @author ceras * */ public class ListIntFld extends AbstractFld { private List items; private SimpleContainer simpleContainer; private VerticalLayoutContainer vp; private ListParameter listParameter; /** * @param parameter */ public ListIntFld(Parameter parameter) { super(parameter); this.listParameter = (ListParameter) parameter; simpleContainer=new SimpleContainer(); vp = new VerticalLayoutContainer(); simpleContainer.add(vp); items = new ArrayList(); addField(null); } private void addField(Item upperItem) { ObjectParameter objPar = new ObjectParameter(listParameter.getName(), listParameter.getDescription(), listParameter.getType(), null); if (upperItem == null) { Item item = new Item(objPar, true); items.add(item); vp.add(item); } else { // search the position of the upper item int pos = 0; for (int i = 0; i < items.size(); i++) if (items.get(i) == upperItem) { pos = i; break; } upperItem.showCancelButton(); Item item = new Item(objPar, false); items.add(pos + 1, item); vp.insert(item, pos + 1); } simpleContainer.forceLayout(); } /** * @param item */ private void removeField(Item item) { items.remove(item); vp.remove(item); if (items.size() == 1) { items.get(0).hideCancelButton(); } simpleContainer.forceLayout(); } /** * */ @Override public String getValue() { String separator = listParameter.getSeparator(); String value = ""; boolean first = true; for (Item item : items) { String itemValue = item.getValue(); if (itemValue != null && !itemValue.contentEquals("")) { value += (first ? "" : separator) + itemValue; first = false; } } return value; } /** * */ @Override public Widget getWidget() { return simpleContainer; } /** * */ @Override public boolean isValid() { boolean valid = false; for (Item item : items) if (item.getField().getValue() != null) { valid = true; break; } return valid; } private class Item extends HorizontalLayoutContainer { private IntFld field; private TextButton addButton; private TextButton removeButton; /** * @param objPar */ public Item(ObjectParameter objectParameter, boolean first) { super(); this.field = new IntFld(objectParameter); this.add(field.getWidget()); addButton = new TextButton(""); addButton.setIcon(DataMinerManager.resources.add()); addButton.addSelectHandler(new SelectEvent.SelectHandler() { @Override public void onSelect(SelectEvent event) { addField(Item.this); } }); removeButton = new TextButton(""); removeButton.setIcon(DataMinerManager.resources.cancel()); removeButton.addSelectHandler(new SelectEvent.SelectHandler() { @Override public void onSelect(SelectEvent event) { removeField(Item.this); } }); removeButton.setVisible(!first); this.add(addButton); this.add(removeButton); } public void showCancelButton() { removeButton.setVisible(true); } public void hideCancelButton() { removeButton.setVisible(false); } public String getValue() { return field.getValue(); } public IntFld getField() { return field; } } }