All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.geoserver.platform.GeoServerResourceLoader Maven / Gradle / Ivy

There is a newer version: 1.7.0
Show newest version
/* 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.platform;

import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
import java.util.logging.Logger;


/**
 * Manages resources in GeoServer.
 * 

* The loader maintains a search path in which it will use to look up resources. * The {@link #baseDirectory} is a member of this path. *

*

* Files and directories created by the resource loader are made relative to * {@link #baseDirectory}. *

*

*

 *         
 * File dataDirectory = ...
 * GeoServerResourceLoader loader = new GeoServerResourceLoader( dataDirectory );
 * loader.addSearchLocation( new File( "/WEB-INF/" ) );
 * loader.addSearchLocation( new File( "/data" ) );
 * ...
 * File catalog = loader.find( "catalog.xml" );
 *         
 * 
*

* * @author Justin Deoliveira, The Open Planning Project, [email protected] * */ public class GeoServerResourceLoader extends DefaultResourceLoader { private static final Logger LOGGER = org.geotools.util.logging.Logging.getLogger("org.vfny.geoserver.global"); /** "path" for resource lookups */ Set searchLocations; /** * Base directory */ File baseDirectory; /** * Creates a new resource loader with no base directory. *

* Such a constructed resource loader is not capable of creating resources * from relative paths. *

*/ public GeoServerResourceLoader() { searchLocations = new TreeSet(); } /** * Creates a new resource loader. * * @param baseDirectory The directory in which */ public GeoServerResourceLoader(File baseDirectory) { this(); this.baseDirectory = baseDirectory; setSearchLocations(Collections.EMPTY_SET); } /** * Adds a location to the path used for resource lookups. * * @param A directory containing resources. */ public void addSearchLocation(File searchLocation) { searchLocations.add(searchLocation); } /** * Sets the search locations used for resource lookups. * * @param searchLocations A set of {@link File}. */ public void setSearchLocations(Set searchLocations) { this.searchLocations = new HashSet(searchLocations); //always add the base directory if (baseDirectory != null) { this.searchLocations.add(baseDirectory); } } /** * @return The base directory. */ public File getBaseDirectory() { return baseDirectory; } /** * Sets the base directory. * * @param baseDirectory */ public void setBaseDirectory(File baseDirectory) { this.baseDirectory = baseDirectory; searchLocations.add(baseDirectory); } /** * Performs a resource lookup. * * @param location The name of the resource to lookup, can be absolute or * relative. * * @return The file handle representing the resource, or null if the * resource could not be found. * * @throws IOException In the event of an I/O error. */ public File find(String location) throws IOException { //first to an existance check File file = new File(location); if (file.isAbsolute()) { return file; } else { //try a relative url for (Iterator f = searchLocations.iterator(); f.hasNext();) { File base = (File) f.next(); file = new File(base, location); try { if (file.exists()) { return file; } } catch (SecurityException e) { LOGGER.warning("Failed attemp to check existance of " + file.getAbsolutePath()); } } } Resource resource = getResource(location); if (resource.exists()) { return resource.getFile(); } return null; } /** * Creates a new directory. *

* Relative paths are created relative to {@link #baseDirectory}. * If {@link #baseDirectory} is not set, an IOException is thrown. *

*

* If location already exists as a file, an IOException is thrown. *

* @param location Location of directory to create, either absolute or * relative. * * @return The file handle of the created directory. * * @throws IOException */ public File createDirectory(String location) throws IOException { File file = find(location); if (file != null) { if (!file.isDirectory()) { String msg = location + " already exists and is not directory"; throw new IOException(msg); } } file = new File(location); if (file.isAbsolute()) { file.mkdir(); return file; } //no base directory set, cannot create a relative path if (baseDirectory == null) { String msg = "No base location set, could not create directory: " + location; throw new IOException(msg); } file = new File(baseDirectory, location); file.mkdir(); return file; } /** * Creates a new file. *

* Relative paths are created relative to {@link #baseDirectory}. *

* If {@link #baseDirectory} is not set, an IOException is thrown. *

*

* If location already exists as a directory, an IOException is thrown. *

* @param location Location of file to create, either absolute or relative. * * @return The file handle of the created file. * * @throws IOException In the event of an I/O error. */ public File createFile(String location) throws IOException { File file = find(location); if (file != null) { if (file.isDirectory()) { String msg = location + " already exists and is a directory"; throw new IOException(msg); } return file; } file = new File(location); if (file.isAbsolute()) { file.createNewFile(); return file; } //no base directory set, cannot create a relative path if (baseDirectory == null) { String msg = "No base location set, could not create file: " + location; throw new IOException(msg); } file = new File(baseDirectory, location); file.createNewFile(); return file; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy