[jboss-cvs] JBossAS SVN: r102643 - in projects/scanning/trunk: scanning-impl/src/main/java/org/jboss/scanning/plugins/visitor and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Mar 19 18:22:59 EDT 2010


Author: alesj
Date: 2010-03-19 18:22:59 -0400 (Fri, 19 Mar 2010)
New Revision: 102643

Added:
   projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/PatternVisitor.java
   projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/SingleAnnotationVisitor.java
Modified:
   projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/HibernateScanningPlugin.java
   projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/HibernateScanningPluginFactory.java
   projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/PatternFilter.java
   projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/visitor/ReflectResourceVisitor.java
Log:
Add Hibernate visitors.

Modified: projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/HibernateScanningPlugin.java
===================================================================
--- projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/HibernateScanningPlugin.java	2010-03-19 21:38:55 UTC (rev 102642)
+++ projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/HibernateScanningPlugin.java	2010-03-19 22:22:59 UTC (rev 102643)
@@ -22,10 +22,18 @@
 
 package org.jboss.scanning.hibernate;
 
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.classloading.plugins.visitor.FederatedResourceVisitor;
 import org.jboss.classloading.spi.visitor.ResourceContext;
 import org.jboss.classloading.spi.visitor.ResourceFilter;
+import org.jboss.classloading.spi.visitor.ResourceVisitor;
 import org.jboss.deployers.structure.spi.DeploymentUnit;
 import org.jboss.scanning.plugins.AbstractScanningPlugin;
+import org.jboss.scanning.plugins.visitor.JavassistReflectProvider;
+import org.jboss.scanning.plugins.visitor.ReflectProvider;
 
 import org.hibernate.ejb.packaging.Scanner;
 
@@ -39,9 +47,31 @@
    /** The scanner */
    private final ScannerImpl scanner;
 
-   public HibernateScanningPlugin(DeploymentUnit unit)
+   /** The visitor */
+   private final ResourceVisitor visitor;
+
+   public HibernateScanningPlugin(DeploymentUnit unit, HibernateScanningPluginFactory factory)
    {
+      if (factory == null)
+         throw new IllegalArgumentException("Null factory");
+
       this.scanner = new ScannerImpl(unit);
+
+      List<ResourceVisitor> visitors = new ArrayList<ResourceVisitor>();
+      for (String pattern : factory.getPatterns())
+      {
+         ResourceVisitor rv = new PatternVisitor(pattern, scanner);
+         visitors.add(rv);
+      }
+      ReflectProvider provider = unit.getAttachment(ReflectProvider.class);
+      if (provider == null)
+         provider = new JavassistReflectProvider();
+      for (Class<? extends Annotation> annotation : factory.getAnnotations())
+      {
+         ResourceVisitor rv = new SingleAnnotationVisitor(provider, annotation, scanner);
+         visitors.add(rv);
+      }
+      this.visitor = new FederatedResourceVisitor(visitors.toArray(new ResourceVisitor[visitors.size()]));
    }
 
    protected ScannerImpl doCreateHandle()
@@ -56,11 +86,11 @@
 
    public ResourceFilter getFilter()
    {
-      return null; // TODO
+      return visitor.getFilter();
    }
 
    public void visit(ResourceContext resource)
    {
-      // TODO
+      visitor.visit(resource);
    }
 }
\ No newline at end of file

Modified: projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/HibernateScanningPluginFactory.java
===================================================================
--- projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/HibernateScanningPluginFactory.java	2010-03-19 21:38:55 UTC (rev 102642)
+++ projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/HibernateScanningPluginFactory.java	2010-03-19 22:22:59 UTC (rev 102643)
@@ -22,6 +22,10 @@
 
 package org.jboss.scanning.hibernate;
 
+import java.lang.annotation.Annotation;
+import java.util.Collections;
+import java.util.Set;
+
 import org.jboss.deployers.structure.spi.DeploymentUnit;
 import org.jboss.scanning.plugins.DeploymentScanningPluginFactory;
 import org.jboss.scanning.spi.ScanningPlugin;
@@ -35,8 +39,34 @@
  */
 public class HibernateScanningPluginFactory implements DeploymentScanningPluginFactory<ScannerImpl, Scanner>
 {
+   /** The patterns */
+   private Set<String> patterns;
+
+   /** The annotations */
+   private Set<Class<? extends Annotation>> annotations;
+
    public ScanningPlugin<ScannerImpl, Scanner> create(DeploymentUnit unit)
    {
-      return new HibernateScanningPlugin(unit);
+      return new HibernateScanningPlugin(unit, this);
    }
+
+   public Set<String> getPatterns()
+   {
+      return Collections.unmodifiableSet(patterns);
+   }
+
+   public void setPatterns(Set<String> patterns)
+   {
+      this.patterns = patterns;
+   }
+
+   public Set<Class<? extends Annotation>> getAnnotations()
+   {
+      return Collections.unmodifiableSet(annotations);
+   }
+
+   public void setAnnotations(Set<Class<? extends Annotation>> annotations)
+   {
+      this.annotations = annotations;
+   }
 }
\ No newline at end of file

Modified: projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/PatternFilter.java
===================================================================
--- projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/PatternFilter.java	2010-03-19 21:38:55 UTC (rev 102642)
+++ projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/PatternFilter.java	2010-03-19 22:22:59 UTC (rev 102643)
@@ -22,6 +22,8 @@
 
 package org.jboss.scanning.hibernate;
 
+import org.jboss.classloading.spi.visitor.ResourceContext;
+import org.jboss.classloading.spi.visitor.ResourceFilter;
 import org.jboss.vfs.VirtualFile;
 import org.jboss.vfs.VirtualFileFilter;
 
@@ -30,7 +32,7 @@
  *
  * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
  */
-public class PatternFilter implements VirtualFileFilter
+public class PatternFilter implements VirtualFileFilter, ResourceFilter
 {
    private String pattern;
    private boolean exact = true;
@@ -51,9 +53,21 @@
       }
    }
 
+   private boolean accepts(String name)
+   {
+      return exact ? name.equals(pattern) : name.endsWith(pattern);
+   }
+
    public boolean accepts(VirtualFile file)
    {
       String name = file.getName();
-      return exact ? name.equals(pattern) : name.endsWith(pattern);
+      return accepts(name);
    }
+
+   public boolean accepts(ResourceContext resource)
+   {
+      String name = resource.getResourceName();
+      int p = name.lastIndexOf(".");
+      return accepts(name.substring(p >= 0 ? p + 1 : 0));
+   }
 }
\ No newline at end of file

Copied: projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/PatternVisitor.java (from rev 102641, projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/HibernateScanningPlugin.java)
===================================================================
--- projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/PatternVisitor.java	                        (rev 0)
+++ projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/PatternVisitor.java	2010-03-19 22:22:59 UTC (rev 102643)
@@ -0,0 +1,59 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * 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.jboss.scanning.hibernate;
+
+import org.jboss.classloading.spi.visitor.ResourceContext;
+import org.jboss.classloading.spi.visitor.ResourceFilter;
+import org.jboss.classloading.spi.visitor.ResourceVisitor;
+
+/**
+ * Hibernate's pattern visitor.
+ *
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
+ */
+public class PatternVisitor implements ResourceVisitor
+{
+   private final ResourceFilter filter;
+   private final ScannerImpl scanner;
+
+   public PatternVisitor(String pattern, ScannerImpl scanner)
+   {
+      if (pattern == null)
+         throw new IllegalArgumentException("Null pattern");
+      if (scanner == null)
+         throw new IllegalArgumentException("Null scanner");
+
+      this.filter = new PatternFilter(pattern);
+      this.scanner = scanner;
+   }
+
+   public ResourceFilter getFilter()
+   {
+      return filter;
+   }
+
+   public void visit(ResourceContext resource)
+   {
+      System.out.println("scanner = " + scanner); // TODO   
+   }
+}
\ No newline at end of file

Added: projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/SingleAnnotationVisitor.java
===================================================================
--- projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/SingleAnnotationVisitor.java	                        (rev 0)
+++ projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hibernate/SingleAnnotationVisitor.java	2010-03-19 22:22:59 UTC (rev 102643)
@@ -0,0 +1,77 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * 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.jboss.scanning.hibernate;
+
+import java.lang.annotation.Annotation;
+
+import org.jboss.classloading.spi.visitor.ClassFilter;
+import org.jboss.classloading.spi.visitor.ResourceContext;
+import org.jboss.classloading.spi.visitor.ResourceFilter;
+import org.jboss.reflect.spi.ClassInfo;
+import org.jboss.scanning.plugins.visitor.ReflectProvider;
+import org.jboss.scanning.plugins.visitor.ReflectResourceVisitor;
+
+/**
+ * Hibernate's annotation visitor.
+ *
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
+ */
+public class SingleAnnotationVisitor extends ReflectResourceVisitor
+{
+   private final Class<? extends Annotation> annotation;
+   private final ScannerImpl scanner;
+
+   public SingleAnnotationVisitor(ReflectProvider provider, Class<? extends Annotation> annotation, ScannerImpl scanner)
+   {
+      super(provider);
+
+      if (annotation == null)
+         throw new IllegalArgumentException("Null annotation");
+      if (scanner == null)
+         throw new IllegalArgumentException("Null scanner");
+
+      this.annotation = annotation;
+      this.scanner = scanner;
+   }
+
+   public ResourceFilter getFilter()
+   {
+      return ClassFilter.INSTANCE;
+   }
+
+   @Override
+   protected void doVisit(ResourceContext resource) throws Throwable
+   {
+      ClassInfo classInfo = getClassInfo(resource);
+      if (classInfo.isAnnotationPresent(annotation))
+      {
+         System.out.println("scanner = " + scanner);  // TODO
+      }
+   }
+
+   @Override
+   protected boolean isRelevant(ClassInfo classInfo)
+   {
+      return false; // we actually don't endup here
+   }
+}
\ No newline at end of file

Modified: projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/visitor/ReflectResourceVisitor.java
===================================================================
--- projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/visitor/ReflectResourceVisitor.java	2010-03-19 21:38:55 UTC (rev 102642)
+++ projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/visitor/ReflectResourceVisitor.java	2010-03-19 22:22:59 UTC (rev 102643)
@@ -90,8 +90,7 @@
 
       try
       {
-         ClassInfo ctClass = getClassInfo(resource);
-         handleClass(ctClass);
+         doVisit(resource);
       }
       catch (Throwable t)
       {
@@ -103,6 +102,18 @@
    }
 
    /**
+    * Do visit class resource.
+    *
+    * @param resource the current resource
+    * @throws Throwable for any error
+    */
+   protected void doVisit(ResourceContext resource) throws Throwable
+   {
+      ClassInfo ctClass = getClassInfo(resource);
+      handleClass(ctClass);
+   }
+
+   /**
     * Log throwable.
     *
     * @param resource the resource we're visiting




More information about the jboss-cvs-commits mailing list