package org.archstudio.bna.logics.hints.coders;
import org.archstudio.bna.logics.hints.EncodedValue;
import org.archstudio.bna.logics.hints.IEncodedValue;
import org.archstudio.bna.logics.hints.IPropertyCoder;
import org.archstudio.bna.logics.hints.PropertyDecodeException;
public class EnumPropertyCoder implements IPropertyCoder {
@Override
public IEncodedValue encode(IPropertyCoder masterCoder, Object value) {
Class<?> c = value.getClass();
if (c.isEnum()) {
return new EncodedValue("enum:" + c.getName(), ((Enum<?>) value).name());
}
return null;
}
@Override
@SuppressWarnings("unchecked")
public Object decode(IPropertyCoder masterCoder, IEncodedValue encodedValue) throws PropertyDecodeException {
try {
String type = encodedValue.getType();
String data = encodedValue.getData();
if (type.startsWith("enum:")) {
@SuppressWarnings("rawtypes")
Class<Enum> c = (Class<Enum>) Class.forName(type.substring(5));
return Enum.valueOf(c, data);
}
return null;
}
catch (Throwable e) {
throw new PropertyDecodeException(e);
}
}
}