/* Copyright (c) 2001 - 2013 OpenPlans - www.openplans.org. All rights reserved. * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.wps; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PipedInputStream; import java.io.PipedOutputStream; import java.io.Reader; import org.geoserver.wps.ppio.CDataPPIO; import org.geotools.xml.EncoderDelegate; import org.xml.sax.ContentHandler; import org.xml.sax.ext.LexicalHandler; /** * Encodes objects as text sections within CDATA markers * * @author Andrea Aime - OpenGeo */ public class CDataEncoderDelegate implements EncoderDelegate { CDataPPIO ppio; Object object; public CDataEncoderDelegate(CDataPPIO ppio, Object object) { this.ppio = ppio; this.object = object; } public void encode(ContentHandler output) throws Exception { ((LexicalHandler) output).startCDATA(); PipedInputStream pins = new PipedInputStream(); PipedOutputStream pos = new PipedOutputStream(pins); ppio.encode(object, pos); Reader r = new InputStreamReader(pins); char[] buffer = new char[1024]; int read; while ((read = r.read(buffer)) > 0) { output.characters(buffer, 0, read); } pos.close(); r.close(); ((LexicalHandler) output).endCDATA(); } public void encode(OutputStream os) throws Exception { ppio.encode(object, os); } }