/*
* Copyright 2011 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jbpm.formbuilder.client.form.items;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jbpm.formapi.client.FormBuilderException;
import org.jbpm.formapi.client.effect.FBFormEffect;
import org.jbpm.formapi.client.form.FBFormItem;
import org.jbpm.formapi.client.form.I18NFormItem;
import org.jbpm.formapi.client.form.OptionsFormItem;
import org.jbpm.formapi.common.panels.ListWidget;
import org.jbpm.formapi.shared.api.FormItemRepresentation;
import org.jbpm.formapi.shared.api.items.SummaryRepresentation;
import org.jbpm.formbuilder.client.FormBuilderGlobals;
import org.jbpm.formbuilder.client.form.I18NUtils;
import org.jbpm.formbuilder.client.messages.I18NConstants;
import com.google.gwt.user.client.ui.Widget;
import com.gwtent.reflection.client.Reflectable;
@Reflectable
public class SummaryFormItem extends OptionsFormItem implements I18NFormItem {
private final I18NConstants i18n = FormBuilderGlobals.getInstance().getI18n();
private final ListWidget listWidget = new ListWidget();
private final I18NUtils utils = new I18NUtils();
private int scrollTop;
private int scrollLeft;
private String id;
private String dir;
private String cssClassName;
public SummaryFormItem() {
this(new ArrayList<FBFormEffect>());
}
public SummaryFormItem(List<FBFormEffect> formEffects) {
super(formEffects);
add(listWidget);
}
@Override
public Map<String, Object> getFormItemPropertiesMap() {
Map<String, Object> formItemPropertiesMap = new HashMap<String, Object>();
formItemPropertiesMap.put("scrollTop", String.valueOf(scrollTop));
formItemPropertiesMap.put("scrollLeft", String.valueOf(scrollLeft));
formItemPropertiesMap.put("dir", dir);
formItemPropertiesMap.put("id", id);
formItemPropertiesMap.put("width", getWidth());
formItemPropertiesMap.put("height", getHeight());
formItemPropertiesMap.put("cssClassName", cssClassName);
return formItemPropertiesMap;
}
@Override
public void saveValues(Map<String, Object> propertiesMap) {
this.id = extractString(propertiesMap.get("id"));
this.setWidth(extractString(propertiesMap.get("width")));
this.setHeight(extractString(propertiesMap.get("height")));
this.cssClassName = extractString(propertiesMap.get("cssClassName"));
this.dir = extractString(propertiesMap.get("dir"));
this.scrollTop = extractInt(propertiesMap.get("scrollTop"));
this.scrollLeft = extractInt(propertiesMap.get("scrollLeft"));
populate(listWidget);
}
private void populate(ListWidget list) {
if (this.getWidth() != null) {
list.setWidth(this.getWidth());
}
if (this.getHeight() != null) {
list.setHeight(this.getHeight());
}
if (this.cssClassName != null) {
list.setStyleName(this.cssClassName);
}
if (this.id != null) {
list.setId(this.id);
}
if (this.dir != null) {
list.setDir(this.dir);
}
if (this.scrollTop >= 0) {
list.setScrollTop(this.scrollTop);
}
if (this.scrollLeft >= 0) {
list.setScrollLeft(this.scrollLeft);
}
}
@Override
public FormItemRepresentation getRepresentation() {
SummaryRepresentation rep = super.getRepresentation(new SummaryRepresentation());
rep.setCssClassName(this.cssClassName);
rep.setDir(this.dir);
rep.setId(this.id);
rep.setScrollLeft(this.scrollLeft);
rep.setScrollTop(this.scrollTop);
rep.setI18n(this.getI18nMap());
rep.setItems(this.listWidget.getItems());
return rep;
}
@Override
public void populate(FormItemRepresentation rep) throws FormBuilderException {
if (!(rep instanceof SummaryRepresentation)) {
throw new FormBuilderException(i18n.RepNotOfType(rep.getClass().getName(), "SummaryRepresentation"));
}
super.populate(rep);
SummaryRepresentation srep = (SummaryRepresentation) rep;
this.cssClassName = srep.getCssClassName();
this.dir = srep.getDir();
if (srep.getWidth() != null && !"".equals(srep.getWidth())) {
setWidth(srep.getWidth());
}
if (srep.getHeight() != null && !"".equals(srep.getHeight())) {
setHeight(srep.getHeight());
}
this.utils.saveI18nMap(srep.getI18n());
this.id = srep.getId();
this.scrollLeft = srep.getScrollLeft();
this.scrollTop = srep.getScrollTop();
populate(this.listWidget);
}
@Override
public Widget cloneDisplay(Map<String, Object> formData) {
ListWidget lw = new ListWidget();
populate(lw);
Object value = getInputValue(formData);
if (value != null) {
if (value.getClass().isArray()) {
Object[] arr = (Object[]) value;
for (Object obj : arr) {
lw.addItem(String.valueOf(obj));
}
} else if (value instanceof Collection) {
Collection<?> coll = (Collection<?>) value;
for (Object obj : coll) {
lw.addItem(String.valueOf(obj));
}
} else if (value instanceof Map) {
Map<?,?> map = (Map<?,?>) value;
for (Object obj : map.values()) {
lw.addItem(String.valueOf(obj));
}
}
} else {
String locale = (String) formData.get(FormBuilderGlobals.BASE_LOCALE);
if (locale == null) {
for (String item : this.listWidget.getItems()) {
lw.addItem(item);
}
} else {
String i18nText = getI18n(locale);
if (i18nText != null && !"".equals(i18nText)) {
String[] items = i18nText.split(","); //TODO specify i18n items should be comma separated
if (items != null) {
for (String item : items) {
lw.addItem(item);
}
}
}
}
}
super.populateActions(lw.getElement());
return lw;
}
@Override
public FBFormItem cloneItem() {
SummaryFormItem clone = super.cloneItem(new SummaryFormItem());
clone.cssClassName = this.cssClassName;
clone.id = this.id;
clone.dir = this.dir;
clone.scrollLeft = this.scrollLeft;
clone.scrollTop = this.scrollTop;
clone.setHeight(this.getHeight());
clone.setWidth(this.getWidth());
clone.populate(clone.listWidget);
clone.saveI18nMap(getI18nMap());
clone.setFormat(getFormat());
return clone;
}
@Override
public boolean containsLocale(String localeName) {
return utils.containsLocale(localeName);
}
@Override
public Format getFormat() {
return utils.getFormat();
}
@Override
public String getI18n(String key) {
return utils.getI18n(key);
}
@Override
public Map<String, String> getI18nMap() {
return utils.getI18nMap();
}
@Override
public void saveI18nMap(Map<String, String> i18nMap) {
utils.saveI18nMap(i18nMap);
}
@Override
public void setFormat(Format format) {
utils.setFormat(format);
}
@Override
public void addItem(String label, String value) {
this.listWidget.addItem(label);
}
@Override
public void deleteItem(String label) {
this.listWidget.removeItem(label);
}
@Override
public Map<String, String> getItems() {
Map<String, String> items = new HashMap<String, String>();
for (String label : this.listWidget.getItems()) {
items.put(label, label);
}
return items;
}
}