Skip to content

Commit

Permalink
simple java producer factory and consumer dispatch
Browse files Browse the repository at this point in the history
Signed-off-by: Clemens Vasters <[email protected]>
  • Loading branch information
clemensv committed Apr 5, 2024
1 parent 870d626 commit a89ce23
Show file tree
Hide file tree
Showing 19 changed files with 604 additions and 40 deletions.
2 changes: 1 addition & 1 deletion xregistry/templates/java/_common/mqtt.jinja.include
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

{%- macro PahoImports() -%}
import org.eclipse.paho.client.mqttv3.MqttMessage as MqttMessageV2;
iomport org.eclipse.paho.mqttv5.common.packet.MqttWireMessage as MqttMessageV5;
import org.eclipse.paho.mqttv5.common.packet.MqttWireMessage as MqttMessageV5;
{%- endmacro -%}

{%- macro EmitArguments(props) -%}
Expand Down
2 changes: 1 addition & 1 deletion xregistry/templates/java/_templateinfo.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"description" : "Java 13+",
"description" : "Java 21+",
"priority" : 2
}
2 changes: 1 addition & 1 deletion xregistry/templates/java/consumer/_templateinfo.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"description" : "Java CloudEvents SDK endpoint consumer class",
"description" : "Java Experimental CloudEvents SDK endpoint consumer class",
"priority" : 1
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
{%- import "cloudevents.jinja.include" as cloudEvents -%}
{%- import "amqp.jinja.include" as amqp -%}
{%- import "mqtt.jinja.include" as mqtt -%}
{%- set messagegroups = root.messagegroups %}
{%- set uses_cloudevents_message = (root | exists( "format", "cloudevents" )) %}
{%- set uses_http_endpoint = (root | exists( "protocol", "http" )) %}
{%- set uses_amqp_message = (root | exists( "binding", "amqp" )) %}
{%- set uses_amqp_endpoint = (root | exists( "protocol", "amqp" )) %}
{%- set uses_mqtt_message = (root | exists( "binding", "mqtt" )) %}
{%- set uses_mqtt_endpoint = (root | exists( "protocol", "mqtt" )) %}
// this file was generated by a tool
package {{ class_name | namespace | lower }};

{%- if uses_amqp_message %}
{{ amqp.AmqpImports() }}
{%- endif %}
{%- if uses_mqtt_message %}
{{ mqtt.PahoImports() }}
{%- endif %}
{%- if uses_cloudevents_message %}
import io.cloudevents.CloudEvent;
{%- endif %}
import java.util.concurrent.CompletableFuture;
import java.util.ArrayList;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

{% for messagegroup_key, messagegroup in messagegroups.items() -%}
{%- set pascalGroupName = messagegroup.id | pascal -%}
{%- set className = (pascalGroupName | strip_namespace)+"EventDispatcher" %}
public class {{ className | strip_namespace }}
{

private Logger _logger = LogManager.getLogger({{ className }}.class);

{%- if uses_cloudevents_message %}
{{ cloudEvents.DeclareDispatchObjectsFields( project_name, messagegroups ) | indent(4) }}
{{ cloudEvents.DeclareDispatchObjectsConstructor( project_name, className, messagegroups, '', '') | indent(4) }}
{%- endif %}
{%- if uses_amqp_message %}
{{ amqp.DeclareDispatchObjectsFields( project_name, messagegroups ) | indent(4) }}
{{ amqp.DeclareDispatchObjectsConstructor( project_name, className, messagegroups, '', '') | indent(4) }}
{%- endif %}
{%- if uses_mqtt_message %}
{{ mqtt.DeclareDispatchObjectsFields( project_name, messagegroups ) | indent(4) }}
{{ mqtt.DeclareDispatchObjectsConstructor( project_name, className, messagegroups, '', '') | indent(4) }}
{%- endif %}

{%- if uses_cloudevents_message %}
public CompletableFuture<Void> dispatchCloudEventAsync(
CloudEvent cloudEvent)
{
{{ cloudEvents.DispatchToDispatchObjects(project_name, root, "cloudEvent", messagegroups, "_logger" ) | indent(12) }}
}
{%- endif %}

{%- if uses_amqp_message %}
public CompletableFuture<Void> dispatchMessageAsync(
Message amqpMessage, MessageContext messageContext)
{
{{ amqp.DispatchToDispatchObjects(project_name, root, "amqpMessage", messagegroups, "_logger" ) | indent(12) }}
}
{%- endif %}

{%- if uses_mqtt_message %}
public CompletableFuture<Void> dispatchMqttMessageV5Async(
MqttMessageV5 mqttMessage)
{
{{ mqtt.DispatchToDispatchObjects(project_name, root, "mqttMessage", messagegroups, "_logger" ) | indent(12) }}
}

public CompletableFuture<Void> dispatchMqttMessageV3Async(
MqttMessageV3 mqttMessage)
{
{{ mqtt.DispatchToDispatchObjects(project_name, root, "mqttMessage", messagegroups, "_logger") | indent(12) }}
}
{%- endif %}
}
{% endfor %}
21 changes: 3 additions & 18 deletions xregistry/templates/java/consumer/pom.xml.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
{%- endif %}
<log4j.version>2.23.1</log4j.version>
<io.cloudevents.version>3.0.0</io.cloudevents.version>
<io.cloudevents.experimental.version>0.1.1-SNAPSHOT</io.cloudevents.experimental.version>
</properties>
<dependencies>
<dependency>
Expand All @@ -46,24 +45,10 @@
<version>${io.cloudevents.version}</version>
</dependency>
<dependency>
<groupId>io.cloudevents.experimental</groupId>
<artifactId>endpoints</artifactId>
<version>${io.cloudevents.experimental.version}</version>
<groupId>io.cloudevents</groupId>
<artifactId>cloudevents-json-jackson</artifactId>
<version>${io.cloudevents.version}</version>
</dependency>
{%- if uses_amqp_endpoint %}
<dependency>
<groupId>io.cloudevents.experimental</groupId>
<artifactId>endpoints-amqp</artifactId>
<version>${io.cloudevents.experimental.version}</version>
</dependency>
{%- endif %}
{%- if uses_mqtt_endpoint %}
<dependency>
<groupId>io.cloudevents.experimental</groupId>
<artifactId>endpoints-mqtt</artifactId>
<version>${io.cloudevents.experimental.version}</version>
</dependency>
{%- endif %}
{%- if uses_protobuf %}
<dependency>
<groupId>io.cloudevents</groupId>
Expand Down
2 changes: 1 addition & 1 deletion xregistry/templates/java/producer/_templateinfo.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"description" : "Java CloudEvents SDK endpoint producer class",
"description" : "Java Experimental CloudEvents SDK endpoint producer class",
"priority" : 1
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
{%- import "cloudevents.jinja.include" as cloudEvents -%}
{%- import "amqp.jinja.include" as amqp -%}
{%- import "mqtt.jinja.include" as mqtt -%}
{%- set messagegroups = root.messagegroups %}
{%- set uses_cloudevents_message = (root | exists( "format", "cloudevents" )) %}
{%- set uses_http_endpoint = (root | exists( "protocol", "http" )) %}
{%- set uses_amqp_message = (root | exists( "binding", "amqp" )) %}
{%- set uses_amqp_endpoint = (root | exists( "protocol", "amqp" )) %}
{%- set uses_mqtt_message = (root | exists( "binding", "mqtt" )) %}
{%- set uses_mqtt_endpoint = (root | exists( "protocol", "mqtt" )) %}
// this file was generated by a tool
package {{ class_name | namespace | lower }};

import io.cloudevents.CloudEvent;
import io.cloudevents.CloudEventData;
import io.cloudevents.core.v1.CloudEventBuilder;
import io.cloudevents.core.format.EventFormat;
import io.cloudevents.core.message.Encoding;

{%- if uses_amqp_message %}
{{ amqp.AmqpImports() }}
{%- endif %}
{%- if uses_mqtt_message %}
{{ mqtt.PahoImports() }}
{%- endif %}
import java.util.ArrayList;

{% for messagegroup_key, messagegroup in messagegroups.items() -%}
{%- set pascalGroupName = messagegroup.id | pascal -%}
{%- set className = (pascalGroupName | strip_namespace)+"EventFactory" %}
public class {{ className | strip_namespace }}
{
{% for id in messagegroup.messages -%}
{%- set definition = messagegroup.messages[id] -%}
{%- set pascalDefinitionName = definition.id | pascal %}
{%- set isCloudEvent = not definition.format or definition.format.lower().startswith("cloudevents") -%}
{%- set isAmqp = not isCloudEvent and definition.format.lower().startswith("amqp") %}
{%- set isMqtt = not isCloudEvent and definition.format.lower().startswith("mqtt") %}
public {% if isCloudEvent %}CloudEvent{% elif isAmqp %}Amqp.Message{% elif isMqtt %}MqttMessageV5{% endif %} create{{ pascalDefinitionName | strip_namespace }}(
{%- if definition.schemaurl -%}
{%- set toBytes="data.toByteArray()" -%}
{%- set type = (definition.schemaurl if definition.schemaurl else definition.schema) | schema_type( project_name, root, definition.schemaformat) %}
{%- set typePackage = type | namespace | lower %}
{%- set typeName = type | strip_namespace | pascal %}
{{ typePackage }}.{{ typeName }} data
{%- else -%}
{% set toBytes="data.toBytes()" %}
CloudEventData data
{%- endif %}
{%- if isCloudEvent -%}
{{- cloudEvents.DeclareUriTemplateArguments(definition) -}}
{%- elif isAmqp -%}
{{- amqp.DeclareUriTemplateArguments(definition) -}}
{%- elif isMqtt -%}
{{- mqtt.DeclareUriTemplateArguments(definition) -}}
{%- endif -%}
) throws Exception {
{% if isCloudEvent %}
{{- cloudEvents.DeclareCloudNativeCloudEvent("cloudEvent", toBytes, definition) | indent(12)}}
return cloudEvent;
{%- elif isAmqp %}
{{- amqp.DeclareAmqpNetLiteMessage("amqpMessage", definition) | indent(12)}}
amqpMessage.BodySection = new Data() { Binary = {{ toBytes }} };
return amqpMessage;
{%- elif isMqtt %}
{{- mqtt.DeclareMqttNetMessage("mqttMessage", definition) | indent(12)}}
return mqttMessage;
{%- endif %}
}
{% endfor %}
}
{% endfor -%}
21 changes: 3 additions & 18 deletions xregistry/templates/java/producer/pom.xml.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
{%- endif %}
<log4j.version>2.23.1</log4j.version>
<io.cloudevents.version>3.0.0</io.cloudevents.version>
<io.cloudevents.experimental.version>0.1.1-SNAPSHOT</io.cloudevents.experimental.version>
</properties>
<dependencies>
<dependency>
Expand All @@ -46,24 +45,10 @@
<version>${io.cloudevents.version}</version>
</dependency>
<dependency>
<groupId>io.cloudevents.experimental</groupId>
<artifactId>endpoints</artifactId>
<version>${io.cloudevents.experimental.version}</version>
<groupId>io.cloudevents</groupId>
<artifactId>cloudevents-json-jackson</artifactId>
<version>${io.cloudevents.version}</version>
</dependency>
{%- if uses_amqp_endpoint %}
<dependency>
<groupId>io.cloudevents.experimental</groupId>
<artifactId>endpoints-amqp</artifactId>
<version>${io.cloudevents.experimental.version}</version>
</dependency>
{%- endif %}
{%- if uses_mqtt_endpoint %}
<dependency>
<groupId>io.cloudevents.experimental</groupId>
<artifactId>endpoints-mqtt</artifactId>
<version>${io.cloudevents.experimental.version}</version>
</dependency>
{%- endif %}
{%- if uses_protobuf %}
<dependency>
<groupId>io.cloudevents</groupId>
Expand Down
4 changes: 4 additions & 0 deletions xregistry/templates/java/xconsumer/_templateinfo.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"description" : "Java Experimental CloudEvents SDK endpoint consumer class",
"priority" : 1
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{%- import "cloudevents.jinja.include" as cloudEvents -%}
{%- import "mqtt.jinja.include" as mqtt -%}
{%- import "amqp.jinja.include" as amqp -%}

{{ cloudEvents.DeclareDispatchInterfaces( project_name, root) }}
{{ mqtt.DeclareDispatchInterfaces( project_name, root) }}
{{ amqp.DeclareDispatchInterfaces( project_name, root) }}

{# the macros are pushing all generated interfaces onto the "files" stack #}
{# therefore we exit the template here to avoid generating this file #}
{% exit %}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package {{ project_name | lower }};

public class ExceptionMessages
{
public static final String ValueIsTooLow = "%s value is too low. (min: %d)";
public static final String ValueIsTooHigh = "%s value is too high. (max: %d)";
public static final String ValueIsTooLong = "%s value is too long. (max length: %d)";
public static final String ValueIsTooShort = "%s value is too short. (min length: %d)";
public static final String ValueIsTooBig = "%s value is too big. (max: %d)";
public static final String ValueIsTooSmall = "%s value is too small. (min: %d)";
public static final String ValueIsInvalid = "%s value is invalid.";
public static final String ValueIsRequired = "%s value is required.";
public static final String ValueIsNotUnique = "%s value is not unique.";
public static final String ValueIsNotAnEmail = "%s value is not an email.";
public static final String ValueIsNotAnUrl = "%s value is not an URL.";
public static final String ValueIsNotADate = "%s value is not a date.";
public static final String ValueIsNotADateTime = "%s value is not a date time.";
public static final String ValueIsNotATime = "%s value is not a time.";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package {{ project_name | lower }};

public class RegexPatterns
{
public static final String Email = "^\\S+@\\S+$";
public static final String Url = "^(http:\\/\\/www\\.|https:\\/\\/www\\.|http:\\/\\/|https:\\/\\/)?[a-z0-9]+([\\-\\.]{1}[a-z0-9]+)*\\.[a-z]{2,5}(:[0-9]{1,5})?(\\/.*)?$";
public static final String Date = "^\\d{4}-\\d{2}-\\d{2}$";
public static final String DateTime = "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(([+-]\\d{2}:\\d{2})|Z)?$";
public static final String Time = "^\\d{2}:\\d{2}:\\d{2}$";
}
Loading

0 comments on commit a89ce23

Please sign in to comment.