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);