diff --git a/graalpy/graalpy-micronaut-pygal-charts/README.md b/graalpy/graalpy-micronaut-pygal-charts/README.md index d69d788..aa26d4b 100644 --- a/graalpy/graalpy-micronaut-pygal-charts/README.md +++ b/graalpy/graalpy-micronaut-pygal-charts/README.md @@ -20,7 +20,7 @@ To start the demo, simply run: ./mvnw package mn:run ``` -When the demo runs, open the follwing URLs in a browser: +When the demo runs, open the following URLs in a browser: | URL | Service | |:------------------------------|:------------------------------| diff --git a/graalpy/graalpy-micronaut-pygal-charts/src/main/java/com/example/PyGalServiceMixed.java b/graalpy/graalpy-micronaut-pygal-charts/src/main/java/com/example/PyGalServiceMixed.java index f93fc7e..8061f44 100644 --- a/graalpy/graalpy-micronaut-pygal-charts/src/main/java/com/example/PyGalServiceMixed.java +++ b/graalpy/graalpy-micronaut-pygal-charts/src/main/java/com/example/PyGalServiceMixed.java @@ -7,17 +7,16 @@ package com.example; import jakarta.inject.Singleton; -import org.graalvm.polyglot.Value; import java.util.List; import java.util.stream.IntStream; @Singleton public class PyGalServiceMixed implements PyGalService { - private final Value pythonFunctionXY; + private final RenderXYFunction renderXYFunction; PyGalServiceMixed(GraalPyContext graalPyContext) { - pythonFunctionXY = graalPyContext.eval( + renderXYFunction = graalPyContext.eval( // language=python """ import pygal @@ -29,12 +28,17 @@ def render_xy(title, label_datapoint_entries): xy_chart.add(entry.label(), entry.dataPoints()) return xy_chart.render().decode() - render_xy"""); + render_xy""").as(RenderXYFunction.class); } public record Entry(String label, double[][] dataPoints) { } + @FunctionalInterface + public interface RenderXYFunction { + String apply(String title, List labelDatapointEntries); + } + @Override public String renderXYChart() { String title = "XY Cosinus"; @@ -46,6 +50,6 @@ public String renderXYChart() { new Entry("y = 1", new double[][]{{-5, 1}, {5, 1}}), new Entry("y = -1", new double[][]{{-5, -1}, {5, -1}}) ); - return pythonFunctionXY.execute(title, labelDatapointEntries).asString(); + return renderXYFunction.apply(title, labelDatapointEntries); } } diff --git a/graalpy/graalpy-micronaut-pygal-charts/src/main/resources/META-INF/native-image/com.example/demo/reachability-metadata.json b/graalpy/graalpy-micronaut-pygal-charts/src/main/resources/META-INF/native-image/com.example/demo/reachability-metadata.json index 56b5111..92d4ee3 100644 --- a/graalpy/graalpy-micronaut-pygal-charts/src/main/resources/META-INF/native-image/com.example/demo/reachability-metadata.json +++ b/graalpy/graalpy-micronaut-pygal-charts/src/main/resources/META-INF/native-image/com.example/demo/reachability-metadata.json @@ -3,6 +3,9 @@ { "type": "com.example.PyGalServiceMixed$Entry" }, + { + "type": "com.example.PyGalServiceMixed$RenderXYFunction" + }, { "type": "com.example.PyGalServicePureJava$BytesIO" }, @@ -12,6 +15,13 @@ { "type": "com.example.PyGalServicePureJava$XY" }, + { + "type": { + "proxy": [ + "com.example.PyGalServiceMixed$RenderXYFunction" + ] + } + }, { "type": { "proxy": [ diff --git a/graalpy/graalpy-spring-boot-pygal-charts/README.md b/graalpy/graalpy-spring-boot-pygal-charts/README.md index 349381e..e3b5332 100644 --- a/graalpy/graalpy-spring-boot-pygal-charts/README.md +++ b/graalpy/graalpy-spring-boot-pygal-charts/README.md @@ -20,7 +20,7 @@ To start the demo, simply run: ./mvnw package spring-boot:run ``` -When the demo runs, open the follwing URLs in a browser: +When the demo runs, open the following URLs in a browser: | URL | Service | |:------------------------------|:------------------------------| diff --git a/graalpy/graalpy-spring-boot-pygal-charts/src/main/java/com/example/demo/PyGalServiceMixed.java b/graalpy/graalpy-spring-boot-pygal-charts/src/main/java/com/example/demo/PyGalServiceMixed.java index f0fc98b..365c9de 100644 --- a/graalpy/graalpy-spring-boot-pygal-charts/src/main/java/com/example/demo/PyGalServiceMixed.java +++ b/graalpy/graalpy-spring-boot-pygal-charts/src/main/java/com/example/demo/PyGalServiceMixed.java @@ -7,7 +7,6 @@ package com.example.demo; import com.example.demo.GraalPyContextConfiguration.GraalPyContext; -import org.graalvm.polyglot.Value; import org.springframework.stereotype.Service; import java.util.List; @@ -15,10 +14,10 @@ @Service public class PyGalServiceMixed implements PyGalService { - private final Value pythonFunctionXY; + private final RenderXYFunction renderXYFunction; PyGalServiceMixed(GraalPyContext graalPyContext) { - pythonFunctionXY = graalPyContext.eval( + renderXYFunction = graalPyContext.eval( // language=python """ import pygal @@ -30,12 +29,17 @@ def render_xy(title, label_datapoint_entries): xy_chart.add(entry.label(), entry.dataPoints()) return xy_chart.render().decode() - render_xy"""); + render_xy""").as(RenderXYFunction.class); } public record Entry(String label, double[][] dataPoints) { } + @FunctionalInterface + public interface RenderXYFunction { + String apply(String title, List labelDatapointEntries); + } + @Override public String renderXYChart() { String title = "XY Cosinus"; @@ -47,6 +51,6 @@ public String renderXYChart() { new Entry("y = 1", new double[][]{{-5, 1}, {5, 1}}), new Entry("y = -1", new double[][]{{-5, -1}, {5, -1}}) ); - return pythonFunctionXY.execute(title, labelDatapointEntries).asString(); + return renderXYFunction.apply(title, labelDatapointEntries); } } diff --git a/graalpy/graalpy-spring-boot-pygal-charts/src/main/resources/META-INF/native-image/com.example/demo/reachability-metadata.json b/graalpy/graalpy-spring-boot-pygal-charts/src/main/resources/META-INF/native-image/com.example/demo/reachability-metadata.json index b8dcc03..56ad849 100644 --- a/graalpy/graalpy-spring-boot-pygal-charts/src/main/resources/META-INF/native-image/com.example/demo/reachability-metadata.json +++ b/graalpy/graalpy-spring-boot-pygal-charts/src/main/resources/META-INF/native-image/com.example/demo/reachability-metadata.json @@ -3,6 +3,9 @@ { "type": "com.example.demo.PyGalServiceMixed$Entry" }, + { + "type": "com.example.demo.PyGalServiceMixed$RenderXYFunction" + }, { "type": "com.example.demo.PyGalServicePureJava$BytesIO" }, @@ -12,6 +15,13 @@ { "type": "com.example.demo.PyGalServicePureJava$XY" }, + { + "type": { + "proxy": [ + "com.example.demo.PyGalServiceMixed$RenderXYFunction" + ] + } + }, { "type": { "proxy": [