ChainedResourceFactory.java

/***************************************************************************
   Copyright 2013 Emily Estes

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
***************************************************************************/
package net.metanotion.simpletemplate;


/** This resource factory attempts to load a resource from a primary factory, and if that factory
fails, will attempt to load the resource from a delegated factory.
*/
public final class ChainedResourceFactory implements ResourceFactory {
	private final ResourceFactory factory;
	private final ResourceFactory delegate;
	/** Create a new resource factory that loads from a primary factory and a fallback factory.
		@param factory The primary factory to load resources from.
		@param delegate The factory to use if the primary factory fails.
	*/
	public ChainedResourceFactory(final ResourceFactory factory, final ResourceFactory delegate) {
		this.factory = factory;
		this.delegate = delegate;
	}

	@Override public Resource get(final String urn) {
		try {
			return factory.get(urn);
		} catch (final Exception e) {
			return delegate.get(urn);
		}
	}
}