/* Copyright (c) 2001 - 2009 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.catalog.rest; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.xml.transform.TransformerException; import org.geoserver.rest.format.StreamDataFormat; import org.geotools.factory.CommonFactoryFinder; import org.geotools.styling.NamedLayer; import org.geotools.styling.SLDParser; import org.geotools.styling.SLDTransformer; import org.geotools.styling.Style; import org.geotools.styling.StyleFactory; import org.geotools.styling.StyledLayer; import org.geotools.styling.StyledLayerDescriptor; public class SLDFormat extends StreamDataFormat { boolean prettyPrint; public SLDFormat() { this(false); } public SLDFormat(boolean prettyPrint) { super(StyleResource.MEDIATYPE_SLD); this.prettyPrint = prettyPrint; } @Override protected void write(Object object, OutputStream out) throws IOException { Style style = (Style) object; //wrap in a StyledLayerDescriptor StyleFactory sf = CommonFactoryFinder.getStyleFactory(null); NamedLayer nl = sf.createNamedLayer(); nl.setName( style.getName() ); nl.addStyle( style ); StyledLayerDescriptor sld = sf.createStyledLayerDescriptor(); sld.setStyledLayers( new StyledLayer[]{ nl }); SLDTransformer writer = new SLDTransformer(); if (prettyPrint) { writer.setIndentation(2); } try { writer.transform( sld, out ); } catch (TransformerException e) { throw (IOException) new IOException().initCause(e); } } @Override protected Object read(InputStream in) throws IOException { SLDParser parser = new SLDParser( CommonFactoryFinder.getStyleFactory(null), in ); Style[] styles = parser.readXML(); if ( styles.length > 0 ) { return styles[0]; } return null; } }