/*
* This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
*
* Copyright 2008-2015 Geosparc nv, http://www.geosparc.com/, Belgium.
*
* The program is available in open source according to the GNU Affero
* General Public License. All contributions in this program are covered
* by the Geomajas Contributors License Agreement. For full licensing
* details, see LICENSE.txt in the project root.
*/
package org.geomajas.widget.layer.client.view.wizard;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.FormItem;
import com.smartgwt.client.widgets.form.fields.PasswordItem;
import com.smartgwt.client.widgets.form.fields.TextItem;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Kristof Heirwegh
*/
public class KeyValueForm extends DynamicForm {
public static final String ITEMTYPE_TEXT = "TextItem";
public static final String ITEMTYPE_PASSWORD = "PasswordItem";
private static final String DEFAULT_WIDTH = "*";
private List<FormItem> fields = new ArrayList<FormItem>();
private Map<String, String> values;
public KeyValueForm() {
setWidth100();
setNumCols(1);
setWrapItemTitles(false);
//setColWidths("250", "*");
}
public void updateFields(List<FormElement> items) {
if (items == null || items.size() == 0) {
return;
}
fields.clear();
for (FormElement el : items) {
FormItem fi = null;
if (el.getItemType() == null || ITEMTYPE_TEXT.equals(el.getItemType())) {
fi = new TextItem();
} else if (ITEMTYPE_PASSWORD.equals(el.getItemType())) {
fi = new PasswordItem();
} else {
SC.logWarn("Unsupported item type: " + el.getItemType());
fi = new PasswordItem();
}
fi.setName(el.getName());
fi.setTitle(el.getTitle());
fi.setTooltip(el.getTooltip());
if (el.getWidth() > 0) {
fi.setWidth(el.getWidth());
} else {
fi.setWidth(DEFAULT_WIDTH);
}
fi.setRequired(el.isRequired());
if (el.getDefaultValue() != null) {
fi.setDefaultValue(el.getDefaultValue());
}
fields.add(fi);
}
setFields(fields.toArray(new FormItem[fields.size()]));
markForRedraw();
}
public void setData(Map<String, String> values) {
this.values = values;
for (FormItem fi : fields) {
fi.setValue(values.get(fi.getName()));
}
}
public Map<String, String> getData(boolean excludeEmptyValues) {
if (values == null) {
values = new HashMap<String, String>();
}
for (FormItem fi : fields) {
String value = (fi.getValue() == null ? null : fi.getValue().toString());
if (excludeEmptyValues && (value == null || "".equals(value))) {
values.remove(fi.getName());
} else {
values.put(fi.getName(), value);
}
}
return values;
}
public Map<String, String> getData() {
return getData(false);
}
}