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);