summaryrefslogtreecommitdiff
path: root/jws/kafka
diff options
context:
space:
mode:
authorMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:07:58 +0200
committerMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:07:58 +0200
commit967be9e750221ab2ab783f95df79bb26d290a45e (patch)
tree6802900a5e975f9f68b169f0f503f040056d6952 /jws/kafka
add: added projectsHEADmain
Diffstat (limited to 'jws/kafka')
-rw-r--r--jws/kafka/pom.xml332
-rw-r--r--jws/kafka/src/main/java/fr/epita/assistants/StringInfoProcessor.java41
-rw-r--r--jws/kafka/src/main/java/fr/epita/assistants/StringInfoResource.java25
-rw-r--r--jws/kafka/src/main/java/fr/epita/assistants/StringInfoSubscriber.java13
-rw-r--r--jws/kafka/src/main/java/fr/epita/assistants/utils/StringInfo.java13
-rw-r--r--jws/kafka/src/main/resources/application.properties3
6 files changed, 427 insertions, 0 deletions
diff --git a/jws/kafka/pom.xml b/jws/kafka/pom.xml
new file mode 100644
index 0000000..35c8c59
--- /dev/null
+++ b/jws/kafka/pom.xml
@@ -0,0 +1,332 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>fr.epita.assistants</groupId>
+ <artifactId>kafka</artifactId>
+ <version>1.0.0</version>
+
+ <properties>
+ <maven.compiler.release>21</maven.compiler.release>
+ <maven.compiler.source>21</maven.compiler.source>
+ <maven.compiler.target>21</maven.compiler.target>
+
+ <compiler-plugin.version>3.13.0</compiler-plugin.version>
+ <maven.compiler.parameters>true</maven.compiler.parameters>
+
+ <versions.maven-surefire-plugin>3.0.0-M5</versions.maven-surefire-plugin>
+ <versions.maven-jar-plugin>3.4.1</versions.maven-jar-plugin>
+ <versions.maven-install-plugin>3.1.2</versions.maven-install-plugin>
+
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+
+ <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
+ <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
+ <quarkus.platform.version>3.17.5</quarkus.platform.version>
+
+ <skipITs>true</skipITs>
+
+ <surefire.reportsDirectory>${project.build.directory}/surefire-reports</surefire.reportsDirectory>
+ </properties>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>${quarkus.platform.group-id}</groupId>
+ <artifactId>${quarkus.platform.artifact-id}</artifactId>
+ <version>${quarkus.platform.version}</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <dependencies>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-junit5</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-rest-jackson</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-rest-jackson-deployment</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-smallrye-reactive-messaging-kafka</artifactId>
+ <version>3.15.2</version>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-messaging-kafka</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-arc</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.projectlombok</groupId>
+ <artifactId>lombok</artifactId>
+ <version>1.18.36</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.smallrye.reactive</groupId>
+ <artifactId>smallrye-reactive-messaging-in-memory</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.awaitility</groupId>
+ <artifactId>awaitility</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.assertj</groupId>
+ <artifactId>assertj-core</artifactId>
+ <version>3.26.0</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.rest-assured</groupId>
+ <artifactId>rest-assured</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpmime</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-rest-kotlin</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-messaging-kafka-deployment</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-api</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-engine</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus.platform</groupId>
+ <artifactId>quarkus-bom</artifactId>
+ <version>${quarkus.platform.version}</version>
+ <type>pom</type>
+ </dependency>
+
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-junit5-properties</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opentest4j</groupId>
+ <artifactId>opentest4j</artifactId>
+ <version>1.3.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apiguardian</groupId>
+ <artifactId>apiguardian-api</artifactId>
+ <version>1.1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-params</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.surefire</groupId>
+ <artifactId>surefire-junit-platform</artifactId>
+ <version>${versions.maven-surefire-plugin}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.surefire</groupId>
+ <artifactId>common-java5</artifactId>
+ <version>3.5.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.surefire</groupId>
+ <artifactId>surefire-shared-utils</artifactId>
+ <version>3.5.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.platform</groupId>
+ <artifactId>junit-platform-engine</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.platform</groupId>
+ <artifactId>junit-platform-launcher</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.surefire</groupId>
+ <artifactId>surefire-api</artifactId>
+ <version>3.5.2</version>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus.platform</groupId>
+ <artifactId>quarkus-maven-plugin</artifactId>
+ <version>3.17.5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>${versions.maven-jar-plugin}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>${versions.maven-install-plugin}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-rest-kotlin-deployment</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.platform</groupId>
+ <artifactId>junit-platform-commons</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-repository-metadata</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-registry</artifactId>
+ <version>2.0.6</version>
+ </dependency>
+ <dependency>
+ <groupId>classworlds</groupId>
+ <artifactId>classworlds</artifactId>
+ <version>1.1-alpha-2</version>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-maven-plugin</artifactId>
+ <version>3.17.5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <version>3.7.0</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifest>
+ <mainClass>fully.qualified.MainClass</mainClass>
+ </manifest>
+ </archive>
+ <descriptorRefs>
+ <descriptorRef>jar-with-dependencies</descriptorRef>
+ </descriptorRefs>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-maven-plugin</artifactId>
+ <version>${quarkus.platform.version}</version>
+ <extensions>true</extensions>
+ <executions>
+ <execution>
+ <goals>
+ <goal>build</goal>
+ <goal>generate-code</goal>
+ <goal>generate-code-tests</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>${compiler-plugin.version}</version>
+ <configuration>
+ <parameters>${maven.compiler.parameters}</parameters>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>${versions.maven-surefire-plugin}</version>
+ <configuration>
+ <systemPropertyVariables>
+ <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
+ <maven.home>${maven.home}</maven.home>
+ </systemPropertyVariables>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <profiles>
+ <profile>
+ <id>fetch-bom</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <dependencies>
+ <dependency>
+ <groupId>io.quarkus.platform</groupId>
+ <artifactId>quarkus-bom-quarkus-platform-properties</artifactId>
+ <version>3.17.5</version>
+ <type>properties</type>
+ </dependency>
+ </dependencies>
+ </profile>
+ <profile>
+ <id>native</id>
+
+ <activation>
+ <property>
+ <name>native</name>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <version>${versions.maven-surefire-plugin}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>integration-test</goal>
+ <goal>verify</goal>
+ </goals>
+ <configuration>
+ <systemPropertyVariables>
+ <native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path>
+ <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
+ <maven.home>${maven.home}</maven.home>
+ </systemPropertyVariables>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <properties>
+ <quarkus.package.type>native</quarkus.package.type>
+ </properties>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/jws/kafka/src/main/java/fr/epita/assistants/StringInfoProcessor.java b/jws/kafka/src/main/java/fr/epita/assistants/StringInfoProcessor.java
new file mode 100644
index 0000000..b419623
--- /dev/null
+++ b/jws/kafka/src/main/java/fr/epita/assistants/StringInfoProcessor.java
@@ -0,0 +1,41 @@
+package fr.epita.assistants;
+
+import fr.epita.assistants.utils.StringInfo;
+import io.smallrye.reactive.messaging.annotations.Broadcast;
+import org.eclipse.microprofile.reactive.messaging.Incoming;
+import org.eclipse.microprofile.reactive.messaging.Outgoing;
+
+public class StringInfoProcessor {
+ private boolean isPalindrome(String word) {
+ if (word == null) return false;
+ word = word.toLowerCase().strip();
+ if (word.isEmpty()) return true;
+ for (int i = 0, j = word.length() - 1; i < j; i++, j--) {
+ while (word.charAt(i) == ' ') {
+ i++;
+ }
+ while (word.charAt(j) == ' ') {
+ j--;
+ }
+ if (word.charAt(i) != word.charAt(j)) return false;
+ }
+ return true;
+ }
+
+ @Incoming("string-info-command")
+ @Outgoing("string-info-aggregate")
+ @Broadcast
+ public StringInfo process(String s) {
+ String tmp = s.toLowerCase();
+ int v = 0;
+ int c = 0;
+ for (int i = 0; i < tmp.length(); i++) {
+ if (tmp.charAt(i) == 'a' || tmp.charAt(i) == 'e' || tmp.charAt(i) == 'i' || tmp.charAt(i) == 'o' || tmp.charAt(i) == 'u' || tmp.charAt(i) == 'y')
+ v++;
+ else if (tmp.charAt(i) <= 'z' && tmp.charAt(i) >= 'a')
+ c++;
+ }
+ return new StringInfo(s, v, c, isPalindrome(s));
+ }
+
+} \ No newline at end of file
diff --git a/jws/kafka/src/main/java/fr/epita/assistants/StringInfoResource.java b/jws/kafka/src/main/java/fr/epita/assistants/StringInfoResource.java
new file mode 100644
index 0000000..62a5d51
--- /dev/null
+++ b/jws/kafka/src/main/java/fr/epita/assistants/StringInfoResource.java
@@ -0,0 +1,25 @@
+package fr.epita.assistants;
+
+import io.smallrye.reactive.messaging.annotations.Broadcast;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import org.eclipse.microprofile.reactive.messaging.Channel;
+import org.eclipse.microprofile.reactive.messaging.Emitter;
+
+import java.util.concurrent.CompletionStage;
+
+@Path("/send")
+@Consumes
+public class StringInfoResource {
+ @Inject
+ @Broadcast
+ @Channel("string-info-command")
+ Emitter<String> commandEmitter;
+
+ @POST
+ public void send(String s) {
+ CompletionStage<Void> v = commandEmitter.send(s);
+ }
+} \ No newline at end of file
diff --git a/jws/kafka/src/main/java/fr/epita/assistants/StringInfoSubscriber.java b/jws/kafka/src/main/java/fr/epita/assistants/StringInfoSubscriber.java
new file mode 100644
index 0000000..c955270
--- /dev/null
+++ b/jws/kafka/src/main/java/fr/epita/assistants/StringInfoSubscriber.java
@@ -0,0 +1,13 @@
+package fr.epita.assistants;
+
+import fr.epita.assistants.utils.StringInfo;
+import io.smallrye.reactive.messaging.annotations.Broadcast;
+import org.eclipse.microprofile.reactive.messaging.Incoming;
+
+public class StringInfoSubscriber {
+ @Incoming("string-info-aggregate")
+ @Broadcast
+ public void subscribe(StringInfo si) {
+ System.out.println(si.toString());
+ }
+} \ No newline at end of file
diff --git a/jws/kafka/src/main/java/fr/epita/assistants/utils/StringInfo.java b/jws/kafka/src/main/java/fr/epita/assistants/utils/StringInfo.java
new file mode 100644
index 0000000..c328ac3
--- /dev/null
+++ b/jws/kafka/src/main/java/fr/epita/assistants/utils/StringInfo.java
@@ -0,0 +1,13 @@
+package fr.epita.assistants.utils;
+
+import lombok.ToString;
+import lombok.Value;
+
+@Value
+@ToString
+public class StringInfo {
+ String word;
+ Integer nbVowels;
+ Integer nbConsonants;
+ Boolean isPalindrome;
+}
diff --git a/jws/kafka/src/main/resources/application.properties b/jws/kafka/src/main/resources/application.properties
new file mode 100644
index 0000000..9db5e48
--- /dev/null
+++ b/jws/kafka/src/main/resources/application.properties
@@ -0,0 +1,3 @@
+quarkus.devservices.enabled=true
+quarkus.kafka.devservices.image-name=reg.undercloud.cri.epita.fr/docker/redpandadata/redpanda:v24.1.2
+%test.quarkus.devservices.enabled=false