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);
+ }
}
Show replies by date