ColumnGenerator.java

package ru.volnenko.maven.plugin.databasedoc.generator.impl;

import lombok.NonNull;
import ru.volnenko.maven.plugin.databasedoc.generator.IColumnGenerator;
import ru.volnenko.maven.plugin.databasedoc.model.impl.Column;
import ru.volnenko.maven.plugin.databasedoc.model.impl.FK;
import ru.volnenko.maven.plugin.databasedoc.model.impl.UK;
import ru.volnenko.maven.plugin.databasedoc.util.ConstraintUtil;
import ru.volnenko.maven.plugin.databasedoc.util.ForeignKeyUtil;
import ru.volnenko.maven.plugin.databasedoc.util.StringUtil;
import ru.volnenko.maven.plugin.databasedoc.util.UniqueKeyUtil;

import java.util.Collections;
import java.util.Set;

public final class ColumnGenerator extends AbstractGenerator implements IColumnGenerator {

    @NonNull
    private Integer index = 1;

    @NonNull
    private Column column = new Column();

    @NonNull
    private String tableName = "";

    @NonNull
    private Set<FK> fks = Collections.emptySet();

    @NonNull
    private Set<UK> uks = Collections.emptySet();

    @NonNull
    public static IColumnGenerator create() {
        return new ColumnGenerator();
    }

    @Override
    @NonNull
    public IColumnGenerator tableName(@NonNull final String tableName) {
        this.tableName = tableName;
        return this;
    }

    @NonNull
    @Override
    public IColumnGenerator fks(@NonNull final Set<FK> fks) {
        this.fks = fks;
        return this;
    }

    @NonNull
    @Override
    public IColumnGenerator uks(@NonNull final Set<UK> uks) {
        this.uks = uks;
        return this;
    }

    @NonNull
    @Override
    public IColumnGenerator stringBuilder(@NonNull final StringBuilder stringBuilder) {
        this.stringBuilder = stringBuilder;
        return this;
    }

    @NonNull
    @Override
    public ColumnGenerator index(@NonNull final Integer index) {
        this.index = index;
        return this;
    }

    @NonNull
    @Override
    public ColumnGenerator column(@NonNull final Column column) {
        this.column = column;
        return this;
    }

    @NonNull
    @Override
    public StringBuilder append(@NonNull final StringBuilder stringBuilder) {
        stringBuilder.append("\n");
        stringBuilder.append("^|" + StringUtil.format(index) + ". \n");
        stringBuilder.append("|" + StringUtil.format(column.getName()) + "\n");
        stringBuilder.append("|" + StringUtil.format(column.getType()) + "\n");
        stringBuilder.append("|" + StringUtil.format(column.getRemarks()) + "\n");
        stringBuilder.append("^|" + StringUtil.format(column.getConstraints().getPrimaryKey()) + "\n");

        boolean uke = UniqueKeyUtil.enabled(column);
        if (!uke) {
            final UK uk = new UK(tableName, column.getName());
            uke = uks.contains(uk);
        }
        stringBuilder.append("^|" + StringUtil.format(uke) + "\n");

        boolean fke = ForeignKeyUtil.enabled(column);
        if (!fke) {
            final FK fk = new FK(tableName, column.getName());
            fke = fks.contains(fk);
        }
        stringBuilder.append("^|" + StringUtil.format(fke) + "\n");
        stringBuilder.append("^|" + StringUtil.format(column.getAutoIncrement()) + "\n");
        stringBuilder.append("^|" + StringUtil.format(ConstraintUtil.notnull(column)) + "\n");
        stringBuilder.append("|" + StringUtil.format(column.getDefaultValue()) + "\n");
        stringBuilder.append("\n");

        return stringBuilder;
    }

}