SequencerOutput output,
SequencerContext context,
ProgressMonitor progressMonitor ) {
progressMonitor.beginTask(10, JavaMetadataI18n.sequencerTaskName);
JavaMetadata javaMetadata = null;
NameFactory nameFactory = context.getFactories().getNameFactory();
PathFactory pathFactory = context.getFactories().getPathFactory();
try {
javaMetadata = JavaMetadata.instance(stream, JavaMetadataUtil.length(stream), null, progressMonitor.createSubtask(10));
if (progressMonitor.isCancelled()) return;
} catch (IOException e) {
e.printStackTrace();
return;
}
if (javaMetadata != null) {
Path javaCompilationUnitNode = pathFactory.create(JAVA_COMPILATION_UNIT_NODE);
output.setProperty(javaCompilationUnitNode,
nameFactory.create(JAVA_COMPILATION_UNIT_PRIMARY_TYPE),
"java:compilationUnit");
// sequence 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());
}
int markerAnnotationIndex = 1;
int singleAnnatationIndex = 1;
int normalAnnotationIndex = 1;
for (AnnotationMetadata annotationMetadata : packageMetadata.getAnnotationMetada()) {
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 + "["
+ markerAnnotationIndex + "]");
output.setProperty(markerAnnotationChildNode,
nameFactory.create(JAVA_MARKER_ANNOTATION_NAME),
markerAnnotationMetadata.getName());
markerAnnotationIndex++;
}
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
+ "[" + singleAnnatationIndex + "]");
output.setProperty(singleMemberAnnotationChildNode,
nameFactory.create(JAVA_SINGLE_ANNOTATION_NAME),
singleMemberAnnotationMetadata.getName());
singleAnnatationIndex++;
}
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 + "["
+ normalAnnotationIndex + "]");
output.setProperty(normalAnnotationChildNode,
nameFactory.create(JAVA_NORMALANNOTATION_NAME),
normalAnnotationMetadata.getName());
normalAnnotationIndex++;
}
}
}
// sequence import declarations of a unit
int importOnDemandIndex = 1;
int singleImportIndex = 1;
for (ImportMetadata importMetadata : javaMetadata.getImports()) {
if (importMetadata instanceof ImportOnDemandMetadata) {
ImportOnDemandMetadata importOnDemandMetadata = (ImportOnDemandMetadata)importMetadata;
Path importOnDemandChildNode = pathFactory.create(JAVA_COMPILATION_UNIT_NODE + SLASH + JAVA_IMPORT_CHILD_NODE
+ SLASH + JAVA_IMPORT_DECLARATION_CHILD_NODE + SLASH
+ JAVA_ON_DEMAND_IMPORT_CHILD_NODE + SLASH
+ JAVA_ON_DEMAND_IMPORT_TYPE_DECLARATION_CHILD_NODE + "["
+ importOnDemandIndex + "]");
output.setProperty(importOnDemandChildNode,
nameFactory.create(JAVA_ON_DEMAND_IMPORT_NAME),
importOnDemandMetadata.getName());
importOnDemandIndex++;
}
if (importMetadata instanceof SingleImportMetadata) {
SingleImportMetadata singleImportMetadata = (SingleImportMetadata)importMetadata;
Path singleImportChildNode = pathFactory.create(JAVA_COMPILATION_UNIT_NODE + SLASH + JAVA_IMPORT_CHILD_NODE
+ SLASH + JAVA_IMPORT_DECLARATION_CHILD_NODE + SLASH
+ JAVA_SINGLE_IMPORT_CHILD_NODE + SLASH
+ JAVA_SINGLE_IMPORT_TYPE_DECLARATION_CHILD_NODE + "["
+ singleImportIndex + "]");
output.setProperty(singleImportChildNode,
nameFactory.create(JAVA_SINGLE_IMPORT_NAME),
singleImportMetadata.getName());
singleImportIndex++;
}
}
// sequence type declaration (class declaration) information
for (TypeMetadata typeMetadata : javaMetadata.getTypeMetadata()) {
// class declaration
if (typeMetadata instanceof ClassMetadata) {
String normalClassRootPath = JAVA_COMPILATION_UNIT_NODE + SLASH + JAVA_UNIT_TYPE_CHILD_NODE + SLASH
+ JAVA_CLASS_DECLARATION_CHILD_NODE + SLASH + JAVA_NORMAL_CLASS_CHILD_NODE