public ColumnElement(Registry registry, TypeElement enclosingType, VariableElement element) { this.element = element; this.column = element.getAnnotation(Column.class); this.enclosingType = enclosingType; this.deserializedType = registry.getElements().getTypeElement(element.asType().toString()); final TypeAdapterElement typeAdapterElement = registry.getTypeAdapterElement(deserializedType); final TypeElement modelElement = registry.getElements().getTypeElement("ollie.Model"); final DeclaredType modelType = registry.getTypes().getDeclaredType(modelElement); isModel = registry.getTypes().isAssignable(element.asType(), modelType); if (isModel) { final Table table = deserializedType.getAnnotation(Table.class); serializedType = registry.getElements().getTypeElement(Long.class.getName()); modelTableName = table.value(); } else if (typeAdapterElement != null) { serializedType = typeAdapterElement.getSerializedType(); } else { serializedType = deserializedType; } this.sqlType = SQL_TYPE_MAP.get(getSerializedQualifiedName()); List<? extends AnnotationMirror> annotationMirrors = element.getAnnotationMirrors(); for (AnnotationMirror annotationMirror : annotationMirrors) { try { Class annotationClass = Class.forName(annotationMirror.getAnnotationType().toString()); annotations.put(annotationClass, element.getAnnotation(annotationClass)); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
@Override public void writeSource(Writer writer, TypeElement element) throws IOException { final String simpleName = createSimpleName(element); final String modelSimpleName = element.getSimpleName().toString(); final String modelQualifiedName = element.getQualifiedName().toString(); final String tableName = element.getAnnotation(Table.class).value(); final Set<ColumnElement> columns = registry.getColumnElements(element); JavaWriter javaWriter = new JavaWriter(writer); javaWriter.setCompressingTypes(true); javaWriter.setIndent("\t"); javaWriter.emitSingleLineComment("Generated by Ollie. Do not modify!"); javaWriter.emitPackage("ollie"); writeImports(javaWriter, modelQualifiedName, columns); javaWriter.beginType(simpleName, "class", MODIFIERS, "ModelAdapter<" + modelSimpleName + ">"); writeGetModelType(javaWriter, modelSimpleName); writeGetTableName(javaWriter, tableName); writeGetSchema(javaWriter, tableName, columns); writeLoad(javaWriter, modelQualifiedName, columns); writeSave(javaWriter, modelQualifiedName, columns); writeDelete(javaWriter, modelQualifiedName, tableName); javaWriter.endType(); }