/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved. * This code is licensed under the GPL 2.0 license, availible at the root * application directory. */ package org.geoserver.rest.format; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.restlet.data.MediaType; import org.restlet.resource.OutputRepresentation; import org.restlet.resource.Representation; /** * A data format which reads/writes objects from/to a stream. * * @author Justin Deoliveira, OpenGEO * */ public abstract class StreamDataFormat extends DataFormat { protected StreamDataFormat(MediaType mediaType) { super(mediaType); } /** * Delegates to {@link #read(InputStream)} passing it representation.getStream() */ @Override public final Object toObject(Representation representation) { try { return read( representation.getStream() ); } catch (IOException e) { throw new RuntimeException( e ); } } /** * Returns an {@link OutputRepresentation} which delegates to {@link #write(Object, OutputStream)}. */ @Override public final Representation toRepresentation(final Object object) { return new OutputRepresentation(getMediaType()) { @Override public void write(OutputStream outputStream) throws IOException { StreamDataFormat.this.write(object, outputStream); } }; } /** * Reads an input stream into an Object. * * @param in The input stream whose content is of the type specified by {@link #getMediaType()}. * * @return The object. * * @throws IOException Any I/O errors that occur reading from the input stream. */ protected abstract Object read( InputStream in ) throws IOException; /** * Writes an object to an output stream. * * @param object The object to write. * @param out The output stream whose content is of the type specified by {@link #getMediaType()}. * * @throws IOException Any I/O errors that occur writing to the stream. */ protected abstract void write( Object object, OutputStream out ) throws IOException; }