package org.milyn.edisax;
import org.milyn.config.Configurable;
import org.milyn.javabean.DataDecodeException;
import org.milyn.javabean.DataDecoder;
import java.util.List;
import java.util.Map;
import java.util.Date;
import java.util.Properties;
public enum EDITypeEnum {
String("String", String.class),
Numeric("Double", String.class),
Decimal("Double", Double.class),
Date("Date", Date.class),
Time("Date", Date.class),
Binary("Binary", String.class),
Custom(null, null);
public final static String CUSTOM_NAME = "Custom";
private String typeAlias;
private Class javaClass;
EDITypeEnum(String typeAlias, Class javaClass) {
this.typeAlias = typeAlias;
this.javaClass = javaClass;
}
public String getTypeAlias() {
return typeAlias;
}
public Class getJavaClass() {
return javaClass;
}
public boolean validateType(String value, List<Map.Entry<String,String>> parameters) {
DataDecoder decoder;
// Get DataDecoder.
if (parameters != null && parameters.size() > 0 && this.name().equals("Custom")) {
decoder = DataDecoder.Factory.create(parameters.get(0).getValue());
} else {
decoder = DataDecoder.Factory.create(typeAlias);
}
// If DataDecoder implements Configurable set format.
if (decoder instanceof Configurable && parameters != null) {
Properties properties = getProperties(parameters);
Configurable configurable = (Configurable)decoder;
configurable.setConfiguration(properties);
}
try {
decoder.decode(value);
} catch (DataDecodeException e) {
return false;
}
return true;
}
private Properties getProperties(List<Map.Entry<String, String>> parameters) {
Properties properties = new Properties();
for (Map.Entry<String,String> entry : parameters) {
properties.setProperty(entry.getKey(), entry.getValue());
}
return properties;
}
}