/**
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.resolver;
import java.io.InputStream;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
/**
* This class is an aggregation of ResourceResolver object and extends itself the ResourceResover class.
*
* Hence every call to this ResourceResolver will in fact be delegated to one of the resolver it aggregates.
*
* Created by The eXo Platform SAS Oct 24, 2006
*/
public class ApplicationResourceResolver extends ResourceResolver {
protected static Log log = ExoLogger.getLogger("portal:ApplicationResourceResolver");
private Map<String, ResourceResolver> resolvers_ = new HashMap<String, ResourceResolver>();
/**
* There are by default 2 resolvers already aggregated: 1) FileResourceResolver 2) ClasspathResourceResolver
*/
public ApplicationResourceResolver() {
addResourceResolver(new FileResourceResolver());
addResourceResolver(new ClasspathResourceResolver());
}
public ResourceResolver getResourceResolverByScheme(String scheme) {
return resolvers_.get(scheme);
}
public ResourceResolver getResourceResolver(String url) {
String scheme = "app:";
int index = url.indexOf(":");
if (index > 0)
scheme = url.substring(0, index + 1);
if (log.isDebugEnabled())
log.debug("Try to extract resource resolver for the url: " + url);
return resolvers_.get(scheme);
}
public void addResourceResolver(ResourceResolver resolver) {
if (log.isDebugEnabled())
log.debug("Add a resource resolver for the scheme: " + resolver.getResourceScheme());
resolvers_.put(resolver.getResourceScheme(), resolver);
}
public URL getResource(String url) throws Exception {
return getResourceResolver(url).getResource(url);
}
public InputStream getInputStream(String url) throws Exception {
return getResourceResolver(url).getInputStream(url);
}
public List<URL> getResources(String url) throws Exception {
return getResourceResolver(url).getResources(url);
}
public List<InputStream> getInputStreams(String url) throws Exception {
return getResourceResolver(url).getInputStreams(url);
}
public boolean isModified(String url, long lastAccess) {
return getResourceResolver(url).isModified(url, lastAccess);
}
public boolean isResolvable(String url) {
return getResourceResolver(url) != null;
}
public String getResourceIdPrefix() {
return Integer.toString(hashCode());
}
public String createResourceId(String url) {
return hashCode() + ":" + url;
}
public String getResourceScheme() {
return "app:";
}
@Override
public ResourceKey createResourceKey(String url) {
return this.getResourceResolver(url).createResourceKey(url);
}
}