package com.clearlyspam23.GLE.template.serializer; import java.util.Map; import com.clearlyspam23.GLE.Nameable; import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.converters.UnmarshallingContext; import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; public class NameableConverter<T extends Nameable> implements Converter { private Map<String, T> map; private Class<T> cls; public NameableConverter(Class<T> cls, Map<String, T> nameMap){ this.cls = cls; map = nameMap; } @SuppressWarnings("rawtypes") @Override public boolean canConvert(Class arg0) { return cls.isAssignableFrom(arg0); } @SuppressWarnings("unchecked") @Override public void marshal(Object arg0, HierarchicalStreamWriter arg1, MarshallingContext arg2) { arg1.setValue(((T)arg0).getName()); } @Override public Object unmarshal(HierarchicalStreamReader arg0, UnmarshallingContext arg1) { return map.get(arg0.getValue()); } }