io.smallrye.reactive.messaging.connector.ConfigurationClassWriter Maven / Gradle / Ivy
The newest version!
package io.smallrye.reactive.messaging.connector;
import static io.smallrye.reactive.messaging.connector.ClassWriter.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.annotation.processing.ProcessingEnvironment;
import javax.tools.JavaFileObject;
import org.eclipse.microprofile.reactive.messaging.spi.Connector;
import io.smallrye.reactive.messaging.annotations.ConnectorAttribute;
public class ConfigurationClassWriter {
private final ProcessingEnvironment environment;
public ConfigurationClassWriter(ProcessingEnvironment environment) {
this.environment = environment;
}
public void generateAllClasses(Connector connector, String className, List common,
List incoming, List outgoing)
throws IOException {
CommonConfigurationClassWriter.generate(environment, connector, className, common);
String packageName = getPackage(className);
String incomingConfigClassName = getConfigClassName(className, "IncomingConfiguration");
String outgoingConfigClassName = getConfigClassName(className, "OutgoingConfiguration");
String parentClassName = getConfigClassName(className, "CommonConfiguration");
String incomingConfigSimpleClassName = getSimpleClassName(incomingConfigClassName);
String outgoingConfigSimpleClassName = getSimpleClassName(outgoingConfigClassName);
String parentConfigSimpleClassName = getSimpleClassName(parentClassName);
ClassWriter.log(
"Generating incoming configuration for connector `%s`: %s", connector.value(), incomingConfigClassName);
generate(incoming, packageName, incomingConfigClassName, incomingConfigSimpleClassName, parentConfigSimpleClassName,
"incoming", connector.value());
ClassWriter.log(
"Generating outgoing configuration for connector `%s`: %s", connector.value(), outgoingConfigClassName);
generate(outgoing, packageName, outgoingConfigClassName, outgoingConfigSimpleClassName, parentConfigSimpleClassName,
"outgoing", connector.value());
}
private void generate(List attributes, String packageName,
String configClassName, String configSimpleClassName, String parentConfigSimpleClassName,
String direction, String connector) throws IOException {
JavaFileObject file = environment.getFiler().createSourceFile(configClassName);
file.delete();
try (PrintWriter out = new PrintWriter(file.openWriter())) {
writePackageDeclaration(packageName, out);
writeImportStatements(out);
writeClassDeclaration(configSimpleClassName, direction, connector, out, parentConfigSimpleClassName);
writeConstructor(configSimpleClassName, out);
attributes.forEach(ca -> generateGetterForAttribute(ca, connector, out));
writeValidateMethod(attributes, out);
out.println("}"); // End of class.
}
}
private void writeConstructor(String configSimpleClassName, PrintWriter out) {
out.println();
out.println(" /**");
out.println(" * Creates a new " + configSimpleClassName + ".");
out.println(" */");
out.println(" public " + configSimpleClassName + "(Config config) {");
out.println(" super(config);");
out.println(" validate();");
out.println(" }");
out.println();
}
private void writeClassDeclaration(String configSimpleClassName, String direction, String connector,
PrintWriter out, String parentClass) {
out.println();
out.println("/**");
out.println(" * Extract the " + direction + " configuration for the {@code " + connector + "} connector.");
out.println("*/");
out.print(String.format("public class %s extends %s {", configSimpleClassName, parentClass));
out.println();
}
private static void writeValidateMethod(List attributes, PrintWriter out) {
out.println(" public void validate() {");
out.println(" super.validate();");
attributes.forEach(ca -> {
if (ca.mandatory()) {
out.println(String.format(" %s();", getMethodName(ca)));
}
});
out.println(" }");
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy