From ba8277d013f7ac1ff00352b5c2abc3dac839528a Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 1 Jul 2025 19:46:03 +0000
Subject: [PATCH 1/5] [maven-release-plugin] prepare release
polyapi-java-0.15.5
---
commons/pom.xml | 2 +-
library/pom.xml | 2 +-
parent-pom/pom.xml | 4 ++--
polyapi-maven-plugin/pom.xml | 2 +-
pom.xml | 4 ++--
5 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/commons/pom.xml b/commons/pom.xml
index 75cf2819..2f1c9fcf 100644
--- a/commons/pom.xml
+++ b/commons/pom.xml
@@ -4,7 +4,7 @@
io.polyapi
parent-pom
- 0.15.5-SNAPSHOT
+ 0.15.5
../parent-pom
diff --git a/library/pom.xml b/library/pom.xml
index f02dd9a3..b78ada37 100644
--- a/library/pom.xml
+++ b/library/pom.xml
@@ -4,7 +4,7 @@
io.polyapi
parent-pom
- 0.15.5-SNAPSHOT
+ 0.15.5
../parent-pom
library
diff --git a/parent-pom/pom.xml b/parent-pom/pom.xml
index b2ae77e0..aa50aab1 100644
--- a/parent-pom/pom.xml
+++ b/parent-pom/pom.xml
@@ -3,7 +3,7 @@
4.0.0
io.polyapi
parent-pom
- 0.15.5-SNAPSHOT
+ 0.15.5
pom
PolyAPI Java parent POM
https://polyapi.io
@@ -28,7 +28,7 @@
scm:git:git@github.com:polyapi/polyapi-java.git
scm:git:git@github.com:polyapi/polyapi-java.git
https://github.com/polyapi/polyapi-java
- HEAD
+ polyapi-java-0.15.5
17
diff --git a/polyapi-maven-plugin/pom.xml b/polyapi-maven-plugin/pom.xml
index 56871939..1a9245fd 100644
--- a/polyapi-maven-plugin/pom.xml
+++ b/polyapi-maven-plugin/pom.xml
@@ -4,7 +4,7 @@
io.polyapi
parent-pom
- 0.15.5-SNAPSHOT
+ 0.15.5
../parent-pom
polyapi-maven-plugin
diff --git a/pom.xml b/pom.xml
index 4a5ee6c7..a117cb44 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
io.polyapi
polyapi-java
- 0.15.5-SNAPSHOT
+ 0.15.5
pom
parent-pom
@@ -35,7 +35,7 @@
scm:git:git@github.com:polyapi/polyapi-java.git
scm:git:git@github.com:polyapi/polyapi-java.git
https://github.com/polyapi/polyapi-java
- HEAD
+ polyapi-java-0.15.5
From fe1b01dfd5ccfd63e4597cfb035de670a99bfe87 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 1 Jul 2025 19:46:05 +0000
Subject: [PATCH 2/5] [maven-release-plugin] prepare for next development
iteration
---
commons/pom.xml | 2 +-
library/pom.xml | 2 +-
parent-pom/pom.xml | 4 ++--
polyapi-maven-plugin/pom.xml | 2 +-
pom.xml | 4 ++--
5 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/commons/pom.xml b/commons/pom.xml
index 2f1c9fcf..141d4256 100644
--- a/commons/pom.xml
+++ b/commons/pom.xml
@@ -4,7 +4,7 @@
io.polyapi
parent-pom
- 0.15.5
+ 0.15.6-SNAPSHOT
../parent-pom
diff --git a/library/pom.xml b/library/pom.xml
index b78ada37..17a60586 100644
--- a/library/pom.xml
+++ b/library/pom.xml
@@ -4,7 +4,7 @@
io.polyapi
parent-pom
- 0.15.5
+ 0.15.6-SNAPSHOT
../parent-pom
library
diff --git a/parent-pom/pom.xml b/parent-pom/pom.xml
index aa50aab1..b7e6bc64 100644
--- a/parent-pom/pom.xml
+++ b/parent-pom/pom.xml
@@ -3,7 +3,7 @@
4.0.0
io.polyapi
parent-pom
- 0.15.5
+ 0.15.6-SNAPSHOT
pom
PolyAPI Java parent POM
https://polyapi.io
@@ -28,7 +28,7 @@
scm:git:git@github.com:polyapi/polyapi-java.git
scm:git:git@github.com:polyapi/polyapi-java.git
https://github.com/polyapi/polyapi-java
- polyapi-java-0.15.5
+ HEAD
17
diff --git a/polyapi-maven-plugin/pom.xml b/polyapi-maven-plugin/pom.xml
index 1a9245fd..449bc724 100644
--- a/polyapi-maven-plugin/pom.xml
+++ b/polyapi-maven-plugin/pom.xml
@@ -4,7 +4,7 @@
io.polyapi
parent-pom
- 0.15.5
+ 0.15.6-SNAPSHOT
../parent-pom
polyapi-maven-plugin
diff --git a/pom.xml b/pom.xml
index a117cb44..60c23271 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
io.polyapi
polyapi-java
- 0.15.5
+ 0.15.6-SNAPSHOT
pom
parent-pom
@@ -35,7 +35,7 @@
scm:git:git@github.com:polyapi/polyapi-java.git
scm:git:git@github.com:polyapi/polyapi-java.git
https://github.com/polyapi/polyapi-java
- polyapi-java-0.15.5
+ HEAD
From c9539732499917953949f14d38e7ea406939b1b1 Mon Sep 17 00:00:00 2001
From: sasajo
Date: Tue, 2 Sep 2025 15:50:16 +0200
Subject: [PATCH 3/5] Add config flag to the Java generate command named:
functionIds.
---
.../polyapi/plugin/mojo/GenerateSourcesMojo.java | 10 +++++++++-
.../service/generation/PolyGenerationService.java | 2 +-
.../generation/PolyGenerationServiceImpl.java | 15 ++++++++++++++-
3 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/mojo/GenerateSourcesMojo.java b/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/mojo/GenerateSourcesMojo.java
index 00e17a62..effc886a 100644
--- a/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/mojo/GenerateSourcesMojo.java
+++ b/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/mojo/GenerateSourcesMojo.java
@@ -24,6 +24,10 @@ public class GenerateSourcesMojo extends PolyApiMojo {
@Parameter(property = "context")
private String context;
+
+ @Parameter(property = "functionIds")
+ private String functionIds;
+
private PolyGenerationService polyGenerationService;
@Override
@@ -32,7 +36,11 @@ public void execute(String host, Integer port) {
this.polyGenerationService = new PolyGenerationServiceImpl(getHttpClient(), getJsonParser(), host, port, getTokenProvider().getToken());
List contextFilters = Arrays.stream(Optional.ofNullable(context).map(contextCsv -> contextCsv.split(",")).orElse(new String[]{""})).toList();
log.debug("Context filters: \"{}\"", join("\", \"", contextFilters));
- this.polyGenerationService.generate(contextFilters, overwrite);
+
+ List functionIdFilters = Arrays.stream(Optional.ofNullable(functionIds).map(functionIdsCsv -> functionIdsCsv.split(",")).orElse(new String[]{""})).toList();
+ log.debug("Function ID filters: \"{}\"", join("\", \"", functionIdFilters));
+
+ this.polyGenerationService.generate(contextFilters, functionIdFilters, overwrite);
log.info("Poly generation complete.");
}
}
diff --git a/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/generation/PolyGenerationService.java b/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/generation/PolyGenerationService.java
index e3f188ec..17692aa9 100644
--- a/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/generation/PolyGenerationService.java
+++ b/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/generation/PolyGenerationService.java
@@ -4,5 +4,5 @@
public interface PolyGenerationService {
- void generate(List contextFilters, boolean overwrite);
+ void generate(List contextFilters, List functionIdFilters, boolean overwrite);
}
diff --git a/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/generation/PolyGenerationServiceImpl.java b/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/generation/PolyGenerationServiceImpl.java
index 09d02d14..2505644d 100644
--- a/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/generation/PolyGenerationServiceImpl.java
+++ b/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/generation/PolyGenerationServiceImpl.java
@@ -50,8 +50,21 @@ public PolyGenerationServiceImpl(HttpClient httpClient, JsonParser jsonParser, S
}
@Override
- public void generate(List contextFilters, boolean overwrite) {
+ public void generate(List contextFilters, List functionIdFilters, boolean overwrite) {
var specifications = specificationService.list(contextFilters);
+ log.debug("Applying function ID filters for: {}", functionIdFilters);
+ if (functionIdFilters != null && !functionIdFilters.isEmpty()) {
+ log.info("specifications: {}", specifications);
+ specifications = specifications.stream()
+ .filter(spec -> {
+ if (spec instanceof FunctionSpecification functionSpec) {
+ log.debug("Applicable function ID: {}", functionSpec.getId());
+ return functionIdFilters.contains(functionSpec.getId());
+ }
+ return true;
+ })
+ .toList();
+ }
var contextModel = new HashMap();
contextModel.put("clientId", UUID.randomUUID().toString());
contextModel.put("host", host);
From 562a80ab91d91801aeca7afedfe2701c0b7ffe76 Mon Sep 17 00:00:00 2001
From: sasajo
Date: Tue, 2 Sep 2025 17:13:10 +0200
Subject: [PATCH 4/5] Rename the 'context' option in Java to be 'contexts'.
---
.../java/io/polyapi/plugin/mojo/GenerateSourcesMojo.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/mojo/GenerateSourcesMojo.java b/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/mojo/GenerateSourcesMojo.java
index effc886a..338ed83d 100644
--- a/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/mojo/GenerateSourcesMojo.java
+++ b/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/mojo/GenerateSourcesMojo.java
@@ -22,8 +22,8 @@ public class GenerateSourcesMojo extends PolyApiMojo {
@Parameter(property = "overwrite", defaultValue = "false")
private Boolean overwrite;
- @Parameter(property = "context")
- private String context;
+ @Parameter(property = "contexts")
+ private String contexts;
@Parameter(property = "functionIds")
private String functionIds;
@@ -34,7 +34,7 @@ public class GenerateSourcesMojo extends PolyApiMojo {
public void execute(String host, Integer port) {
log.info("Initiating generation of Poly sources.");
this.polyGenerationService = new PolyGenerationServiceImpl(getHttpClient(), getJsonParser(), host, port, getTokenProvider().getToken());
- List contextFilters = Arrays.stream(Optional.ofNullable(context).map(contextCsv -> contextCsv.split(",")).orElse(new String[]{""})).toList();
+ List contextFilters = Arrays.stream(Optional.ofNullable(contexts).map(contextCsv -> contextCsv.split(",")).orElse(new String[]{""})).toList();
log.debug("Context filters: \"{}\"", join("\", \"", contextFilters));
List functionIdFilters = Arrays.stream(Optional.ofNullable(functionIds).map(functionIdsCsv -> functionIdsCsv.split(",")).orElse(new String[]{""})).toList();
From 64fed62bb3d102d97b48ccb19dde53582a447e80 Mon Sep 17 00:00:00 2001
From: sasajo
Date: Tue, 16 Sep 2025 22:08:42 +0200
Subject: [PATCH 5/5] Changes requested after code review add server side
filtering
---
.../service/PolyFunctionServiceImpl.java | 5 +-
.../plugin/service/SpecificationService.java | 5 +-
.../service/SpecificationServiceImpl.java | 53 +++++++++----------
.../generation/PolyGenerationServiceImpl.java | 19 ++-----
4 files changed, 36 insertions(+), 46 deletions(-)
diff --git a/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/PolyFunctionServiceImpl.java b/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/PolyFunctionServiceImpl.java
index f5962d9a..a06a4a69 100644
--- a/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/PolyFunctionServiceImpl.java
+++ b/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/PolyFunctionServiceImpl.java
@@ -8,6 +8,7 @@
import io.polyapi.plugin.model.specification.Specification;
import lombok.extern.slf4j.Slf4j;
+import java.util.Collections;
import java.util.List;
import static java.lang.String.format;
@@ -32,7 +33,7 @@ public PolyFunction deploy(String type, PolyFunction polyFunction) {
@Override
public void delete(String context, String name) {
log.info("Deleting function '{}' on context '{}'.", name, context);
- List specifications = specificationService.list(List.of())
+ List specifications = specificationService.list(List.of(context), Collections.emptyList())
.stream()
.filter(spec -> spec.getName().equalsIgnoreCase(name) && spec.getContext().equalsIgnoreCase(context))
.toList();
@@ -54,7 +55,7 @@ public void delete(String context, String name) {
@Override
public void delete(String id) {
- specificationService.list(List.of()).stream()
+ specificationService.list(Collections.emptyList(), List.of(id)).stream()
.filter(specification -> specification.getId().equals(id))
.forEach(this::delete);
}
diff --git a/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/SpecificationService.java b/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/SpecificationService.java
index 33150d76..684bbe87 100644
--- a/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/SpecificationService.java
+++ b/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/SpecificationService.java
@@ -12,8 +12,9 @@ public interface SpecificationService {
/**
* Retrieve all the JSON specifications in Poly.
*
- * @param context The contexts that should be used to filter the specifications.
+ * @param contexts The contexts that should be used to filter the specifications.
+ * @param functionIdFilters A list of function/specification IDs to filter by. Can be empty.
* @return String A JSON containing the specifications.
*/
- List list(List context);
+ List list(List contexts, List functionIdFilters);
}
diff --git a/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/SpecificationServiceImpl.java b/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/SpecificationServiceImpl.java
index 0f84b359..aea35803 100644
--- a/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/SpecificationServiceImpl.java
+++ b/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/SpecificationServiceImpl.java
@@ -12,6 +12,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.StringJoiner;
import java.util.function.Predicate;
import static com.fasterxml.jackson.databind.type.TypeFactory.defaultInstance;
@@ -27,36 +28,32 @@ public SpecificationServiceImpl(HttpClient client, JsonParser jsonParser, String
}
@Override
- public List list(List contextFilters) {
+ public List list(List contextFilters, List functionIdFilters) {
log.info("Retrieving JSON specifications from PolyAPI for this user.");
- List specifications = get("specs", defaultInstance().constructCollectionType(List.class, Specification.class));
- log.debug("{} specifications retrieved without filter.", specifications.size());
- if (log.isDebugEnabled()) {
+
+ // Build the query parameter string for server-side filtering
+ StringJoiner queryParams = new StringJoiner("&");
+ if (contextFilters != null && !contextFilters.isEmpty()) {
+ queryParams.add("contexts=" + String.join(",", contextFilters));
+ }
+ if (functionIdFilters != null && !functionIdFilters.isEmpty()) {
+ queryParams.add("ids=" + String.join(",", functionIdFilters));
+ }
+
+ String path = "specs";
+ if (queryParams.length() > 0) {
+ path += "?" + queryParams.toString();
+ log.info("Applying server-side filters: {}", queryParams.toString());
+ }
+
+ // Make the API call with the constructed path
+ List specifications = get(path, defaultInstance().constructCollectionType(List.class, Specification.class));
+
+ if (log.isTraceEnabled()) {
log.trace("Retrieved specifications with the following IDs: [{}]", specifications.stream().map(Specification::getId).collect(joining(", ")));
}
- log.debug("Validating for duplicate context/name pairs and filtering specification contexts.");
- Map filteredMap = new HashMap<>();
- specifications.stream()
- .filter(not(IgnoredSpecification.class::isInstance))
- .filter(specification -> {
- String context = specification.getContext().trim().toLowerCase();
- return contextFilters.isEmpty() || contextFilters.stream()
- .map(String::trim)
- .map(String::toLowerCase)
- .anyMatch(contextFilter -> contextFilter.equalsIgnoreCase(context) || contextFilter.isEmpty() || context.startsWith(format("%s.", contextFilter)));
- })
- .filter(not(specification -> specification instanceof ClientFunctionSpecification clientFunctionSpecification && !clientFunctionSpecification.getLanguage().equalsIgnoreCase("java")))
- .forEach(specification -> {
- String key = format("%s.%s", specification.getContext(), specification.getName()).toLowerCase();
- if (filteredMap.containsKey(key)) {
- log.warn("Skipping {} specification '{}' in context '{}' as it clashes with {} specification with the same name and context.", specification.getType(), specification.getName(), specification.getContext(), filteredMap.get(key).getType());
- } else {
- log.debug("Specification key '{}' not repeated (yet).", key);
- filteredMap.put(key, specification);
- }
- });
- List result = filteredMap.values().stream().toList();
- log.info("{} specifications retrieved.", result.size());
- return result;
+
+ log.info("{} specifications retrieved after server-side filtering.", specifications.size());
+ return specifications;
}
}
diff --git a/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/generation/PolyGenerationServiceImpl.java b/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/generation/PolyGenerationServiceImpl.java
index 2505644d..60bf5484 100644
--- a/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/generation/PolyGenerationServiceImpl.java
+++ b/polyapi-maven-plugin/src/main/java/io/polyapi/plugin/service/generation/PolyGenerationServiceImpl.java
@@ -51,20 +51,11 @@ public PolyGenerationServiceImpl(HttpClient httpClient, JsonParser jsonParser, S
@Override
public void generate(List contextFilters, List functionIdFilters, boolean overwrite) {
- var specifications = specificationService.list(contextFilters);
- log.debug("Applying function ID filters for: {}", functionIdFilters);
- if (functionIdFilters != null && !functionIdFilters.isEmpty()) {
- log.info("specifications: {}", specifications);
- specifications = specifications.stream()
- .filter(spec -> {
- if (spec instanceof FunctionSpecification functionSpec) {
- log.debug("Applicable function ID: {}", functionSpec.getId());
- return functionIdFilters.contains(functionSpec.getId());
- }
- return true;
- })
- .toList();
- }
+ // The call to list now passes both filters for server-side processing.
+ log.info("Applying context filters on the API call: {}", contextFilters);
+ log.info("Applying function ID filters on the API call: {}", functionIdFilters);
+ var specifications = specificationService.list(contextFilters, functionIdFilters);
+
var contextModel = new HashMap();
contextModel.put("clientId", UUID.randomUUID().toString());
contextModel.put("host", host);