You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by ms...@apache.org on 2006/11/29 17:48:49 UTC

svn commit: r480619 - in /incubator/ode/trunk/jacob-ap: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/ode/ src/main/java/org/apache/ode/jacob/ src/main/java/org/apache/ode/jacob/ap/ src/main/reso...

Author: mszefler
Date: Wed Nov 29 08:48:47 2006
New Revision: 480619

URL: http://svn.apache.org/viewvc?view=rev&rev=480619
Log:
Added JACOB annotation processor to repository.

Added:
    incubator/ode/trunk/jacob-ap/
    incubator/ode/trunk/jacob-ap/.classpath   (with props)
    incubator/ode/trunk/jacob-ap/.project   (with props)
    incubator/ode/trunk/jacob-ap/pom.xml   (with props)
    incubator/ode/trunk/jacob-ap/src/
    incubator/ode/trunk/jacob-ap/src/main/
    incubator/ode/trunk/jacob-ap/src/main/java/
    incubator/ode/trunk/jacob-ap/src/main/java/org/
    incubator/ode/trunk/jacob-ap/src/main/java/org/apache/
    incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/
    incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/jacob/
    incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/jacob/ap/
    incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/jacob/ap/ChannelType.java   (with props)
    incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/jacob/ap/ChannelTypeAnnotationProcessor.java   (with props)
    incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/jacob/ap/JacobAnnotationProcessorFactory.java   (with props)
    incubator/ode/trunk/jacob-ap/src/main/resources/
    incubator/ode/trunk/jacob-ap/src/main/resources/META-INF/
    incubator/ode/trunk/jacob-ap/src/main/resources/META-INF/services/
    incubator/ode/trunk/jacob-ap/src/main/resources/META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
    incubator/ode/trunk/jacob-ap/src/main/resources/org/
    incubator/ode/trunk/jacob-ap/src/main/resources/org/apache/
    incubator/ode/trunk/jacob-ap/src/main/resources/org/apache/ode/
    incubator/ode/trunk/jacob-ap/src/main/resources/org/apache/ode/jacob/
    incubator/ode/trunk/jacob-ap/src/main/resources/org/apache/ode/jacob/ap/

Added: incubator/ode/trunk/jacob-ap/.classpath
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/jacob-ap/.classpath?view=auto&rev=480619
==============================================================================
--- incubator/ode/trunk/jacob-ap/.classpath (added)
+++ incubator/ode/trunk/jacob-ap/.classpath Wed Nov 29 08:48:47 2006
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="src" path="src/main/resources"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Propchange: incubator/ode/trunk/jacob-ap/.classpath
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ode/trunk/jacob-ap/.project
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/jacob-ap/.project?view=auto&rev=480619
==============================================================================
--- incubator/ode/trunk/jacob-ap/.project (added)
+++ incubator/ode/trunk/jacob-ap/.project Wed Nov 29 08:48:47 2006
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>jacob-ap</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>

Propchange: incubator/ode/trunk/jacob-ap/.project
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ode/trunk/jacob-ap/pom.xml
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/jacob-ap/pom.xml?view=auto&rev=480619
==============================================================================
--- incubator/ode/trunk/jacob-ap/pom.xml (added)
+++ incubator/ode/trunk/jacob-ap/pom.xml Wed Nov 29 08:48:47 2006
@@ -0,0 +1,65 @@
+<?xml version="1.0"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+
+<project>
+    <groupId>org.apache.ode</groupId>
+    <artifactId>ode-jacob-ap</artifactId>
+    <name>ODE :: Java Concurrent Objects (JACOB) Annotation Processor</name>
+
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.ode</groupId>
+        <artifactId>ode</artifactId>
+        <version>2.0-SNAPSHOT</version>
+    </parent>
+    <version>2.0-SNAPSHOT</version>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.ode</groupId>
+            <artifactId>ode-utils</artifactId>
+        </dependency>
+    </dependencies>
+
+<!-- Question: How does one add tools.jar to the maven classpath?
+     Answer: Why its sooooo simple: -->
+
+<profiles>
+    <profile>
+      <id>default-tools.jar</id>
+      <activation>
+        <property>
+          <name>java.vendor</name>
+          <value>Sun Microsystems Inc.</value>
+       </property>
+     </activation>
+      <dependencies>
+        <dependency>
+          <groupId>com.sun</groupId>
+          <artifactId>tools</artifactId>
+          <version>1.4.2</version>
+          <scope>system</scope>
+          <systemPath>${java.home}/../lib/tools.jar</systemPath>
+       </dependency>
+     </dependencies>
+   </profile>
+ </profiles>
+
+
+</project>

Propchange: incubator/ode/trunk/jacob-ap/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/jacob/ap/ChannelType.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/jacob/ap/ChannelType.java?view=auto&rev=480619
==============================================================================
--- incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/jacob/ap/ChannelType.java (added)
+++ incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/jacob/ap/ChannelType.java Wed Nov 29 08:48:47 2006
@@ -0,0 +1,9 @@
+package org.apache.ode.jacob.ap;
+
+/**
+ * Annotation used to indicate that an interface is a JACOB channel interface.
+ * @author Maciej Szefler <mszefler at gmail dot com>
+ */
+public @interface ChannelType {
+
+}

Propchange: incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/jacob/ap/ChannelType.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/jacob/ap/ChannelTypeAnnotationProcessor.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/jacob/ap/ChannelTypeAnnotationProcessor.java?view=auto&rev=480619
==============================================================================
--- incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/jacob/ap/ChannelTypeAnnotationProcessor.java (added)
+++ incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/jacob/ap/ChannelTypeAnnotationProcessor.java Wed Nov 29 08:48:47 2006
@@ -0,0 +1,121 @@
+package org.apache.ode.jacob.ap;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Collection;
+import java.util.Date;
+
+import com.sun.mirror.apt.AnnotationProcessor;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.AnnotationTypeDeclaration;
+import com.sun.mirror.declaration.InterfaceDeclaration;
+import com.sun.mirror.type.InterfaceType;
+import com.sun.mirror.util.DeclarationFilter;
+
+class ChannelTypeAnnotationProcessor implements AnnotationProcessor {
+
+    AnnotationProcessorEnvironment _env;
+    AnnotationTypeDeclaration _atd;
+    
+    ChannelTypeAnnotationProcessor(AnnotationTypeDeclaration atd, AnnotationProcessorEnvironment env) {
+        _atd = atd;
+        _env = env; 
+    }
+    
+    public void process() {
+        Collection<InterfaceDeclaration> channels = DeclarationFilter.getFilter(InterfaceDeclaration.class).filter(_env.getDeclarationsAnnotatedWith(_atd),InterfaceDeclaration.class);
+        for (InterfaceDeclaration c : channels) {
+            PrintWriter pw = null;
+            try {
+                pw = _env.getFiler().createSourceFile(c.getQualifiedName() + "Channel");
+                writeChannelClass(pw, c);
+            } catch (IOException e) {
+                _env.getMessager().printError(c.getPosition(), "IO Error: " + e.getMessage());
+            } finally {
+                if (pw != null) pw.close();
+                pw = null;
+            }
+            
+            try {
+                pw = _env.getFiler().createSourceFile(c.getQualifiedName() + "ChannelListener");
+                writeChannelListenerClass(pw, c);
+            } catch (IOException e) {
+                _env.getMessager().printError(c.getPosition(), "IO Error: " + e.getMessage());
+            } finally {
+                if (pw != null) pw.close();
+                pw = null;
+            }
+            
+        }
+    }
+    
+    
+    private void writeChannelClass(PrintWriter pw, InterfaceDeclaration c) {
+        pw.println("/*");
+        pw.println(" * SOURCE FILE GENERATATED BY JACOB CHANNEL CLASS GENERATOR");
+        pw.println(" * ");
+        pw.println(" *               !!! DO NOT EDIT !!!! ");
+        pw.println(" * ");
+        pw.println(" * Generated On  : "  + new Date());
+        pw.println(" * For Interface : "  + c.getQualifiedName());
+        pw.println(" */");
+        pw.println();
+        pw.println("package " + c.getPackage().getQualifiedName() + ";");
+        pw.println();
+        
+        pw.println("/**");
+        pw.println(" * An auto-generated channel interface for the channel type");
+        pw.println(" * {@link " + c.getQualifiedName() + "}.");
+        pw.println(" * @see " + c.getQualifiedName() );
+        pw.println(" * @see " + c.getQualifiedName() + "ChannelListener");
+        pw.println(" */");
+        pw.println("public interface " + c.getSimpleName() + "Channel");
+        
+        Collection<InterfaceType> supers = c.getSuperinterfaces();
+        if (supers.isEmpty()) {
+            pw.println("    extends org.apache.ode.jacob.Channel, ");
+        } else {
+            pw.print("    extends ");
+            for (InterfaceType s : supers)  
+                pw.println("            "+ s.getDeclaration().getQualifiedName() + "Channel, ");
+            pw.println    ("            org.apache.ode.jacob.Channel, ");
+        }
+        
+        pw.println("            " + c.getQualifiedName());
+        pw.println("{}");
+        pw.flush();
+    }
+
+    private void writeChannelListenerClass(PrintWriter pw, InterfaceDeclaration c) {
+        pw.println("/*");
+        pw.println(" * SOURCE FILE GENERATATED BY JACOB CHANNEL CLASS GENERATOR");
+        pw.println(" * ");
+        pw.println(" *               !!! DO NOT EDIT !!!! ");
+        pw.println(" * ");
+        pw.println(" * Generated On  : "  + new Date());
+        pw.println(" * For Interface : "  + c.getQualifiedName());
+        pw.println(" */");
+        pw.println();
+        pw.println("package " + c.getPackage().getQualifiedName() + ";");
+        pw.println();
+        pw.println("import org.apache.commons.logging.LogFactory;");
+        pw.println("import org.apache.commons.logging.Log;");
+        pw.println();
+        pw.println("/**");
+        pw.println(" * An auto-generated channel listener abstract class for the ");
+        pw.println(" * {@link " + c.getQualifiedName() + "} channel type. ");
+        pw.println(" * @see " + c.getQualifiedName() );
+        pw.println(" * @see " + c.getQualifiedName() + "Channel");
+        pw.println(" */");
+        pw.println("public abstract class " + c.getSimpleName() + "ChannelListener");
+        pw.println("    extends org.apache.ode.jacob.ChannelListener<" + c.getQualifiedName() + "Channel>" );
+        pw.println("    implements " + c.getQualifiedName());
+        pw.println("{");
+        pw.println("    protected " + c.getSimpleName() + "ChannelListener(" + c.getQualifiedName() + "Channel channel) {");
+        pw.println("       super(channel);");
+        pw.println("    }");
+        pw.println("}");
+        pw.flush();
+    }
+
+}

Propchange: incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/jacob/ap/ChannelTypeAnnotationProcessor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/jacob/ap/JacobAnnotationProcessorFactory.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/jacob/ap/JacobAnnotationProcessorFactory.java?view=auto&rev=480619
==============================================================================
--- incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/jacob/ap/JacobAnnotationProcessorFactory.java (added)
+++ incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/jacob/ap/JacobAnnotationProcessorFactory.java Wed Nov 29 08:48:47 2006
@@ -0,0 +1,40 @@
+package org.apache.ode.jacob.ap;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import com.sun.mirror.apt.AnnotationProcessor;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.apt.AnnotationProcessorFactory;
+import com.sun.mirror.apt.AnnotationProcessors;
+import com.sun.mirror.declaration.AnnotationTypeDeclaration;
+
+public class JacobAnnotationProcessorFactory implements AnnotationProcessorFactory {
+
+    private static final List<String> __supported  = Arrays.asList(
+            new String[] { ChannelType.class.getName() }); 
+    
+    public Collection<String> supportedOptions() {
+        return Collections.emptyList();
+    }
+
+    public Collection<String> supportedAnnotationTypes() {
+        return __supported;
+    }
+
+    public AnnotationProcessor getProcessorFor(Set<AnnotationTypeDeclaration> atd, AnnotationProcessorEnvironment ape) {
+        
+        if (atd.isEmpty())
+            return AnnotationProcessors.NO_OP;
+        
+        for (AnnotationTypeDeclaration a: atd) {
+            if (a.getQualifiedName().equals(ChannelType.class.getName()))
+                return  new ChannelTypeAnnotationProcessor(a,ape);
+        }
+        return AnnotationProcessors.NO_OP;
+    }
+   
+}

Propchange: incubator/ode/trunk/jacob-ap/src/main/java/org/apache/ode/jacob/ap/JacobAnnotationProcessorFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ode/trunk/jacob-ap/src/main/resources/META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/jacob-ap/src/main/resources/META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory?view=auto&rev=480619
==============================================================================
--- incubator/ode/trunk/jacob-ap/src/main/resources/META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory (added)
+++ incubator/ode/trunk/jacob-ap/src/main/resources/META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory Wed Nov 29 08:48:47 2006
@@ -0,0 +1 @@
+org.apache.ode.jacob.ap.JacobAnnotationProcessorFactory