teichmann@5861: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5861: * Software engineering by Intevation GmbH teichmann@5861: * teichmann@5861: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5861: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5861: * documentation coming with Dive4Elements River for details. teichmann@5861: */ teichmann@5861: teichmann@5835: package org.dive4elements.river.client.client.ui; ingo@787: ingo@787: import com.google.gwt.core.client.GWT; ingo@787: ingo@791: import com.smartgwt.client.data.DataSource; ingo@791: import com.smartgwt.client.data.DataSourceField; ingo@791: import com.smartgwt.client.types.Alignment; ingo@791: import com.smartgwt.client.types.FieldType; ingo@791: import com.smartgwt.client.types.TitleOrientation; ingo@787: import com.smartgwt.client.widgets.Canvas; ingo@787: import com.smartgwt.client.widgets.Label; ingo@787: import com.smartgwt.client.widgets.form.DynamicForm; ingo@791: import com.smartgwt.client.widgets.form.events.ItemChangedEvent; ingo@791: import com.smartgwt.client.widgets.form.events.ItemChangedHandler; ingo@791: import com.smartgwt.client.widgets.form.validator.Validator; ingo@787: import com.smartgwt.client.widgets.layout.HLayout; ingo@787: teichmann@5835: import org.dive4elements.river.client.client.FLYSConstants; teichmann@5835: import org.dive4elements.river.client.shared.model.Data; teichmann@5835: import org.dive4elements.river.client.shared.model.DataItem; teichmann@5835: import org.dive4elements.river.client.shared.model.DataList; teichmann@5835: import org.dive4elements.river.client.shared.model.DefaultData; teichmann@5835: import org.dive4elements.river.client.shared.model.DefaultDataItem; ingo@791: christian@4184: import java.util.ArrayList; christian@4184: import java.util.List; ingo@787: ingo@787: ingo@787: /** ingo@787: * @author Ingo Weinzierl ingo@787: */ ingo@791: public class TextProvider ingo@791: extends AbstractUIProvider ingo@791: implements ItemChangedHandler ingo@791: { christian@4184: private static final long serialVersionUID = -6868303464989138497L; ingo@787: ingo@791: public static final String FIELD_NAME = "textprovider_inputfield"; ingo@791: public static final int FORM_WIDTH = 400; ingo@791: public static final int TITLE_WIDTH = 75; ingo@791: ingo@791: ingo@791: protected static FLYSConstants MSG = GWT.create(FLYSConstants.class); ingo@787: ingo@787: protected DynamicForm form; ingo@787: ingo@787: ingo@787: @Override ingo@787: public Canvas create(DataList dataList) { ingo@794: Canvas form = createForm(); ingo@794: ingo@794: initDefaultValues(dataList); ingo@794: ingo@794: return form; ingo@787: } ingo@787: ingo@787: ingo@787: protected Canvas createForm() { ingo@787: return createForm(null); ingo@787: } ingo@787: ingo@787: ingo@787: protected Canvas createForm(String title) { ingo@791: form = new DynamicForm(); ingo@791: form.addItemChangedHandler(this); ingo@791: form.setTitlePrefix(""); ingo@791: form.setTitleSuffix(": "); ingo@791: form.setTitleAlign(Alignment.LEFT); ingo@791: form.setTitleOrientation(TitleOrientation.LEFT); ingo@791: form.setTitleWidth(getTitleWidth()); ingo@791: form.setWidth(getFormWidth()); ingo@787: ingo@791: DataSourceField item = createField(); ingo@791: item.setTitle(title); ingo@791: ingo@791: Validator validator = getValidator(); ingo@791: if (validator != null) { ingo@791: item.setValidators(validator); ingo@787: } ingo@787: ingo@791: DataSource source = new DataSource(); ingo@791: source.setFields(item); ingo@787: ingo@791: form.setDataSource(source); ingo@787: ingo@791: return form; ingo@791: } ingo@787: ingo@791: ingo@794: protected void initDefaultValues(DataList dataList) { ingo@794: Data data = dataList.get(0); ingo@794: DataItem item = data.getDefault(); ingo@794: ingo@794: String value = item.getStringValue(); ingo@794: ingo@794: form.setValue(getFieldName(), value); ingo@794: } ingo@794: ingo@794: ingo@791: protected DataSourceField createField() { ingo@791: return new DataSourceField(getFieldName(), getFieldType()); ingo@791: } ingo@791: ingo@791: felix@1296: /** felix@1296: * Get field name. felix@1296: * @return fields name (developer-centric). felix@1296: */ ingo@791: protected String getFieldName() { ingo@791: return FIELD_NAME; ingo@791: } ingo@791: ingo@791: felix@1296: /** felix@1296: * Get field type. felix@1296: * @return fields type. felix@1296: */ ingo@791: protected FieldType getFieldType() { ingo@791: return FieldType.TEXT; ingo@791: } ingo@791: ingo@791: ingo@791: protected Validator getValidator() { ingo@791: return null; ingo@791: } ingo@791: ingo@791: ingo@791: protected int getFormWidth() { ingo@791: return FORM_WIDTH; ingo@791: } ingo@791: ingo@791: ingo@791: protected int getTitleWidth() { ingo@791: return TITLE_WIDTH; ingo@791: } ingo@791: ingo@791: felix@1296: /** @return null. */ ingo@791: protected String getDataName() { ingo@791: return null; ingo@791: } ingo@791: ingo@791: ingo@791: protected String getValueAsString() { ingo@791: return (String) form.getValue(getFieldName()); ingo@787: } ingo@787: ingo@787: ingo@787: @Override ingo@787: public Canvas createOld(DataList dataList) { ingo@787: Data data = dataList.get(0); ingo@787: DataItem[] items = data.getItems(); ingo@787: ingo@787: HLayout layout = new HLayout(); ingo@787: Label label = new Label(dataList.getLabel()); ingo@787: Label value = new Label(items[0].getLabel()); ingo@787: ingo@787: layout.setHeight(35); ingo@787: layout.setWidth(400); ingo@787: label.setWidth(200); ingo@787: ingo@787: layout.addMember(label); ingo@787: layout.addMember(value); ingo@787: layout.addMember(getBackButton(dataList.getState())); ingo@787: ingo@787: return layout; ingo@787: } ingo@787: ingo@787: ingo@787: @Override ingo@791: public List validate() { ingo@791: List errors = new ArrayList(); ingo@791: ingo@791: if (!form.validate()) { ingo@791: errors.add(MSG.wrongFormat()); ingo@791: } ingo@791: ingo@791: return errors; ingo@791: } ingo@791: ingo@791: ingo@791: @Override ingo@787: protected Data[] getData() { ingo@791: String value = getValueAsString(); ingo@791: String name = getDataName(); ingo@791: ingo@791: DataItem item = new DefaultDataItem(name, name, value); ingo@791: return new Data[] { new DefaultData( ingo@791: name, null, null, new DataItem[] { item }) }; ingo@791: } ingo@791: ingo@791: ingo@791: @Override ingo@791: public void onItemChanged(ItemChangedEvent event) { ingo@791: form.validate(); ingo@787: } ingo@787: } ingo@787: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :