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

org.daisy.dotify.common.io.AbstractResourceLocator Maven / Gradle / Ivy

The newest version!
package org.daisy.dotify.common.io;

import java.net.URL;

/**
 * Provides easy access to package resources. Simply extend AbstractResourceLocator in the package where
 * the resources are located. Your implementation can then be used to locate the resources by
 * specifying a location relative to the implementation.
 * @author Joel Håkansson
 *
 */
public abstract class AbstractResourceLocator implements ResourceLocator {
	private final String basePath;

	/**
	 * Creates a new abstract resource locator. Resources are resolved relative
	 * to the location of the concrete implementation.
	 */
	public AbstractResourceLocator() {
		this(null);
	}
	
	/**
	 * Creates a new abstract resource locator with the specified sub-path prefix, in other
	 * words a sub-path from where all resources are resolved. Resources are resolved relative
	 * to the location of the concrete implementation.
	 * @param basePath the sub-path prefix
	 */
	public AbstractResourceLocator(String basePath) {
		if (basePath==null || basePath.equals("")) {
			this.basePath = "";
		} else {
			this.basePath = basePath+"/";
		}
	}
	
	@Override
	public URL getResource(String subpath) throws ResourceLocatorException {
		String path = basePath + subpath;
		//TODO check the viability of this method
		URL url;
	    url = this.getClass().getResource(path);
	    if(null==url) {
	    	String qualifiedPath = this.getClass().getPackage().getName().replace('.','/') + "/";	    	
	    	url = this.getClass().getClassLoader().getResource(qualifiedPath+path);
	    }
	    if(url==null) {
	    	throw new ResourceLocatorException("Cannot find resource path '" + path + "' relative to " + this.getClass().getCanonicalName());
	    }
	    return url;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy