Package org.geoserver.wcs.responses

Source Code of org.geoserver.wcs.responses.IMGCoverageResponseDelegate

/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.wcs.responses;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

import org.geoserver.config.GeoServer;
import org.geoserver.platform.ServiceException;
import org.geotools.coverage.grid.GridCoverage2D;
import org.geotools.gce.image.WorldImageWriter;
import org.opengis.coverage.grid.Format;
import org.opengis.parameter.GeneralParameterValue;
import org.opengis.parameter.ParameterValue;
import org.opengis.parameter.ParameterValueGroup;

/**
* Encodes coverages in "world image" formats, png, jpeg and gif.
*
* <p>
* Notice that depending on the underlying coverage structure this is not always possible.     
*
* @author $Author: Alessio Fabiani (alessio.fabiani@gmail.com) $ (last modification)
* @author $Author: Simone Giannecchini (simboss1@gmail.com) $ (last modification)
*/
public class IMGCoverageResponseDelegate extends BaseCoverageResponseDelegate implements CoverageResponseDelegate {

    @SuppressWarnings("serial")
    public IMGCoverageResponseDelegate(GeoServer geoserver) {
        super(
                geoserver,
                Arrays.asList("png", "jpeg", "JPEG", "PNG"), //output formats
                new HashMap<String, String>(){ // file extensions
                    {
                        put("png", "png");
                        put("jpeg", "jpeg");
                        put("JPEG", "jpeg");
                        put("PNG", "png");
                        put("image/png", "png");
                        put("image/jpeg", "jpeg");                      
                    }
                },
                new HashMap<String, String>(){ //mime types
                    {
                        put("png", "image/png");
                        put("jpeg", "image/jpeg");
                        put("PNG", "image/png");
                        put("JPEG", "image/jpeg");                       
                    }
                });
    }

  public void encode(GridCoverage2D sourceCoverage, String outputFormat, Map<String,String> econdingParameters, OutputStream output) throws ServiceException, IOException {
        if (sourceCoverage == null) {
            throw new IllegalStateException(
                    "It seems prepare() has not been called or has not succeed");
        }

        final WorldImageWriter writer = new WorldImageWriter(output);

        // writing parameters for Image
        final Format writerParams = writer.getFormat();
        final ParameterValueGroup writeParameters = writerParams.getWriteParameters();
        final ParameterValue<?> format = writeParameters.parameter("Format");
        format.setValue(getFileExtension(outputFormat));
       
        try {
            // writing
            writer.write(sourceCoverage, new GeneralParameterValue[] { format });
            output.flush();
        } finally {

            // freeing everything
            org.apache.commons.io.IOUtils.closeQuietly(output);

            try {
                writer.dispose();
            } catch (Throwable e) {
                // eat me
            }
            sourceCoverage.dispose(true);
        }

    }
}
TOP

Related Classes of org.geoserver.wcs.responses.IMGCoverageResponseDelegate

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.