blob: dcfd8dbb6f1c1f6c237728412488e09a6f69c99c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.myfaces.extensions.scripting.jsf2.resources;
import org.apache.myfaces.extensions.scripting.core.util.WeavingContext;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* internal resource loader to be used with our custom resource handler
* the resource loader is added to the list of available loaders
* so that the resource gets loaded properly from our source path
* instead of the web context if present, the source paths as usual
* are picked up by our context params.
*/
public class SourceResourceLoader extends ExternalContextResourceLoader {
public SourceResourceLoader(String prefix) {
super(prefix);
}
@Override
protected Set<String> getResourcePaths(String path) {
List<String> resourceRoots = WeavingContext.getConfiguration().getResourceDirs();
if (resourceRoots == null || resourceRoots.isEmpty()) {
return Collections.EMPTY_SET;
}
Set<String> retVals = new HashSet<String>(resourceRoots.size());
//for (String resourceRoot : resourceRoots) {
retVals.add(getPrefix() + "/" + path);
//}
return retVals;
}
@Override
public URL getResourceURL(ResourceMeta resourceMeta) {
try {
List<String> resourceRoots = WeavingContext.getConfiguration().getResourceDirs();
if (resourceRoots == null || resourceRoots.isEmpty()) {
return super.getResourceURL(resourceMeta);
}
for (String resourceRoot : resourceRoots) {
File resourceFile = new File(resourceRoot + getPrefix() + "/" + resourceMeta.getLibraryName() + "/"+ resourceMeta.getResourceName());
if (resourceFile.exists()) {
return resourceFile.toURI().toURL();
}
}
return super.getResourceURL(resourceMeta);
}
catch (MalformedURLException e) {
return null;
}
}
@Override
public InputStream getResourceInputStream(ResourceMeta resourceMeta) {
try {
List<String> resourceRoots = WeavingContext.getConfiguration().getResourceDirs();
if (resourceRoots == null || resourceRoots.isEmpty()) {
return super.getResourceInputStream(resourceMeta);
}
for (String resourceRoot : resourceRoots) {
File resourceFile = new File(resourceRoot + getPrefix() + "/" +resourceMeta.getLibraryName() + "/"+ resourceMeta.getResourceName());
if (resourceFile.exists()) {
return new FileInputStream(resourceFile);
}
}
return super.getResourceInputStream(resourceMeta);
}
catch (IOException e) {
return null;
}
}
}