/* * Copyright (c) 2008. All rights reserved. */ package ro.isdc.wro.model.resource.locator.factory; import java.io.IOException; import java.io.InputStream; import org.apache.commons.io.input.AutoCloseInputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ro.isdc.wro.WroRuntimeException; import ro.isdc.wro.model.resource.locator.UriLocator; /** * Holds a list of uri locators. The uriLocator will be created based on the first * uriLocator from the supplied list which will accept the url. * * @author Alex Objelean * @created Created on Nov 4, 2008 */ public abstract class AbstractUriLocatorFactory implements UriLocatorFactory { private static final Logger LOG = LoggerFactory.getLogger(AbstractUriLocatorFactory.class); /** * Locates an InputStream for the given uri. * * @param uri to locate. * @return {@link InputStream} of the resource. * @throws IOException if uri is invalid or resource couldn't be located. */ public final InputStream locate(final String uri) throws IOException { final UriLocator uriLocator = getInstance(uri); if (uriLocator == null) { throw new WroRuntimeException("No locator is capable of handling uri: " + uri); } LOG.debug("[OK] locating {} using locator: {}", uri, uriLocator.getClass().getSimpleName()); return new AutoCloseInputStream(uriLocator.locate(uri)); } }