From 967be9e750221ab2ab783f95df79bb26d290a45e Mon Sep 17 00:00:00 2001 From: Martial Simon Date: Mon, 15 Sep 2025 01:07:58 +0200 Subject: add: added projects --- jws/kafka/pom.xml | 332 +++++++++++++++++++++ .../fr/epita/assistants/StringInfoProcessor.java | 41 +++ .../fr/epita/assistants/StringInfoResource.java | 25 ++ .../fr/epita/assistants/StringInfoSubscriber.java | 13 + .../java/fr/epita/assistants/utils/StringInfo.java | 13 + .../src/main/resources/application.properties | 3 + 6 files changed, 427 insertions(+) create mode 100644 jws/kafka/pom.xml create mode 100644 jws/kafka/src/main/java/fr/epita/assistants/StringInfoProcessor.java create mode 100644 jws/kafka/src/main/java/fr/epita/assistants/StringInfoResource.java create mode 100644 jws/kafka/src/main/java/fr/epita/assistants/StringInfoSubscriber.java create mode 100644 jws/kafka/src/main/java/fr/epita/assistants/utils/StringInfo.java create mode 100644 jws/kafka/src/main/resources/application.properties (limited to 'jws/kafka') 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 @@ + + + 4.0.0 + + fr.epita.assistants + kafka + 1.0.0 + + + 21 + 21 + 21 + + 3.13.0 + true + + 3.0.0-M5 + 3.4.1 + 3.1.2 + + UTF-8 + UTF-8 + + io.quarkus.platform + quarkus-bom + 3.17.5 + + true + + ${project.build.directory}/surefire-reports + + + + + + ${quarkus.platform.group-id} + ${quarkus.platform.artifact-id} + ${quarkus.platform.version} + pom + import + + + + + + + io.quarkus + quarkus-junit5 + + + io.quarkus + quarkus-rest-jackson + + + io.quarkus + quarkus-rest-jackson-deployment + + + io.quarkus + quarkus-smallrye-reactive-messaging-kafka + 3.15.2 + + + io.quarkus + quarkus-messaging-kafka + + + io.quarkus + quarkus-arc + + + org.projectlombok + lombok + 1.18.36 + provided + + + io.smallrye.reactive + smallrye-reactive-messaging-in-memory + test + + + org.awaitility + awaitility + test + + + org.assertj + assertj-core + 3.26.0 + test + + + io.rest-assured + rest-assured + test + + + + org.apache.httpcomponents + httpmime + + + io.quarkus + quarkus-rest-kotlin + + + io.quarkus + quarkus-messaging-kafka-deployment + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + io.quarkus.platform + quarkus-bom + ${quarkus.platform.version} + pom + + + + io.quarkus + quarkus-junit5-properties + + + org.junit.jupiter + junit-jupiter + + + org.opentest4j + opentest4j + 1.3.0 + + + org.apiguardian + apiguardian-api + 1.1.2 + + + org.junit.jupiter + junit-jupiter-params + + + org.apache.maven.surefire + surefire-junit-platform + ${versions.maven-surefire-plugin} + + + org.apache.maven.surefire + common-java5 + 3.5.2 + + + org.apache.maven.surefire + surefire-shared-utils + 3.5.2 + + + org.junit.platform + junit-platform-engine + test + + + org.junit.platform + junit-platform-launcher + test + + + org.apache.maven.surefire + surefire-api + 3.5.2 + + + io.quarkus.platform + quarkus-maven-plugin + 3.17.5 + + + org.apache.maven.plugins + maven-jar-plugin + ${versions.maven-jar-plugin} + + + org.apache.maven.plugins + maven-install-plugin + ${versions.maven-install-plugin} + + + io.quarkus + quarkus-rest-kotlin-deployment + + + org.junit.platform + junit-platform-commons + + + org.apache.maven + maven-repository-metadata + + + org.apache.maven + maven-plugin-registry + 2.0.6 + + + classworlds + classworlds + 1.1-alpha-2 + + + io.quarkus + quarkus-maven-plugin + 3.17.5 + + + org.apache.maven.plugins + maven-dependency-plugin + 3.7.0 + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + + fully.qualified.MainClass + + + + jar-with-dependencies + + + + + io.quarkus + quarkus-maven-plugin + ${quarkus.platform.version} + true + + + + build + generate-code + generate-code-tests + + + + + + maven-compiler-plugin + ${compiler-plugin.version} + + ${maven.compiler.parameters} + + + + maven-surefire-plugin + ${versions.maven-surefire-plugin} + + + org.jboss.logmanager.LogManager + ${maven.home} + + + + + + + + fetch-bom + + true + + + + io.quarkus.platform + quarkus-bom-quarkus-platform-properties + 3.17.5 + properties + + + + + native + + + + native + + + + + + maven-failsafe-plugin + ${versions.maven-surefire-plugin} + + + + integration-test + verify + + + + ${project.build.directory}/${project.build.finalName}-runner + org.jboss.logmanager.LogManager + ${maven.home} + + + + + + + + + native + + + + + 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 commandEmitter; + + @POST + public void send(String s) { + CompletionStage 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 -- cgit v1.2.3