Skip to content

Commit

Permalink
KOGITO-9415 Francisco's review
Browse files Browse the repository at this point in the history
Signed-off-by: Helber Belmiro <[email protected]>
  • Loading branch information
hbelmiro committed Jul 7, 2023
1 parent 358f0cf commit 51e5b39
Show file tree
Hide file tree
Showing 9 changed files with 363 additions and 54 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import org.drools.codegen.common.GeneratedFile;
import org.drools.codegen.common.GeneratedFileType;
import org.drools.drl.quarkus.util.deployment.DroolsQuarkusResourceUtils;
import org.eclipse.microprofile.config.Config;
import org.eclipse.microprofile.config.ConfigProvider;
import org.jboss.jandex.IndexView;
import org.jboss.jandex.Indexer;
Expand Down Expand Up @@ -115,12 +116,8 @@ public LiveReloadExecutionBuildItem liveReload(BuildProducer<KogitoAddonsPreGene
private CodeGenerationResult generateCode(LiveReloadableCodeGenProvider codeGenProvider) {
try {
Collection<GeneratedFile> generatedFiles = new ArrayList<>(generateSources(codeGenProvider));
if (!generatedFiles.isEmpty()) {
Collection<GeneratedBeanBuildItem> generatedBeanBuildItems = compileGeneratedSources(generatedFiles);
return new CodeGenerationResult(generatedFiles, indexCompiledSources(generatedBeanBuildItems));
} else {
return new CodeGenerationResult(List.of(), computingIndex);
}
return !generatedFiles.isEmpty() ? new CodeGenerationResult(generatedFiles, indexCompiledSources(compileGeneratedSources(generatedFiles)))
: new CodeGenerationResult(List.of(), computingIndex);
} catch (CodeGenException e) {
throw new IllegalStateException(e);
} catch (IOException e) {
Expand Down Expand Up @@ -155,11 +152,12 @@ private Collection<GeneratedBeanBuildItem> compileGeneratedSources(Collection<Ge
private Collection<GeneratedFile> generateSources(LiveReloadableCodeGenProvider codeGenProvider)
throws CodeGenException, IOException {
Path outDir = workDir.resolve("generated-sources").resolve(codeGenProvider.providerId());
var generatedFiles = new ArrayList<GeneratedFile>();
Collection<GeneratedFile> generatedFiles = new ArrayList<>();
Config config = ConfigProvider.getConfig();
for (Path sourcePath : kogitoBuildContext.getAppPaths().getSourcePaths()) {
Path inputDir = sourcePath.resolve("main").resolve(codeGenProvider.inputDirectory());
var codeGenContext = new CodeGenContext(applicationModel, outDir, workDir, inputDir, false, ConfigProvider.getConfig(), false);
if (codeGenProvider.trigger(codeGenContext)) {
CodeGenContext codeGenContext = new CodeGenContext(applicationModel, outDir, workDir, inputDir, false, config, false);
if (codeGenProvider.shouldRun(inputDir, config) && codeGenProvider.trigger(codeGenContext)) {
try (Stream<Path> sources = Files.walk(outDir)) {
sources.filter(Files::isRegularFile)
.filter(path -> path.toString().endsWith(".java"))
Expand Down Expand Up @@ -197,4 +195,24 @@ private boolean shouldSkipLiveReload() {
public LiveReloadExecutionBuildItem executeWhenNotDevelopment() {
return new LiveReloadExecutionBuildItem(computingIndex);
}

private static class CodeGenerationResult {

private final Collection<GeneratedFile> generatedFiles;

private final IndexView indexView;

CodeGenerationResult(Collection<GeneratedFile> generatedFiles, IndexView indexView) {
this.generatedFiles = generatedFiles;
this.indexView = indexView;
}

Collection<GeneratedFile> getGeneratedFiles() {
return generatedFiles;
}

IndexView getIndexView() {
return indexView;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@
*/
package org.kie.kogito.quarkus.serverless.workflow.deployment.livereload;

import java.nio.file.Path;

import org.eclipse.microprofile.config.Config;

import io.quarkus.bootstrap.prebuild.CodeGenException;
import io.quarkus.deployment.CodeGenContext;

Expand All @@ -28,4 +32,6 @@ interface LiveReloadableCodeGenProvider {
String providerId();

String inputDirectory();

boolean shouldRun(Path sourceDir, Config config);
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@
*/
package org.kie.kogito.quarkus.serverless.workflow.deployment.livereload;

import java.nio.file.Path;

import org.eclipse.microprofile.config.Config;

import io.quarkus.bootstrap.prebuild.CodeGenException;
import io.quarkus.deployment.CodeGenContext;
import io.quarkus.deployment.CodeGenProvider;
Expand All @@ -41,4 +45,9 @@ public String inputDirectory() {
public String providerId() {
return delegate.providerId();
}

@Override
public boolean shouldRun(Path sourceDir, Config config) {
return delegate.shouldRun(sourceDir, config);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,35 @@
<artifactId>quarkus-resteasy-jackson</artifactId>
</dependency>

<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty-shaded</artifactId>
<version>${version.io.grpc}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-protobuf</artifactId>
<version>${version.io.grpc}</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-stub</artifactId>
<version>${version.io.grpc}</version>
</dependency>
<dependency>
<!-- necessary for Java 9+ -->
<groupId>org.apache.tomcat</groupId>
<artifactId>annotations-api</artifactId>
<version>6.0.53</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5-internal</artifactId>
Expand All @@ -36,6 +65,11 @@
<artifactId>rest-assured</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.kie.kogito</groupId>
<artifactId>kogito-test-utils</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
Expand Down Expand Up @@ -79,6 +113,20 @@
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>${project.basedir}/src/main/proto</directory>
<includes>
<include>greeting.proto</include>
</includes>
</resource>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<!-- <includes>-->
<!-- <include>workflow-service-openapi.json</include>-->
<!-- </includes>-->
</resource>
</resources>
</build>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
/*
* Copyright 2023 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kie.kogito.quarkus.serverless.workflow.deployment.livereload;

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

import org.kie.kogito.examples.sw.greeting.GreeterGrpc;
import org.kie.kogito.examples.sw.greeting.Greeting;
import org.kie.kogito.examples.sw.greeting.Greeting.HelloReply;
import org.kie.kogito.examples.sw.greeting.Greeting.HelloRequest;

import io.grpc.Server;
import io.grpc.ServerBuilder;
import io.grpc.Status;
import io.grpc.stub.StreamObserver;
import io.quarkus.grpc.GrpcService;

@GrpcService
public class GreeterService extends GreeterGrpc.GreeterImplBase {

public static final String[] SUPPORTED_LANGUAGES = { "English", "Spanish" };

public static void main(String[] args) throws IOException, InterruptedException {
Server server = buildServer(Integer.getInteger("grpc.port", 50051));
server.start();
server.awaitTermination();
}

public static Server buildServer(int port) {
return ServerBuilder.forPort(port).addService(new GreeterService()).build();
}

@Override
public void sayHello(Greeting.HelloRequest request,
StreamObserver<HelloReply> responseObserver) {
responseObserver.onNext(HelloReply.newBuilder().setMessage(getMessage(request)).build());
responseObserver.onCompleted();
}

@Override
public void sayHelloAllLanguages(HelloRequest request, StreamObserver<HelloReply> responseObserver) {
for (String language : SUPPORTED_LANGUAGES) {
HelloRequest languageRequest = HelloRequest.newBuilder(request).setLanguage(language).build();
responseObserver.onNext(HelloReply.newBuilder().setMessage(getMessage(languageRequest)).build());
}
responseObserver.onCompleted();
}

@Override
public StreamObserver<HelloRequest> sayHelloMultipleLanguagesAtOnce(StreamObserver<HelloReply> responseObserver) {
return new StreamObserver<>() {

private final List<String> messages = new ArrayList<>();

@Override
public void onNext(HelloRequest helloRequest) {
messages.add(getMessage(helloRequest));
}

@Override
public void onError(Throwable throwable) {
// ignore
}

@Override
public void onCompleted() {
responseObserver.onNext(HelloReply.newBuilder().setMessage(String.join("\n", messages)).build());
responseObserver.onCompleted();
}
};
}

@Override
public StreamObserver<HelloRequest> sayHelloMultipleLanguages(StreamObserver<HelloReply> responseObserver) {
return new StreamObserver<>() {
@Override
public void onNext(HelloRequest helloRequest) {
responseObserver.onNext(HelloReply.newBuilder().setMessage(getMessage(helloRequest)).build());
}

@Override
public void onError(Throwable throwable) {
// ignore
}

@Override
public void onCompleted() {
responseObserver.onCompleted();
}
};
}

@Override
public StreamObserver<HelloRequest> sayHelloMultipleLanguagesError(StreamObserver<HelloReply> responseObserver) {
return new StreamObserver<>() {
int counter;

@Override
public void onNext(HelloRequest helloRequest) {
counter++;
if (counter == 2) {
responseObserver.onNext(HelloReply.newBuilder().setMessage(getMessage(helloRequest)).build());
RuntimeException ex = Status.OUT_OF_RANGE.asRuntimeException();
responseObserver.onError(ex);
} else if (counter < 2) {
responseObserver.onNext(HelloReply.newBuilder().setMessage(getMessage(helloRequest)).build());
}
}

@Override
public void onError(Throwable throwable) {
// ignore
}

@Override
public void onCompleted() {
if (counter < 2) {
responseObserver.onCompleted();
}
}
};
}

private static String getMessage(HelloRequest request) {
String message;
switch (request.getLanguage().toLowerCase()) {
case "spanish":
message = "Saludos desde gRPC service " + request.getName();
break;
case "english":
default:
message = "Hello from gRPC service " + request.getName();
}
return message;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
syntax = "proto3";

option java_package="org.kie.kogito.examples.sw.greeting";



// The greeter service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
rpc SayHelloAllLanguages (HelloRequest) returns (stream HelloReply) {}
rpc SayHelloMultipleLanguagesAtOnce (stream HelloRequest) returns (HelloReply) {}
rpc SayHelloMultipleLanguages (stream HelloRequest) returns (stream HelloReply) {}
rpc SayHelloMultipleLanguagesError (stream HelloRequest) returns (stream HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
string name = 1;
string language=2;
}

// The response message containing the greetings
message HelloReply {
string message = 1;
}
Loading

0 comments on commit 51e5b39

Please sign in to comment.