EntityRelationDiagramColumnGenerator.java

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

import lombok.NonNull;
import ru.volnenko.maven.plugin.databasedoc.enumerated.ColumnType;
import ru.volnenko.maven.plugin.databasedoc.enumerated.ErdType;
import ru.volnenko.maven.plugin.databasedoc.generator.IEntityRelationDiagramColumnGenerator;
import ru.volnenko.maven.plugin.databasedoc.model.impl.Column;
import ru.volnenko.maven.plugin.databasedoc.util.StringUtil;

public final class EntityRelationDiagramColumnGenerator extends AbstractGenerator implements IEntityRelationDiagramColumnGenerator {

    @NonNull
    private Column column = new Column();

    @NonNull
    private ErdType erdType = ErdType.PHYSIC;

    @NonNull
    public ErdType erdType() {
        return erdType;
    }

    @NonNull
    public EntityRelationDiagramColumnGenerator erdType(@NonNull final ErdType erdType) {
        this.erdType = erdType;
        return this;
    }

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

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

    @NonNull
    @Override
    public StringBuilder append(@NonNull final StringBuilder stringBuilder) {
        stringBuilder.append("    ");
        if (column.getConstraints().getPrimaryKey()) stringBuilder.append("*");
        stringBuilder.append("\"" + getName() + "\"");
        stringBuilder.append(" : ");
        stringBuilder.append("\"" + getType() + "\"");
        stringBuilder.append("\n");
        return stringBuilder;
    }

    @NonNull
    private String getType() {
        final String type = StringUtil.format(column.getType());
        if (erdType.isPhysic()) {
            return type;
        }
        if (erdType.isLogic()) {
            final ColumnType columnType = ColumnType.typeOf(type);
            if (columnType == null) return type;
            return columnType.displayName();
        }
        return type;
    }

    @NonNull
    private String getName() {
        if (erdType.isPhysic()) {
            return StringUtil.format(column.getName());
        }
        if (erdType.isLogic()) {
            if (column.getRemarks() != null && !column.getRemarks().isEmpty())
                return StringUtil.format(column.getRemarks());
        }
        return StringUtil.format(column.getName());
    }

}