org.geoserver.wps.RawDataEncoderDelegate.java Source code

Java tutorial

Introduction

Here is the source code for org.geoserver.wps.RawDataEncoderDelegate.java

Source

/* Copyright (c) 2014 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.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.IOUtils;
import org.geoserver.wps.process.RawData;
import org.geotools.xml.EncoderDelegate;
import org.xml.sax.ContentHandler;

/**
 * Encodes objects as base64 binaries
 * 
 * @author Andrea Aime - OpenGeo
 */
public class RawDataEncoderDelegate implements EncoderDelegate {

    private RawData rawData;

    public RawDataEncoderDelegate(RawData rawData) {
        this.rawData = rawData;
    }

    public void encode(ContentHandler output) throws Exception {
        InputStream is = null;
        try {
            is = rawData.getInputStream();
            byte[] buffer = new byte[4096];
            int read = 0;
            while ((read = is.read(buffer)) > 0) {
                char[] chars;
                if (read == 4096) {
                    chars = new String(Base64.encodeBase64(buffer)).toCharArray();
                } else {
                    byte[] reducedBuffer = new byte[read];
                    System.arraycopy(buffer, 0, reducedBuffer, 0, read);
                    chars = new String(Base64.encodeBase64(reducedBuffer)).toCharArray();
                }

                output.characters(chars, 0, chars.length);
            }
        } finally {
            IOUtils.closeQuietly(is);
        }
    }

    public void encode(OutputStream os) throws IOException {
        IOUtils.copy(rawData.getInputStream(), os);
    }
}