Package org.geoserver.wcs.responses

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

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2002-2011, Open Source Geospatial Foundation (OSGeo)
*
*    This library is free software; you can redistribute it and/or
*    modify it under the terms of the GNU Lesser General Public
*    License as published by the Free Software Foundation;
*    version 2.1 of the License.
*
*    This library is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*    Lesser General Public License for more details.
*/
package org.geoserver.wcs.responses;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.collections.map.CaseInsensitiveMap;
import org.geoserver.config.GeoServer;
import org.geotools.util.Utilities;

/**
* Base class for {@link CoverageResponseDelegate} implementations;
*
* @author Simone Giannecchini, GeoSolutions SAS
*
*/
public abstract class BaseCoverageResponseDelegate implements CoverageResponseDelegate {
   
    /** Output formats for this {@link CoverageResponseDelegate}.*/
    private final List<String> outputFormats;
   
    /** File extensions for this {@link CoverageResponseDelegate}.*/
    private final CaseInsensitiveMap fileExtensions;
   
    /** MIME Types for this {@link CoverageResponseDelegate}.*/
    private final CaseInsensitiveMap mimeTypes;

    /** The current geoserver instance.*/
    protected final GeoServer geoserver;
   
    /**
     * Constructor for this {@link BaseCoverageResponseDelegate};
     *
     * @param geoserver the {@link GeoServer} instance to get options from
     * @param outputFormats Output formats for this {@link CoverageResponseDelegate}
     * @param fileExtensions File extensions for this {@link CoverageResponseDelegate}
     * @param mimeTypes MIME Types for this {@link CoverageResponseDelegate}
     */
    public BaseCoverageResponseDelegate(GeoServer geoserver, List<String> outputFormats,Map<String,String> fileExtensions,Map<String,String> mimeTypes){
        Utilities.ensureNonNull("outputFormats", outputFormats);
        Utilities.ensureNonNull("GeoServer", geoserver);
        Utilities.ensureNonNull("fileExtensions", fileExtensions);
        Utilities.ensureNonNull("mimeTypes", mimeTypes);
        if(outputFormats.isEmpty()){
            throw new IllegalArgumentException("Empty list of outputFormats provided");
        }
        if(fileExtensions.isEmpty()){
            throw new IllegalArgumentException("Empty list of fileExtensions provided");
        }
        if(mimeTypes.isEmpty()){
            throw new IllegalArgumentException("Empty list of mimeTypes provided");
        }       
        this.mimeTypes= new CaseInsensitiveMap(new HashMap<String, String>(mimeTypes));
        this.outputFormats= new ArrayList<String>(outputFormats);
        this.fileExtensions= new CaseInsensitiveMap(fileExtensions);
        this.geoserver=geoserver;
       
    }

    /**
     * Default implementation, implementers should override.
     */
    @Override
    public boolean canProduce(String outputFormat) {
        Utilities.ensureNonNull("outputFormat", outputFormat);
        return outputFormats.contains(outputFormat)||mimeTypes.values().contains(outputFormat);
    }

    @Override
    public String getMimeType(String outputFormat) {
        Utilities.ensureNonNull("outputFormat", outputFormat);
        if(mimeTypes.containsKey(outputFormat)){
            return (String) mimeTypes.get(outputFormat);
        }
        if(mimeTypes.values().contains(outputFormat)){
            return outputFormat;
        }
        return null;
    }

    @Override
    public String getFileExtension(String outputFormat) {
        if(fileExtensions.containsKey(outputFormat)){
            return (String) fileExtensions.get(outputFormat);
        }
        if(mimeTypes.values().contains(outputFormat)){
            return (String) fileExtensions.values().iterator().next();
        }
        return null;
    }

    @Override
    public List<String> getOutputFormats() {
        return new ArrayList<String>(outputFormats);
    }

    /**
     * Default implementation, implementers should override.
     */
    @Override
    public boolean isAvailable() {
        return true;
    }
   
    /**
     * Provides a fallback, a value that looks like a GMLCOV conformance class. Delegates that can
     * be actually associated to an official conformance class should override this method
     */
    public String getConformanceClass(String format) {
        return "http://www.opengis.net/spec/WCS_coverage-encoding-x" + getMimeType(format);
    }

}
TOP

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

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.