package org.geoserver.rest;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.IOException;
import org.geoserver.rest.xstream.CRSConverter;
import org.vfny.geoserver.config.WCSConfig;
import org.vfny.geoserver.config.WFSConfig;
import org.vfny.geoserver.config.WMSConfig;
import org.restlet.data.MediaType;
import org.restlet.data.Status;
import org.restlet.resource.OutputRepresentation;
import org.restlet.resource.Representation;
import com.thoughtworks.xstream.XStream;
import org.geotools.geometry.GeneralEnvelope;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
public class XStreamFormat implements DataFormat {
public Representation makeRepresentation(final Object data) {
return new OutputRepresentation(MediaType.APPLICATION_XML){
public void write(OutputStream outputStream){
XStream xstream = getXStream();
xstream.toXML(data, outputStream);
}
};
}
public Object readRepresentation(Representation representation) {
try{
XStream xstream = getXStream();
ObjectInputStream stream = xstream.createObjectInputStream(representation.getStream());
return stream.readObject();
} catch (Exception e){
throw new RestletException("Couldn't parse input with XStream", Status.SERVER_ERROR_INTERNAL, e);
}
}
protected XStream getXStream(){
XStream xstream = new XStream();
xstream.setMode(XStream.NO_REFERENCES);
xstream.alias("envelope", GeneralEnvelope.class);
xstream.alias("WCS", WCSConfig.class);
xstream.alias("WFS", WFSConfig.class);
xstream.alias("WMS", WMSConfig.class);
xstream.alias("crs", CoordinateReferenceSystem.class);
xstream.aliasField("abstract", WMSConfig.class, "__abstract");
xstream.registerConverter(new CRSConverter());
return xstream;
}
}