/* Copyright (c) 2001 - 2007 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.wms;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import org.geoserver.platform.GeoServerExtensions;
import org.springframework.context.ApplicationContext;
import org.vfny.geoserver.wms.GetMapProducer;
import org.vfny.geoserver.wms.WmsException;
/**
* Utility class uses to process GeoServer WMS extension points.
*
* @author Gabriel Roldan
* @version $Id$
*/
public class WMSExtensions {
/**
* Finds out the registered GetMapProducers in the application context.
*/
public static List<GetMapProducer> findMapProducers(final ApplicationContext context) {
return GeoServerExtensions.extensions(GetMapProducer.class, context);
}
/**
* Finds out a {@link GetMapProducer} specialized in generating the
* requested map format, registered in the spring context.
*
* @param outputFormat
* a request parameter object wich holds the processed request
* objects, such as layers, bbox, outpu format, etc.
*
* @return A specialization of <code>GetMapDelegate</code> wich can
* produce the requested output map format, or {@code null} if none
* is found
*
* @throws WmsException
* if no specialization is configured for the output format
* specified in <code>request</code> or if it can't be
* instantiated
*/
public static GetMapProducer findMapProducer(final String outputFormat,
final ApplicationContext applicationContext) {
final Collection<GetMapProducer> producers;
producers = WMSExtensions.findMapProducers(applicationContext);
return findMapProducer(outputFormat, producers);
}
public static GetMapProducer findMapProducer(String outputFormat,
Collection<GetMapProducer> producers) {
Set<String> producerFormats;
for (GetMapProducer producer : producers) {
producerFormats = producer.getOutputFormatNames();
Set<String> caseInsensitiveFormats = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
caseInsensitiveFormats.addAll(producerFormats);
if (caseInsensitiveFormats.contains(outputFormat)) {
return producer;
}
}
return null;
}
}