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

io.smallrye.reactive.messaging.connector.ConfigurationDocWriter Maven / Gradle / Ivy

The newest version!
package io.smallrye.reactive.messaging.connector;

import static io.smallrye.reactive.messaging.connector.ClassWriter.hasAlias;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

import javax.annotation.processing.ProcessingEnvironment;
import javax.tools.FileObject;
import javax.tools.StandardLocation;

import org.eclipse.microprofile.reactive.messaging.spi.Connector;

import io.smallrye.reactive.messaging.annotations.ConnectorAttribute;

public class ConfigurationDocWriter {
    private final ProcessingEnvironment environment;

    public ConfigurationDocWriter(ProcessingEnvironment env) {
        this.environment = env;
    }

    public void generate(Connector connector, List commonAttributes,
            List incomingAttributes, List outgoingAttributes) throws IOException {
        generateIncomingDocumentation(connector, commonAttributes, incomingAttributes);
        generateOutgoingDocumentation(connector, commonAttributes, outgoingAttributes);

    }

    private void generateIncomingDocumentation(Connector connector, List commonAttributes,
            List incomingAttributes)
            throws IOException {
        FileObject resource = environment.getFiler()
                .createResource(StandardLocation.CLASS_OUTPUT, "",
                        "META-INF/connector/" + connector.value() + "-incoming.adoc");
        resource.delete();
        try (PrintWriter writer = new PrintWriter(resource.openWriter())) {
            generateDocumentation(connector, "Incoming", commonAttributes, incomingAttributes, writer);
        }
    }

    private void generateOutgoingDocumentation(Connector connector, List commonAttributes,
            List outgoingAttributes)
            throws IOException {
        FileObject resource = environment.getFiler()
                .createResource(StandardLocation.CLASS_OUTPUT, "",
                        "META-INF/connector/" + connector.value() + "-outgoing.adoc");
        resource.delete();

        try (PrintWriter writer = new PrintWriter(resource.openWriter())) {
            generateDocumentation(connector, "Outgoing", commonAttributes, outgoingAttributes, writer);
        }
    }

    void generateDocumentation(Connector connector, String direction, List commonAttributes,
            List specificAttributes, PrintWriter out) {
        List list = new ArrayList<>(commonAttributes);
        list.addAll(specificAttributes);
        list.sort(Comparator.comparing(ConnectorAttribute::name));

        out.println("." + direction + " Attributes of the '" + connector.value() + "' connector");
        writeTableBegin(out);
        list.forEach(att -> {
            if (!att.hiddenFromDocumentation()) {
                generateLine(att, out);
            }
        });
        out.println("|===");
    }

    private void writeTableBegin(PrintWriter out) {
        out.println("[cols=\"25, 30, 15, 20\",options=\"header\"]");
        out.println("|===");
        out.println("|Attribute (_alias_) | Description | Mandatory | Default");
        out.println();
    }

    private void generateLine(ConnectorAttribute att, PrintWriter out) {
        String name = "[.no-hyphens]#*" + att.name() + "*#";
        if (hasAlias(att)) {
            name += "\n\n[.no-hyphens]#_(" + att.alias() + ")_#";
        }
        out.println(String.format("| %s | %s | %s | %s",
                name, getDescription(att) + "\n\nType: _" + att.type() + "_", att.mandatory(),
                getDefaultValueOrEmpty(att)));
        out.println();
    }

    private String getDescription(ConnectorAttribute att) {
        if (att.deprecated()) {
            return "_deprecated_ - " + att.description();
        }
        return att.description();
    }

    private String getDefaultValueOrEmpty(ConnectorAttribute att) {
        if (att.defaultValue().equals(ConnectorAttribute.NO_VALUE)) {
            return "";
        } else {
            return "`" + att.defaultValue() + "`";
        }
    }

    private String getAliasOrEmpty(ConnectorAttribute att) {
        if (att.alias().equals(ConnectorAttribute.NO_VALUE)) {
            return "";
        } else {
            return att.alias();
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy