DocumentGenerator.java

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

import lombok.NonNull;
import ru.volnenko.maven.plugin.databasedoc.generator.IDocumentGenerator;
import ru.volnenko.maven.plugin.databasedoc.util.StringUtil;

public final class DocumentGenerator extends AbstractGenerator implements IDocumentGenerator {

    @NonNull
    private Boolean headerFirstEnabled = true;

    @NonNull
    private Boolean tableOfContentsEnabled = true;

    @NonNull
    private Boolean headerSecondEnabled = true;

    @NonNull
    private String serviceName = "";

    @NonNull
    private Boolean entityRelationDiagramEnabled = true;

    @NonNull
    private Boolean entityRelationDiagramInclude = true;

    @NonNull
    public boolean entityRelationDiagramPhysicEnabled = true;

    @NonNull
    public boolean entityRelationDiagramLogicEnabled = true;

    @NonNull
    @Override
    public IDocumentGenerator entityRelationDiagramPhysicEnabled(@NonNull final Boolean entityRelationDiagramPhysicEnabled) {
        this.entityRelationDiagramPhysicEnabled = entityRelationDiagramPhysicEnabled;
        return this;
    }

    @NonNull

    @Override
    public IDocumentGenerator entityRelationDiagramLogicEnabled(@NonNull final Boolean entityRelationDiagramLogicEnabled) {
        this.entityRelationDiagramLogicEnabled = entityRelationDiagramLogicEnabled;
        return this;
    }

    @NonNull
    @Override
    public IDocumentGenerator entityRelationDiagramEnabled(@NonNull final Boolean entityRelationDiagramEnabled) {
        this.entityRelationDiagramEnabled = entityRelationDiagramEnabled;
        return this;
    }

    @NonNull
    @Override
    public IDocumentGenerator entityRelationDiagramInclude(@NonNull final Boolean entityRelationDiagramInclude) {
        this.entityRelationDiagramInclude = entityRelationDiagramInclude;
        return this;
    }

    @NonNull
    @Override
    public IDocumentGenerator headerFirstEnabled(@NonNull final Boolean headerFirstEnabled) {
        this.headerFirstEnabled = headerFirstEnabled;
        return this;
    }

    @NonNull
    @Override
    public IDocumentGenerator tableOfContentsEnabled(@NonNull final Boolean tableOfContentsEnabled) {
        this.tableOfContentsEnabled = tableOfContentsEnabled;
        return this;
    }

    @NonNull
    @Override
    public IDocumentGenerator headerSecondEnabled(@NonNull final Boolean headerSecondEnabled) {
        this.headerSecondEnabled = headerSecondEnabled;
        return this;
    }

    @NonNull
    @Override
    public IDocumentGenerator serviceName(@NonNull final String serviceName) {
        this.serviceName = serviceName;
        return this;
    }

    @NonNull
    @Override
    public StringBuilder append(@NonNull final StringBuilder stringBuilder) {
        if (headerFirstEnabled) {
            stringBuilder.append("= " + StringUtil.format(serviceName) + "\n");
            if (tableOfContentsEnabled) {
                stringBuilder.append(":toc-title: Оглавление\n");
                stringBuilder.append(":toc:\n");
            }
            stringBuilder.append("\n");
        }
        if (headerSecondEnabled) {
            stringBuilder.append("== Представление данных\n");
        }
        if (entityRelationDiagramEnabled) {
            if (entityRelationDiagramInclude) {
                if (entityRelationDiagramLogicEnabled) {
                    stringBuilder.append("\n");
                    stringBuilder.append("=== Логическая ER-диаграмма базы данных \n");
                    stringBuilder.append("\n");
                    stringBuilder.append("image::erd_logic.svg[] \n");
                    stringBuilder.append("\n");
                }
                if (entityRelationDiagramPhysicEnabled) {
                    stringBuilder.append("\n");
                    stringBuilder.append("=== Физическая ER-диаграмма базы данных \n");
                    stringBuilder.append("\n");
                    stringBuilder.append("image::erd_physic.svg[] \n");
                    stringBuilder.append("\n");
                }
            }
        }
        return stringBuilder;
    }

}