content: /*
   * 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));
    }
  }
  