[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