package com.swingsane.preferences; import com.swingsane.preferences.model.ApplicationPreferences; import com.swingsane.preferences.model.BooleanOption; import com.swingsane.preferences.model.ButtonOption; import com.swingsane.preferences.model.GroupOption; import com.swingsane.preferences.model.IntegerOption; import com.swingsane.preferences.model.Login; import com.swingsane.preferences.model.OptionsOrderValuePair; import com.swingsane.preferences.model.SaneServiceIdentity; import com.swingsane.preferences.model.Scanner; import com.swingsane.preferences.model.StringOption; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; import com.thoughtworks.xstream.mapper.MapperWrapper; public final class XStreamUtility { public static XStream getXStream() { final XStream xstream = loadXStream(); processAnnotations(xstream); return xstream; } private static XStream loadXStream() { XStream xstream = new XStream(new DomDriver("UTF-8")) { @Override protected MapperWrapper wrapMapper(MapperWrapper next) { return new MapperWrapper(next) { @Override public boolean shouldSerializeMember(@SuppressWarnings("rawtypes") Class definedIn, String fieldName) { if (definedIn == Object.class) { return false; } return super.shouldSerializeMember(definedIn, fieldName); } }; } }; xstream.setMode(XStream.NO_REFERENCES); return xstream; } private static void processAnnotations(XStream xstream) { xstream.processAnnotations(ApplicationPreferences.class); xstream.processAnnotations(Login.class); xstream.processAnnotations(SaneServiceIdentity.class); xstream.processAnnotations(Scanner.class); xstream.processAnnotations(BooleanOption.class); xstream.processAnnotations(IntegerOption.class); xstream.processAnnotations(StringOption.class); xstream.processAnnotations(ButtonOption.class); xstream.processAnnotations(GroupOption.class); xstream.processAnnotations(OptionsOrderValuePair.class); } private XStreamUtility() { } }