[dna-commits] DNA SVN: r326 - trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java.

dna-commits at lists.jboss.org dna-commits at lists.jboss.org
Tue Jul 1 20:51:55 EDT 2008


Author: spagop
Date: 2008-07-01 20:51:55 -0400 (Tue, 01 Jul 2008)
New Revision: 326

Modified:
   trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/AbstractJavaMetadata.java
   trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/JavaMetadata.java
   trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/JavaMetadataSequencer.java
   trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/JavaMetadataUtil.java
Log:
enhancement for more meta data generating

Modified: trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/AbstractJavaMetadata.java
===================================================================
--- trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/AbstractJavaMetadata.java	2008-07-02 00:50:09 UTC (rev 325)
+++ trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/AbstractJavaMetadata.java	2008-07-02 00:51:55 UTC (rev 326)
@@ -21,7 +21,26 @@
  */
 package org.jboss.dna.sequencer.java;
 
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.jdt.core.dom.Annotation;
 import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.ImportDeclaration;
+import org.eclipse.jdt.core.dom.MarkerAnnotation;
+import org.eclipse.jdt.core.dom.NormalAnnotation;
+import org.eclipse.jdt.core.dom.PackageDeclaration;
+import org.eclipse.jdt.core.dom.SingleMemberAnnotation;
+import org.eclipse.jdt.core.dom.TypeDeclaration;
+import org.jboss.dna.sequencer.java.annotationmetadata.MarkerAnnotationMetadata;
+import org.jboss.dna.sequencer.java.annotationmetadata.NormalAnnotationMetadata;
+import org.jboss.dna.sequencer.java.annotationmetadata.SingleMemberAnnotationMetadata;
+import org.jboss.dna.sequencer.java.importmetadata.ImportMetadata;
+import org.jboss.dna.sequencer.java.importmetadata.ImportOnDemandMetadata;
+import org.jboss.dna.sequencer.java.importmetadata.SingleImportMetadata;
+import org.jboss.dna.sequencer.java.packagemetadata.PackageMetadata;
+import org.jboss.dna.sequencer.java.typemetadata.ClassMetadata;
+import org.jboss.dna.sequencer.java.typemetadata.InterfaceMetadata;
+import org.jboss.dna.sequencer.java.typemetadata.TypeMetadata;
 
 /**
  * @author Serge Pagop
@@ -29,18 +48,103 @@
 public abstract class AbstractJavaMetadata {
 
     /**
-     * Create a <code>PackageMetadata</code> of the a compilation unit.
+     * Create a set of <code>ImportMetadata</code> of a compilation unit.
      * 
      * @param unit - the compilation unit.
+     * @return all static import declarations from the compilation unit.
+     */
+    @SuppressWarnings( "unchecked" )
+    protected List<ImportMetadata> createImportMetadata( CompilationUnit unit ) {
+        List<ImportMetadata> metadata = new ArrayList<ImportMetadata>();
+        List<ImportDeclaration> imports = unit.imports();
+        if (!imports.isEmpty()) {
+            for (ImportDeclaration importDeclaration : imports) {
+                if (importDeclaration.isOnDemand()) {
+                    // typeImportOnDemand and staticImportOnDemand
+                    ImportOnDemandMetadata onDemandMetadata = new ImportOnDemandMetadata();
+                    onDemandMetadata.setName(JavaMetadataUtil.getName(importDeclaration.getName()));
+                    metadata.add(onDemandMetadata);
+                } else {
+                    // singleTypeImport and singleStaticImport
+                    SingleImportMetadata singleImportMetadata = new SingleImportMetadata();
+                    singleImportMetadata.setName(JavaMetadataUtil.getName(importDeclaration.getName()));
+                    metadata.add(singleImportMetadata);
+                }
+
+            }
+        }
+        return metadata;
+    }
+
+    /**
+     * Create a <code>PackageMetadata</code> of a compilation unit.
+     * 
+     * @param unit - the compilation unit.
      * @return the package meta data of a compilation unit.
      */
     @SuppressWarnings( "unchecked" )
     protected PackageMetadata createPackageMetadata( CompilationUnit unit ) {
-        PackageMetadata packageMetadata = new PackageMetadata();
-        packageMetadata.setJavadoc(unit.getPackage().getJavadoc());
-        packageMetadata.setAnnotations(unit.getPackage().annotations());
-        packageMetadata.setName(unit.getPackage().getName().getFullyQualifiedName());
+        PackageMetadata packageMetadata = null;
+        List<Annotation> annotations = null;
+        PackageDeclaration packageDeclaration = unit.getPackage();
+        if (packageDeclaration != null) {
+            annotations = packageDeclaration.annotations();
+            packageMetadata = new PackageMetadata();
+            packageMetadata.setName(JavaMetadataUtil.getName(unit.getPackage().getName()));
+            if (!annotations.isEmpty()) {
+                for (Object object : annotations) {
+
+                    if (object instanceof NormalAnnotation) {
+                        NormalAnnotation normalAnnotation = (NormalAnnotation)object;
+                        NormalAnnotationMetadata normalAnnotationMetadata = new NormalAnnotationMetadata();
+                        normalAnnotationMetadata.setName(JavaMetadataUtil.getName(normalAnnotation.getTypeName()));
+                        normalAnnotationMetadata.setNormal(Boolean.TRUE);
+                        packageMetadata.getAnnotationMetada().add(normalAnnotationMetadata);
+                    }
+                    if (object instanceof MarkerAnnotation) {
+                        MarkerAnnotation markerAnnotation = (MarkerAnnotation)object;
+                        MarkerAnnotationMetadata markerAnnotationMetadata = new MarkerAnnotationMetadata();
+                        markerAnnotationMetadata.setName(JavaMetadataUtil.getName(markerAnnotation.getTypeName()));
+                        markerAnnotationMetadata.setMarker(Boolean.TRUE);
+                        packageMetadata.getAnnotationMetada().add(markerAnnotationMetadata);
+                    }
+                    if (object instanceof SingleMemberAnnotation) {
+                        SingleMemberAnnotation singleMemberAnnotation = (SingleMemberAnnotation)object;
+                        SingleMemberAnnotationMetadata singleMemberAnnotationMetadata = new SingleMemberAnnotationMetadata();
+                        singleMemberAnnotationMetadata.setName(JavaMetadataUtil.getName(singleMemberAnnotation.getTypeName()));
+                        singleMemberAnnotationMetadata.setSingle(Boolean.TRUE);
+                        packageMetadata.getAnnotationMetada().add(singleMemberAnnotationMetadata);
+
+                    }
+                }
+            }
+        }
         return packageMetadata;
     }
 
+    /**
+     * Create a list with all top level types of a compilation unit.
+     * 
+     * @param unit - the compilation unit.
+     * @return meta data for types in this compilation unit.
+     */
+    @SuppressWarnings( "unchecked" )
+    protected List<TypeMetadata> createTypeMetadata( CompilationUnit unit ) {
+        List<TypeMetadata> metadata = new ArrayList<TypeMetadata>();
+        List<TypeDeclaration> topLevelType = unit.types();
+        for (TypeDeclaration typeDeclaration : topLevelType) {
+            if (typeDeclaration.isInterface()) {
+                // is an interface top level type
+                InterfaceMetadata interfaceMetadata = new InterfaceMetadata();
+                interfaceMetadata.setName(JavaMetadataUtil.getName(typeDeclaration.getName()));
+                metadata.add(interfaceMetadata);
+            } else {
+                // is a class top level type
+                ClassMetadata classMetadata = new ClassMetadata();
+                classMetadata.setName(JavaMetadataUtil.getName(typeDeclaration.getName()));
+                metadata.add(classMetadata);
+            }
+        }
+        return metadata;
+    }
 }

Modified: trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/JavaMetadata.java
===================================================================
--- trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/JavaMetadata.java	2008-07-02 00:50:09 UTC (rev 325)
+++ trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/JavaMetadata.java	2008-07-02 00:51:55 UTC (rev 326)
@@ -22,15 +22,26 @@
 package org.jboss.dna.sequencer.java;
 
 import java.io.InputStream;
-import org.eclipse.jdt.core.dom.ASTNode;
+import java.util.List;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.jboss.dna.common.monitor.ProgressMonitor;
+import org.jboss.dna.sequencer.java.importmetadata.ImportMetadata;
+import org.jboss.dna.sequencer.java.packagemetadata.PackageMetadata;
 
 /**
  * @author Serge Pagop
  */
 public class JavaMetadata extends AbstractJavaMetadata {
+    
+    /** The package representation of a compilation unit. */
     private PackageMetadata packageMetadata;
+    
+    /** All the import declarations of a compilation unit. */
+    private List<ImportMetadata> importMetadata;
+    
+    /** variables */
+    
+    /** methods */
 
     private JavaMetadata() {
     }
@@ -60,18 +71,30 @@
             return null;
         }
 
-        ASTNode rootNode = CompilationUnitParser.runJLS3Conversion(source, true);
-        javaMetadata.packageMetadata = javaMetadata.createPackageMetadata((CompilationUnit)rootNode);
+        CompilationUnit unit = (CompilationUnit)CompilationUnitParser.runJLS3Conversion(source, true);
+        if (unit != null) {
+            javaMetadata.packageMetadata = javaMetadata.createPackageMetadata(unit);
+            javaMetadata.importMetadata = javaMetadata.createImportMetadata(unit);
+        }
+
         return javaMetadata;
     }
 
     /**
-     * Gets the PackageMetadata.
+     * Gets the <code>PackageMetadata</code>.
      * 
-     * @return the packageMetadata
+     * @return the PackageMetadata or null if there is not package declaration for the unit.
      */
     public final PackageMetadata getPackageMetadata() {
         return packageMetadata;
     }
 
+    /**
+     * Gets a list of <code>ImportMetadata</code>.
+     * 
+     * @return all the importMetadata of this unit if there is one.
+     */
+    public List<ImportMetadata> getImportMetadata() {
+        return importMetadata;
+    }
 }

Modified: trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/JavaMetadataSequencer.java
===================================================================
--- trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/JavaMetadataSequencer.java	2008-07-02 00:50:09 UTC (rev 325)
+++ trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/JavaMetadataSequencer.java	2008-07-02 00:51:55 UTC (rev 326)
@@ -23,7 +23,14 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.List;
+import org.apache.commons.lang.StringUtils;
 import org.jboss.dna.common.monitor.ProgressMonitor;
+import org.jboss.dna.sequencer.java.annotationmetadata.AnnotationMetadata;
+import org.jboss.dna.sequencer.java.annotationmetadata.MarkerAnnotationMetadata;
+import org.jboss.dna.sequencer.java.annotationmetadata.NormalAnnotationMetadata;
+import org.jboss.dna.sequencer.java.annotationmetadata.SingleMemberAnnotationMetadata;
+import org.jboss.dna.sequencer.java.packagemetadata.PackageMetadata;
 import org.jboss.dna.spi.graph.NameFactory;
 import org.jboss.dna.spi.graph.Path;
 import org.jboss.dna.spi.graph.PathFactory;
@@ -54,10 +61,28 @@
     public static final String JAVA_PACKAGE_CHILD_NODE = "java:package";
     public static final String JAVA_PACKAGE_DECLARATION_CHILD_NODE = "java:packageDeclaration";
     public static final String JAVA_PACKAGE_NAME = "java:packageName";
+    
+    // Annnotation declaration
     public static final String JAVA_ANNOTATION_CHILD_NODE = "java:annotation";
+    public static final String JAVA_ANNOTATION_DECLARATION_CHILD_NODE = "java:annotationDeclaration";
+    public static final String JAVA_ANNOTATION_TYPE_CHILD_NODE = "java:annotationType";
+    public static final String JAVA_MARKER_ANNOTATION_CHILD_NODE = "java:markerAnnotation";
+    public static final String JAVA_NORMAL_ANNOTATION_CHILD_NODE = "java:normalAnnotation";
+    public static final String JAVA_SINGLE_ELEMENT_ANNOTATION_CHILD_NODE = "java:singleElementAnnotation";
+    public static final String JAVA_ANNOTATION_TYPE_NAME = "java:typeName";
 
+    // Import declaration
+    public static final String JAVA_IMPORT_CHILD_NODE = "java:import";
+    public static final String JAVA_IMPORT_DECLARATION_CHILD_NODE = "java:importDeclaration";
+    public static final String JAVA_SINGLE_IMPORT_CHILD_NODE = "java:singleImport";
+    public static final String JAVA_SINGLE_TYPE_IMPORT_DECLARATION_CHILD_NODE = "java:singleTypeImportDeclaration";
+    
+    public static final String JAVA_IMPORT_ON_DEMAND_CHILD_NODE = "java:importOnDemand";
+    public static final String JAVA_TYPE_IMPORT_ON_DEMAND_DECLARATION_CHILD_NODE = "java:typeImportOnDemandDeclaration";
+    public static final String JAVA_IMPORT_TYPE_NAME = "typeName";
+
     private static final String SLASH = "/";
-
+    
     /**
      * {@inheritDoc}
      * 
@@ -87,13 +112,73 @@
             output.setProperty(javaCompilationUnitNode,
                                nameFactory.create(JAVA_COMPILATION_UNIT_PRIMARY_TYPE),
                                "java:compilationUnit");
-            Path javaPackageDeclarationChildNode = pathFactory.create(JAVA_COMPILATION_UNIT_NODE + SLASH
-                                                                      + JAVA_PACKAGE_CHILD_NODE + SLASH
-                                                                      + JAVA_PACKAGE_DECLARATION_CHILD_NODE);
-            output.setProperty(javaPackageDeclarationChildNode,
-                               nameFactory.create(JAVA_PACKAGE_NAME),
-                               javaMetadata.getPackageMetadata().getName());
 
+            // Process package declaration of a unit.
+            PackageMetadata packageMetadata = javaMetadata.getPackageMetadata();
+            if (packageMetadata != null) {
+                if (StringUtils.isNotEmpty(packageMetadata.getName())) {
+                    
+                    Path javaPackageDeclarationChildNode = pathFactory.create(JAVA_COMPILATION_UNIT_NODE + SLASH
+                                                                              + JAVA_PACKAGE_CHILD_NODE + SLASH
+                                                                              + JAVA_PACKAGE_DECLARATION_CHILD_NODE);
+                    output.setProperty(javaPackageDeclarationChildNode,
+                                       nameFactory.create(JAVA_PACKAGE_NAME),
+                                       javaMetadata.getPackageMetadata().getName());
+                }
+
+                List<AnnotationMetadata> annotations = packageMetadata.getAnnotationMetada();
+                if (!annotations.isEmpty()) {
+                    for (AnnotationMetadata annotationMetadata : annotations) {
+                        if (annotationMetadata instanceof MarkerAnnotationMetadata) {
+                            MarkerAnnotationMetadata markerAnnotationMetadata = (MarkerAnnotationMetadata)annotationMetadata;
+                            Path markerAnnotationChildNode = pathFactory.create(JAVA_COMPILATION_UNIT_NODE + SLASH
+                                                                                + JAVA_PACKAGE_CHILD_NODE + SLASH
+                                                                                + JAVA_PACKAGE_DECLARATION_CHILD_NODE + SLASH
+                                                                                + JAVA_ANNOTATION_CHILD_NODE + SLASH
+                                                                                + JAVA_ANNOTATION_DECLARATION_CHILD_NODE + SLASH
+                                                                                + JAVA_ANNOTATION_TYPE_CHILD_NODE + SLASH
+                                                                                + JAVA_MARKER_ANNOTATION_CHILD_NODE);
+                            System.out.println("markerAnnotationChildNode: " + markerAnnotationChildNode.getString());
+                            output.setProperty(markerAnnotationChildNode,
+                                               nameFactory.create(JAVA_ANNOTATION_TYPE_NAME),
+                                               markerAnnotationMetadata.getName());
+                        }
+                        if (annotationMetadata instanceof SingleMemberAnnotationMetadata) {
+                            SingleMemberAnnotationMetadata singleMemberAnnotationMetadata = (SingleMemberAnnotationMetadata)annotationMetadata;
+                            Path singleMemberAnnotationChildNode = pathFactory.create(JAVA_COMPILATION_UNIT_NODE + SLASH
+                                                                                      + JAVA_PACKAGE_CHILD_NODE + SLASH
+                                                                                      + JAVA_PACKAGE_DECLARATION_CHILD_NODE
+                                                                                      + SLASH + JAVA_ANNOTATION_CHILD_NODE
+                                                                                      + SLASH
+                                                                                      + JAVA_ANNOTATION_DECLARATION_CHILD_NODE
+                                                                                      + SLASH + JAVA_ANNOTATION_TYPE_CHILD_NODE
+                                                                                      + SLASH
+                                                                                      + JAVA_SINGLE_ELEMENT_ANNOTATION_CHILD_NODE);
+                            output.setProperty(singleMemberAnnotationChildNode,
+                                               nameFactory.create(JAVA_ANNOTATION_TYPE_NAME),
+                                               singleMemberAnnotationMetadata.getName());
+                        }
+                        if (annotationMetadata instanceof NormalAnnotationMetadata) {
+                            NormalAnnotationMetadata normalAnnotationMetadata = (NormalAnnotationMetadata)annotationMetadata;
+                            Path normalAnnotationChildNode = pathFactory.create(JAVA_COMPILATION_UNIT_NODE + SLASH
+                                                                                + JAVA_PACKAGE_CHILD_NODE + SLASH
+                                                                                + JAVA_PACKAGE_DECLARATION_CHILD_NODE + SLASH
+                                                                                + JAVA_ANNOTATION_CHILD_NODE + SLASH
+                                                                                + JAVA_ANNOTATION_DECLARATION_CHILD_NODE + SLASH
+                                                                                + JAVA_ANNOTATION_TYPE_CHILD_NODE + SLASH
+                                                                                + JAVA_NORMAL_ANNOTATION_CHILD_NODE);
+                            
+                            
+                            output.setProperty(normalAnnotationChildNode,
+                                               nameFactory.create(JAVA_ANNOTATION_TYPE_NAME),
+                                               normalAnnotationMetadata.getName());
+                        }
+                    }
+                }
+            }
+
+            // Process import declarations of a unit
+            //TODO write BDD to show how the works
         }
         progressMonitor.done();
     }

Modified: trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/JavaMetadataUtil.java
===================================================================
--- trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/JavaMetadataUtil.java	2008-07-02 00:50:09 UTC (rev 325)
+++ trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/JavaMetadataUtil.java	2008-07-02 00:51:55 UTC (rev 326)
@@ -23,6 +23,7 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.internal.compiler.util.Util;
 
 /**
@@ -55,4 +56,18 @@
         char[] source = Util.getInputStreamAsCharArray(inputStream, (int)length, encoding);
         return source;
     }
+
+    /**
+     * Get the fully qualified name from the <code>Name</code>.
+     * 
+     * @param name - the name to process.
+     * @return a FQN of the name.
+     */
+    public static String getName( Name name ) {
+        if (name != null) {
+            return name.getFullyQualifiedName();
+        }
+        final String message = "name cannot be null";
+        throw new IllegalArgumentException(message);
+    }
 }




More information about the dna-commits mailing list