/** * */ 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.Parameter; import org.gcube.portlets.user.dataminermanager.client.bean.parameters.TabularListParameter; import org.gcube.portlets.user.dataminermanager.client.bean.parameters.TabularParameter; import com.allen_sauer.gwt.log.client.Log; 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.VerticalLayoutContainer; import com.sencha.gxt.widget.core.client.event.SelectEvent; /** * * @author Giancarlo Panichi * email: g.panichi@isti.cnr.it * */ public class TabularListFld extends AbstractFld { private List items = new ArrayList(); private VerticalLayoutContainer vp; private TabularListParameter tabularListParameter; /** * @param parameter */ public TabularListFld(Parameter parameter) { super(parameter); Log.debug("TabularListField"); this.tabularListParameter = (TabularListParameter) parameter; vp = new VerticalLayoutContainer(); addField(null); } private void addField(Item upperItem) { TabularParameter tabPar = new TabularParameter( tabularListParameter.getName(), tabularListParameter.getDescription(),null, tabularListParameter.getTemplates()); if (upperItem == null) { Item item = new Item(tabPar, 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(tabPar, false); items.add(pos + 1, item); vp.insert(item, pos + 1); } vp.forceLayout(); } /** * @param item */ protected void removeField(Item item) { items.remove(item); vp.remove(item); vp.forceLayout(); if (items.size() == 1) { items.get(0).hideCancelButton(); } } /** * */ @Override public String getValue() { String separator = tabularListParameter.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 vp; } /** * */ @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 TabularFld field; private TextButton addButton; private TextButton removeButton; /** * * @param tabularParameter * @param first */ public Item(TabularParameter tabularParameter, boolean first) { super(); this.field = new TabularFld(tabularParameter); 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 TabularFld getField() { return field; } } }