All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.grosner.processor.writer.WhereQueryWriter Maven / Gradle / Ivy

The newest version!
package com.grosner.processor.writer;

import com.google.common.collect.Sets;
import com.grosner.dbflow.annotation.Column;
import com.grosner.processor.definition.BaseTableDefinition;
import com.grosner.processor.definition.ColumnDefinition;
import com.grosner.processor.definition.ModelViewDefinition;
import com.grosner.processor.definition.TableDefinition;
import com.grosner.processor.model.builder.MockConditionQueryBuilder;
import com.grosner.processor.utils.ModelUtils;
import com.grosner.processor.utils.WriterUtils;
import com.squareup.javawriter.JavaWriter;

import javax.lang.model.element.Modifier;
import java.io.IOException;

/**
 * Author: andrewgrosner
 * Contributors: { }
 * Description:
 */
public class WhereQueryWriter implements FlowWriter {

    private BaseTableDefinition tableDefinition;
    private final boolean isModelContainer;

    public WhereQueryWriter(BaseTableDefinition tableDefinition, boolean isModelContainer) {
        this.tableDefinition = tableDefinition;
        this.isModelContainer = isModelContainer;
    }
    @Override
    public void write(JavaWriter javaWriter) throws IOException {
        javaWriter.emitEmptyLine();
        javaWriter.emitAnnotation(Override.class);
        WriterUtils.emitMethod(javaWriter, new FlowWriter() {
            @Override
            public void write(JavaWriter javaWriter) throws IOException {
                MockConditionQueryBuilder conditionQueryBuilder = new MockConditionQueryBuilder("return ");
                conditionQueryBuilder.appendCreation(tableDefinition.getModelClassName());

                int primaryColumnSize = tableDefinition.getPrimaryColumnDefinitions().size();
                if(primaryColumnSize > 0) {
                    for (int i = 0; i < primaryColumnSize; i++) {
                        ColumnDefinition columnDefinition = tableDefinition.getPrimaryColumnDefinitions().get(i);
                        conditionQueryBuilder.appendMockCondition(ModelUtils.getStaticMember(tableDefinition.getTableSourceClassName(), columnDefinition.columnName),
                                ModelUtils.getAccessStatement(columnDefinition.columnName, columnDefinition.columnFieldType,
                                        columnDefinition.columnFieldName, columnDefinition.containerKeyName, isModelContainer, false, false, columnDefinition.hasTypeConverter));
                        if (i < tableDefinition.getPrimaryColumnDefinitions().size() - 1) {
                            conditionQueryBuilder.append(",");
                        }
                    }
                } else if(!(tableDefinition instanceof ModelViewDefinition)){
                    ColumnDefinition autoIncrementDefinition = ((TableDefinition)tableDefinition).autoIncrementDefinition;
                    if(autoIncrementDefinition != null) {
                        conditionQueryBuilder.appendMockCondition(ModelUtils.getStaticMember(tableDefinition.getTableSourceClassName(), autoIncrementDefinition.columnName),
                                ModelUtils.getAccessStatement(autoIncrementDefinition.columnName, autoIncrementDefinition.columnFieldType,
                                        autoIncrementDefinition.columnFieldName, autoIncrementDefinition.containerKeyName, isModelContainer, false, false, autoIncrementDefinition.hasTypeConverter));
                    }
                }
                conditionQueryBuilder.appendEndCreation();
                javaWriter.emitStatement(conditionQueryBuilder.getQuery());

            }
        }, "ConditionQueryBuilder<" + tableDefinition.getModelClassName() + ">", "getPrimaryModelWhere", Sets.newHashSet(Modifier.PUBLIC),
                ModelUtils.getParameter(isModelContainer ,tableDefinition.getModelClassName()),
                ModelUtils.getVariable(isModelContainer));

        // Don't write empty statement for Model Container
        if(!isModelContainer && !(tableDefinition instanceof ModelViewDefinition)) {
            final TableDefinition definition = ((TableDefinition) tableDefinition);
            javaWriter.emitEmptyLine();
            javaWriter.emitAnnotation(Override.class);
            WriterUtils.emitMethod(javaWriter, new FlowWriter() {
                @Override
                public void write(JavaWriter javaWriter) throws IOException {
                    MockConditionQueryBuilder conditionQueryBuilder = new MockConditionQueryBuilder("return ");
                    conditionQueryBuilder.appendCreation(tableDefinition.getModelClassName());
                    int primaryColumnSize = tableDefinition.getPrimaryColumnDefinitions().size();
                    if(primaryColumnSize > 0) {
                        for (int i = 0; i < definition.primaryColumnDefinitions.size(); i++) {
                            ColumnDefinition columnDefinition = definition.primaryColumnDefinitions.get(i);
                            conditionQueryBuilder.appendMockCondition(definition.definitionClassName + "." + columnDefinition.columnName.toUpperCase(), "\"?\"");

                            if (i < definition.primaryColumnDefinitions.size() - 1) {
                                conditionQueryBuilder.append(",");
                            }
                        }
                    } else {
                        ColumnDefinition autoIncrementDefinition = ((TableDefinition)tableDefinition).autoIncrementDefinition;
                        if(autoIncrementDefinition != null) {
                            conditionQueryBuilder.appendMockCondition(definition.definitionClassName + "." + autoIncrementDefinition.columnName.toUpperCase(), "\"?\"");
                        }
                    }

                    conditionQueryBuilder.appendEndCreation();
                    javaWriter.emitStatement(conditionQueryBuilder.getQuery());
                }
            }, "ConditionQueryBuilder<" + tableDefinition.getModelClassName() + ">", "createPrimaryModelWhere", Sets.newHashSet(Modifier.PUBLIC));
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy