package org.vaadin.teemu.clara.inflater.parser;
import java.util.HashMap;
import java.util.Map;
import com.vaadin.shared.ui.MarginInfo;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Component;
/**
* {@link AttributeParser} that parses Vaadin specific types (like
* {@link MarginInfo} for example).
*/
public class VaadinAttributeParser implements AttributeParser {
protected static final Map<String, Alignment> alignmentMap;
static {
alignmentMap = new HashMap<String, Alignment>();
alignmentMap.put("BOTTOM_CENTER", Alignment.BOTTOM_CENTER);
alignmentMap.put("BOTTOM_LEFT", Alignment.BOTTOM_LEFT);
alignmentMap.put("BOTTOM_RIGHT", Alignment.BOTTOM_RIGHT);
alignmentMap.put("MIDDLE_CENTER", Alignment.MIDDLE_CENTER);
alignmentMap.put("MIDDLE_LEFT", Alignment.MIDDLE_LEFT);
alignmentMap.put("MIDDLE_RIGHT", Alignment.MIDDLE_RIGHT);
alignmentMap.put("TOP_CENTER", Alignment.TOP_CENTER);
alignmentMap.put("TOP_LEFT", Alignment.TOP_LEFT);
alignmentMap.put("TOP_RIGHT", Alignment.TOP_RIGHT);
}
@Override
public boolean isSupported(Class<?> valueType) {
return valueType != null
&& (valueType == MarginInfo.class || valueType == Alignment.class);
}
@Override
public Object getValueAs(String value, Class<?> valueType,
Component component) {
if (valueType == MarginInfo.class) {
return parseMarginInfo(value);
} else if (valueType == Alignment.class) {
return parseAlignment(value);
}
return null;
}
private Object parseAlignment(String value) {
return alignmentMap.get(value);
}
protected MarginInfo parseMarginInfo(String margin) {
String[] margins = margin.split(" ");
if (margins.length == 4) {
return new MarginInfo(Boolean.valueOf(margins[0]),
Boolean.valueOf(margins[1]), Boolean.valueOf(margins[2]),
Boolean.valueOf(margins[3]));
} else {
return new MarginInfo(Boolean.valueOf(margin));
}
}
}