EXTSCRIPT-174 adding wildcarding to the additional classpaths
git-svn-id: https://svn.apache.org/repos/asf/myfaces/extensions/scripting/trunk@1384230 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/Configuration.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/Configuration.java
index a7cf915..c9c25a9 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/Configuration.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/Configuration.java
@@ -25,14 +25,10 @@
import javax.servlet.ServletContext;
import java.io.File;
+import java.io.FilenameFilter;
import java.lang.ref.WeakReference;
import java.net.MalformedURLException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentSkipListSet;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -94,6 +90,31 @@
{
}
+
+ private Collection<String> performWildCardSearch(String classPathEntry) {
+
+ if(classPathEntry.toLowerCase().endsWith("*.jar")|| classPathEntry.toLowerCase().endsWith("*.zip")){
+ //peform a full search of jars on the dir
+ classPathEntry = classPathEntry.substring(0, classPathEntry.length()-5);
+ File classPathDir = new File(classPathEntry);
+ String[] foundFiles = classPathDir.list(new FilenameFilter() {
+ @Override
+ public boolean accept(File dir, String name) {
+ return name.toLowerCase().endsWith(".jar") || name.toLowerCase().endsWith(".zip");
+ }
+ });
+ if(foundFiles == null) {
+ return Collections.emptyList();
+ }
+ ArrayList<String> retVal = new ArrayList<String>(foundFiles.length);
+ for(String foundFile: foundFiles) {
+ retVal.add(classPathEntry+foundFile);
+ }
+ return retVal;
+ }
+ return Arrays.asList(new String[] {classPathEntry});
+ }
+
public void init(ServletContext context)
{
String packageWhiteList = context.getInitParameter(INIT_PARAM_SCRIPTING_PACKAGE_WHITELIST);
@@ -103,6 +124,10 @@
String additionalClassPath = context.getInitParameter(INIT_PARAM_SCRIPTING_ADDITIONAL_CLASSPATH);
additionalClassPath = (additionalClassPath == null) ? "" : additionalClassPath;
String[] additionalClassPaths = additionalClassPath.split("\\,");
+ for(String cp: additionalClassPaths) {
+ _additionalClassPath.addAll(performWildCardSearch(cp));
+ }
+
_additionalClassPath.addAll(Arrays.asList(additionalClassPaths));
String resourcePath = context.getInitParameter(INIT_PARAM_RESOURCE_PATH);