package com.github.florent37.rxandroidorm.generator;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeSpec;
import com.github.florent37.rxandroidorm.Constants;
import javax.lang.model.element.Modifier;
/**
* Created by florentchampigny on 18/01/2016.
*/
public class DAOGenerator {
public DAOGenerator() {
}
public TypeSpec generate() {
return TypeSpec.classBuilder(Constants.DAO_CLASS_NAME)
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
.addField(Constants.daoClassName, "INSTANCE", Modifier.PRIVATE, Modifier.STATIC)
.addField(Constants.databaseClassName, "database", Modifier.PRIVATE)
.addField(Constants.dbHelperClassName, "helper", Modifier.PRIVATE)
.addMethod(MethodSpec.constructorBuilder().addModifiers(Modifier.PRIVATE).build())
.addMethod(MethodSpec.methodBuilder("onCreate")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.addParameter(Constants.applicationClassName, "application")
.addStatement("if(INSTANCE == null) INSTANCE = new $T()", Constants.daoClassName)
.addStatement("INSTANCE.helper = new $T(application)", Constants.dbHelperClassName)
.build())
.addMethod(MethodSpec.methodBuilder("getInstance")
.returns(Constants.daoClassName)
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.addStatement("return INSTANCE")
.build())
.addMethod(MethodSpec.methodBuilder("onDestroy")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.build())
.addMethod(MethodSpec.methodBuilder("getDatabase")
.returns(Constants.databaseClassName)
.addModifiers(Modifier.PUBLIC)
.addStatement("return database")
.build())
.addMethod(MethodSpec.methodBuilder("open")
.returns(Constants.daoClassName)
.addException(ClassName.get("android.database", "SQLException"))
.addModifiers(Modifier.PUBLIC)
.addStatement("database = helper.getWritableDatabase()")
.addStatement("return this")
.build())
.addMethod(MethodSpec.methodBuilder("close")
.returns(Constants.daoClassName)
.addModifiers(Modifier.PUBLIC)
.addStatement("helper.close()")
.addStatement("return this")
.build())
.build();
}
}