allows to use a custom xbean filter to filter classes + exposing the finder from the web lifecycle

git-svn-id: https://svn.apache.org/repos/asf/openwebbeans/trunk@1765968 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java b/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java
index bde24ce..9e79551 100644
--- a/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java
+++ b/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java
@@ -35,6 +35,7 @@
 import org.apache.webbeans.util.WebBeansUtil;
 import org.apache.xbean.finder.AnnotationFinder;
 import org.apache.xbean.finder.ClassLoaders;
+import org.apache.xbean.finder.filter.Filter;
 
 import java.io.IOException;
 import java.lang.annotation.Annotation;
@@ -111,7 +112,8 @@
             beanArchiveService = webBeansContext.getBeanArchiveService();
         }
 
-        archive = new CdiArchive(beanArchiveService, WebBeansUtil.getCurrentClassLoader(), getBeanDeploymentUrls());
+        final Filter userFilter = webBeansContext.getService(Filter.class);
+        archive = new CdiArchive(beanArchiveService, WebBeansUtil.getCurrentClassLoader(), getBeanDeploymentUrls(), userFilter);
         finder = new OwbAnnotationFinder(archive);
 
         return finder;
diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/BeanArchiveFilter.java b/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/BeanArchiveFilter.java
index b679166..d0a13e4 100644
--- a/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/BeanArchiveFilter.java
+++ b/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/BeanArchiveFilter.java
@@ -31,13 +31,15 @@
 {
     private final BeanArchiveInformation beanArchiveInfo;
     private final boolean scanNone;
+    private final Filter userFilter;
 
     private List<String> urlClasses;
 
-    public BeanArchiveFilter(BeanArchiveInformation beanArchiveInfo, List<String> urlClasses)
+    public BeanArchiveFilter(BeanArchiveInformation beanArchiveInfo, List<String> urlClasses, Filter userFilter)
     {
         this.beanArchiveInfo = beanArchiveInfo;
         this.urlClasses = urlClasses;
+        this.userFilter = userFilter;
         BeanDiscoveryMode discoveryMode = beanArchiveInfo.getBeanDiscoveryMode();
 
         scanNone = BeanDiscoveryMode.NONE.equals(discoveryMode);
@@ -51,13 +53,13 @@
             return false;
         }
 
-        if (beanArchiveInfo.isClassExcluded(name))
+        if ((userFilter != null && !userFilter.accept(name)) || beanArchiveInfo.isClassExcluded(name))
         {
             return false;
         }
 
-            urlClasses.add(name);
-            return true;
+        urlClasses.add(name);
+        return true;
     }
 
 }
diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/CdiArchive.java b/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/CdiArchive.java
index f18b2df..b0d0fec 100644
--- a/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/CdiArchive.java
+++ b/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/CdiArchive.java
@@ -24,6 +24,7 @@
 import org.apache.xbean.finder.archive.ClasspathArchive;
 import org.apache.xbean.finder.archive.CompositeArchive;
 import org.apache.xbean.finder.archive.FilteredArchive;
+import org.apache.xbean.finder.filter.Filter;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -51,7 +52,8 @@
 
     private final Archive delegate;
 
-    public CdiArchive(BeanArchiveService beanArchiveService, final ClassLoader loader, final Map<String, URL> urls)
+    public CdiArchive(BeanArchiveService beanArchiveService, final ClassLoader loader, final Map<String, URL> urls,
+                      final Filter userFilter)
     {
         final Collection<Archive> archives = new ArrayList<Archive>();
         for (final URL url : urls.values())
@@ -60,7 +62,7 @@
 
             BeanArchiveInformation beanArchiveInfo = beanArchiveService.getBeanArchiveInformation(url);
             final Archive archive = new FilteredArchive(ClasspathArchive.archive(loader, url),
-                    new BeanArchiveFilter(beanArchiveInfo, urlClasses));
+                    new BeanArchiveFilter(beanArchiveInfo, urlClasses, userFilter));
 
             classesByUrl.put(url.toExternalForm(), new FoundClasses(url, urlClasses, beanArchiveInfo));
             archives.add(archive);
diff --git a/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java b/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java
index ee93a3f..4e4a796 100644
--- a/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java
+++ b/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java
@@ -75,7 +75,6 @@
         this.logger = WebBeansLoggerFacade.getLogger(WebContainerLifecycle.class);
     }
 
-
     /**
      * {@inheritDoc}
      */
diff --git a/webbeans-web/src/main/java/org/apache/webbeans/web/scanner/WebScannerService.java b/webbeans-web/src/main/java/org/apache/webbeans/web/scanner/WebScannerService.java
index 9264090..44f96c9 100644
--- a/webbeans-web/src/main/java/org/apache/webbeans/web/scanner/WebScannerService.java
+++ b/webbeans-web/src/main/java/org/apache/webbeans/web/scanner/WebScannerService.java
@@ -19,8 +19,8 @@
 package org.apache.webbeans.web.scanner;
 
 import org.apache.webbeans.corespi.scanner.AbstractMetaDataDiscovery;
+import org.apache.webbeans.corespi.scanner.xbean.OwbAnnotationFinder;
 import org.apache.webbeans.logger.WebBeansLoggerFacade;
-import org.apache.webbeans.spi.BeanArchiveService;
 import org.apache.webbeans.util.ExceptionUtil;
 import org.apache.webbeans.util.WebBeansUtil;
 
@@ -39,7 +39,6 @@
     private static final Logger logger = WebBeansLoggerFacade.getLogger(WebScannerService.class);
 
     protected ServletContext servletContext = null;
-    private BeanArchiveService beanArchiveService;
 
     public WebScannerService()
     {
@@ -62,6 +61,11 @@
         registerBeanArchives(loader);
     }
 
+    public OwbAnnotationFinder getFinder()
+    {
+        return finder;
+    }
+
     /**
      * Returns the web application class path if it contains
      * a beans.xml marker file.