in doc-architect/doc-architect-core/src/main/java/com/docarchitect/core/scanner/impl/java/JpaEntityScanner.java [357:425]
private void parseJpaEntities(Path javaFile, List<DataEntity> dataEntities, List<Relationship> relationships) throws IOException {
Optional<CompilationUnit> cuOpt = parseJavaFile(javaFile);
if (cuOpt.isEmpty()) {
return;
}
CompilationUnit cu = cuOpt.get();
cu.findAll(ClassOrInterfaceDeclaration.class).forEach(classDecl -> {
Optional<AnnotationExpr> entityAnnotation = classDecl.getAnnotations().stream()
.filter(ann -> ENTITY_ANNOTATIONS.contains(ann.getNameAsString()))
.findFirst();
if (entityAnnotation.isEmpty()) {
return;
}
String annotationType = entityAnnotation.get().getNameAsString();
boolean isMongoDocument = DOCUMENT_ANNOTATION.equals(annotationType);
String className = classDecl.getNameAsString();
String packageName = cu.getPackageDeclaration()
.map(pd -> pd.getNameAsString())
.orElse("");
String fullyQualifiedName = packageName.isEmpty() ? className : packageName + "." + className;
String tableName = isMongoDocument
? extractCollectionName(classDecl, className)
: extractTableName(classDecl, className);
String entityType = isMongoDocument ? DATA_ENTITY_TYPE_COLLECTION : DATA_ENTITY_TYPE_TABLE;
String description = (isMongoDocument ? DOCUMENT_DESCRIPTION_PREFIX : ENTITY_DESCRIPTION_PREFIX) + className;
List<DataEntity.Field> fields = new ArrayList<>();
String primaryKey = null;
for (FieldDeclaration fieldDecl : classDecl.getFields()) {
Optional<AnnotationExpr> relationshipAnnotation = fieldDecl.getAnnotations().stream()
.filter(ann -> RELATIONSHIP_ANNOTATIONS.contains(ann.getNameAsString()))
.findFirst();
if (relationshipAnnotation.isPresent()) {
extractRelationship(fieldDecl, fullyQualifiedName, relationshipAnnotation.get(), relationships);
} else {
DataEntity.Field field = extractField(fieldDecl);
if (field != null) {
fields.add(field);
if (isIdField(fieldDecl) && primaryKey == null) {
primaryKey = field.name();
}
}
}
}
DataEntity entity = new DataEntity(
fullyQualifiedName,
tableName,
entityType,
fields,
primaryKey,
description
);
dataEntities.add(entity);
log.debug("Found {} entity: {} -> {}: {}",
isMongoDocument ? "MongoDB" : "JPA",
fullyQualifiedName,
entityType,
tableName);
});
}