package org.nextprot.api.web.xstream; import java.util.ArrayList; import java.util.List; import java.util.Set; import javax.annotation.PostConstruct; import org.nextprot.api.web.xstream.converters.NextprotConverter; import org.reflections.Reflections; import org.springframework.oxm.xstream.XStreamMarshaller; import com.thoughtworks.xstream.converters.Converter; public class NXStreamMarshaller extends XStreamMarshaller { // http://xstream.codehaus.org/converter-tutorial.html public NXStreamMarshaller() { super(); } @PostConstruct public void init() { setAliases(); setConverters(); } private void setAliases() { this.getXStream().alias("entry", org.nextprot.api.core.domain.Entry.class); this.getXStream().alias("isoform", org.nextprot.api.core.domain.Isoform.class); this.getXStream().alias("publication", org.nextprot.api.core.domain.Publication.class); this.getXStream().alias("xref", org.nextprot.api.core.domain.DbXref.class); this.getXStream().alias("target-isoform",org.nextprot.api.core.domain.annotation.AnnotationIsoformSpecificity.class); this.getXStream().alias("annotation",org.nextprot.api.core.domain.annotation.Annotation.class); } private void setConverters() { List<Converter> converters = new ArrayList<Converter>(); Reflections reflections = new Reflections("org.nextprot.api.web.xstream.converters"); Set<Class<? extends Object>> converterClasses = reflections.getTypesAnnotatedWith(NextprotConverter.class); for (Class<?> cl : converterClasses) { try { converters.add((Converter) cl.newInstance()); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } this.setConverters(converters.toArray(new Converter[0])); } }