/* (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.vfny.geoserver.crs; import java.io.File; import java.net.URL; import java.util.logging.Level; import org.geoserver.platform.GeoServerExtensions; import org.geoserver.platform.GeoServerResourceLoader; import org.geoserver.platform.resource.Resource; import org.geoserver.platform.resource.Resource.Type; import org.geotools.data.DataUtilities; import org.geotools.factory.Hints; import org.geotools.referencing.factory.epsg.CoordinateOperationFactoryUsingWKT; import org.opengis.referencing.operation.CoordinateOperationAuthorityFactory; /** * Authority allowing users to define their own CoordinateOperations in a separate file. * Will override EPSG definitions. * * @author Oscar Fonts */ public class GeoserverWKTOperationFactory extends CoordinateOperationFactoryUsingWKT implements CoordinateOperationAuthorityFactory { public GeoserverWKTOperationFactory() { super(null, MAXIMUM_PRIORITY); } public GeoserverWKTOperationFactory(Hints userHints) { super(userHints, MAXIMUM_PRIORITY); } /** * Returns the URL to the property file that contains Operation definitions from * $GEOSERVER_DATA_DIR/user_projections/{@value #FILENAME} * @return The URL, or {@code null} if none. */ protected URL getDefinitionsURL() { GeoServerResourceLoader loader = GeoServerExtensions.bean(GeoServerResourceLoader.class); if( loader != null ){ // not available for SystemTestData Resource definition = loader.get("user_projections/" + FILENAME); if( definition.getType() == Type.RESOURCE ){ File file = definition.file(); URL url = DataUtilities.fileToURL(file); if( url != null ){ return url; } else { LOGGER.log(Level.SEVERE, "Had troubles converting file name to URL"); } } else { LOGGER.info(definition.path() + " was not found, using the default set of " + "coordinate operation overrides (normally empty)"); } } return GeoserverOverridingWKTFactory.class.getResource(FILENAME); } }