package com.github.florent37.rxandroidorm.generator;
import com.github.florent37.rxandroidorm.Constants;
import com.github.florent37.rxandroidorm.ProcessUtils;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.ParameterizedTypeName;
import com.squareup.javapoet.TypeName;
import com.squareup.javapoet.TypeSpec;
import com.squareup.javapoet.TypeVariableName;
import javax.lang.model.element.Modifier;
/**
* Created by Thibaud Giovannetti on 09/05/2017.
*/
public class ModelORMInterfaceGenerator {
public ModelORMInterfaceGenerator() {
}
public TypeSpec generate() {
final TypeVariableName T = TypeVariableName.get("T");
final TypeName LIST_OF_T = ParameterizedTypeName.get(ClassName.get("java.util", "List"), T);
final TypeName RETURN_T = ProcessUtils.observableOf(T);
final TypeName RETURN_LIST_T = ProcessUtils.observableOf(LIST_OF_T);
return TypeSpec.interfaceBuilder(Constants.DATABASE_COMMON_INTERFACE_NAME)
.addModifiers(Modifier.PUBLIC)
.addTypeVariable(T)
.addMethod(MethodSpec.methodBuilder("select")
.addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
.returns(Constants.queryBuilderClassName)
.build())
.addMethod(MethodSpec.methodBuilder("add")
.addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
.addParameter(T, "object", Modifier.FINAL)
.returns(RETURN_T)
.build())
.addMethod(MethodSpec.methodBuilder("add")
.addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
.addParameter(LIST_OF_T, "objects", Modifier.FINAL)
.returns(RETURN_LIST_T)
.build())
.addMethod(MethodSpec.methodBuilder("update")
.addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
.addParameter(T, "object", Modifier.FINAL)
.returns(RETURN_T)
.build())
.addMethod(MethodSpec.methodBuilder("update")
.addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
.addParameter(LIST_OF_T, "objects", Modifier.FINAL)
.returns(RETURN_LIST_T)
.build())
.addMethod(MethodSpec.methodBuilder("delete")
.addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
.addParameter(T, "object", Modifier.FINAL)
.returns(ProcessUtils.observableOf(TypeName.BOOLEAN.box()))
.build())
.addMethod(MethodSpec.methodBuilder("delete")
.addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
.addParameter(LIST_OF_T, "objects", Modifier.FINAL)
.returns(ProcessUtils.observableOf(TypeName.BOOLEAN.box()))
.build())
.addMethod(MethodSpec.methodBuilder("deleteAll")
.addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
.returns(ProcessUtils.observableOf(TypeName.BOOLEAN.box()))
.build())
.addMethod(MethodSpec.methodBuilder("count")
.addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
.returns(ProcessUtils.observableOf(TypeName.INT.box()))
.build())
.build();
}
}