Search in sources :

Example 1 with PageRequest

use of com.abubusoft.kripton.android.PageRequest in project kripton by xcesco.

the class SelectPaginatedResultHelper method buildSpecializedPagedResultClass.

/**
 * Build paginated result class handler.
 *
 * @param classBuilder
 *            the class builder
 * @param method
 *            the method
 * @return name of generated class
 */
public static String buildSpecializedPagedResultClass(TypeSpec.Builder classBuilder, SQLiteModelMethod method) {
    // TypeName entityTypeName =
    // TypeUtility.typeName(method.getParent().getEntityClassName());
    TypeName entityTypeName = TypeUtility.typeName(method.getEntity().getName());
    String pagedResultName = "PaginatedResult" + (pagedResultCounter++);
    TypeSpec.Builder typeBuilder = TypeSpec.classBuilder(pagedResultName).addModifiers(Modifier.PUBLIC).superclass(TypeUtility.parameterizedTypeName(TypeUtility.className(PagedResultImpl.class), entityTypeName));
    // add fields and define constructor
    MethodSpec.Builder setupBuilder = MethodSpec.constructorBuilder();
    MethodSpec.Builder executeBuilder = MethodSpec.methodBuilder("execute").addModifiers(Modifier.PUBLIC).returns(TypeUtility.parameterizedTypeName(TypeUtility.className(List.class), entityTypeName));
    executeBuilder.addComment("Executor builder - BEGIN");
    // method for execution with pageRequest
    // @formatter:off
    ClassName dataSourceClassName = BindDataSourceBuilder.generateDataSourceName(method.getParent().getParent());
    MethodSpec.Builder executeWithPageRequestBuilder = MethodSpec.methodBuilder("execute").addModifiers(Modifier.PUBLIC).addParameter(PageRequest.class, "pageRequest").returns(TypeUtility.parameterizedTypeName(TypeUtility.className(List.class), entityTypeName));
    executeWithPageRequestBuilder.addComment("Executor with pageRequet - BEGIN");
    executeWithPageRequestBuilder.addCode("return $T.getInstance().executeBatch(daoFactory -> daoFactory.get$L().$L" + SelectPaginatedResultHelper.WITH_PAGE_REQUEST_PREFIX + "(", dataSourceClassName, method.getParentName(), method.getName());
    ClassName daoFactoryClassName = BindDaoFactoryBuilder.generateDaoFactoryClassName(method.getParent().getParent());
    MethodSpec.Builder executeWithDaoFactortBuilder = MethodSpec.methodBuilder("execute").addParameter(daoFactoryClassName, "daoFactory").addModifiers(Modifier.PUBLIC).returns(TypeUtility.parameterizedTypeName(TypeUtility.className(List.class), entityTypeName));
    executeWithDaoFactortBuilder.addCode("return daoFactory.get$L().$L(", method.getParentName(), method.getName());
    if (!method.isPagedLiveData()) {
        executeBuilder.addCode("list=$T.this.$L(", TypeUtility.typeName(method.getParent().getElement(), BindDaoBuilder.SUFFIX), method.getName());
    }
    // we have always a first parameter
    String separator = "";
    ParameterSpec parameterSpec;
    for (Pair<String, TypeName> item : method.getParameters()) {
        if (method.hasDynamicPageSizeConditions() && method.dynamicPageSizeName.equals(item.value0)) {
            setupBuilder.addStatement("this.pageSize=$L", item.value0);
        } else {
            // field
            typeBuilder.addField(item.value1, item.value0);
            setupBuilder.addStatement("this.$L=$L", item.value0, item.value0);
        }
        // construtor
        parameterSpec = ParameterSpec.builder(item.value1, item.value0).build();
        setupBuilder.addParameter(parameterSpec);
        // execute
        if (method.dynamicPageSizeName != null && method.dynamicPageSizeName.equals(item.value0)) {
            if (!method.isPagedLiveData()) {
                executeBuilder.addCode(separator + "this.pageSize");
            }
            executeWithDaoFactortBuilder.addCode(separator + "this.pageSize");
            executeWithPageRequestBuilder.addCode(separator + "this.pageSize");
        } else {
            if (!method.isPagedLiveData()) {
                executeBuilder.addCode(separator + item.value0);
            }
            executeWithDaoFactortBuilder.addCode(separator + item.value0);
            executeWithPageRequestBuilder.addCode(separator + item.value0);
        }
        separator = ", ";
    }
    if (method.isPagedLiveData()) {
        // if method is not paged live data, add complete execute method
        executeBuilder.addComment("paged result is used in live data, so this method must be empty");
        executeBuilder.addStatement("return null");
    } else {
        executeBuilder.addCode(separator + "this);\n");
        executeBuilder.addStatement("return list");
    }
    executeBuilder.addComment("Executor builder - END");
    typeBuilder.addMethod(executeBuilder.build());
    if (!method.hasDynamicPageSizeConditions()) {
        ModelAnnotation annotation = method.getAnnotation(BindSqlSelect.class);
        int pageSize = annotation.getAttributeAsInt(AnnotationAttributeType.PAGE_SIZE);
        // in case pageSize is not specified (only for liveData)
        if (pageSize == 0) {
            pageSize = 20;
        }
        setupBuilder.addStatement("this.pageSize=$L", pageSize);
    }
    typeBuilder.addMethod(setupBuilder.build());
    executeWithDaoFactortBuilder.addCode(separator + "this);\n");
    executeWithPageRequestBuilder.addCode(separator + "pageRequest));\n");
    executeWithPageRequestBuilder.addComment("Executor with pageRequet - END");
    // add methods to type builder
    typeBuilder.addMethod(executeWithDaoFactortBuilder.build());
    typeBuilder.addMethod(executeWithPageRequestBuilder.build());
    classBuilder.addType(typeBuilder.build());
    return pagedResultName;
}
Also used : ParameterizedTypeName(com.squareup.javapoet.ParameterizedTypeName) TypeName(com.squareup.javapoet.TypeName) PageRequest(com.abubusoft.kripton.android.PageRequest) ModelAnnotation(com.abubusoft.kripton.processor.core.ModelAnnotation) MethodSpec(com.squareup.javapoet.MethodSpec) ParameterSpec(com.squareup.javapoet.ParameterSpec) ClassName(com.squareup.javapoet.ClassName) Builder(com.squareup.javapoet.MethodSpec.Builder) TypeSpec(com.squareup.javapoet.TypeSpec)

Aggregations

PageRequest (com.abubusoft.kripton.android.PageRequest)1 ModelAnnotation (com.abubusoft.kripton.processor.core.ModelAnnotation)1 ClassName (com.squareup.javapoet.ClassName)1 MethodSpec (com.squareup.javapoet.MethodSpec)1 Builder (com.squareup.javapoet.MethodSpec.Builder)1 ParameterSpec (com.squareup.javapoet.ParameterSpec)1 ParameterizedTypeName (com.squareup.javapoet.ParameterizedTypeName)1 TypeName (com.squareup.javapoet.TypeName)1 TypeSpec (com.squareup.javapoet.TypeSpec)1