From da1aeac39a472caa77943b6d9bc1565c4dfcbdff Mon Sep 17 00:00:00 2001 From: Gabriel Roldan Date: Sat, 3 Aug 2024 18:47:22 -0300 Subject: [PATCH] Make the classess for GeoServer plugin and its dependencies build for Java 11 Make sure the GeoServer plugin and its dependencies are built for Java 11. Run the plugin build tests in Github Actions with a java version matrix [11, 17, 21] --- .github/workflows/build-plugin.yaml | 15 +++++-- Makefile | 9 ++-- pom.xml | 2 +- .../acl/authorization/AccessSummary.java | 4 +- .../authorization/WorkspaceAccessSummary.java | 7 ++- .../AuthorizationServiceImpl.java | 44 +++++++++++-------- .../AuthorizationServiceTest.java | 8 +++- src/application/pom.xml | 3 ++ ...thenticationSecurityAutoConfiguration.java | 2 +- src/domain/pom.xml | 3 ++ .../domain/rules/RuleAdminServiceImpl.java | 3 +- .../geoserver/acl/domain/rules/RuleEvent.java | 4 +- .../rules/MemoryPriorityRepository.java | 3 +- .../acl/domain/rules/RuleAdminServiceIT.java | 15 +++---- .../rules/RuleAdminServiceImplTest.java | 5 ++- src/integration/openapi/java-client/pom.xml | 3 ++ .../client/config/ApiClientConfiguration.java | 19 ++++---- .../AuthorizationServiceClientAdaptor.java | 3 +- src/integration/openapi/model-mapping/pom.xml | 3 ++ .../mapper/AuthorizationModelApiMapper.java | 3 +- src/integration/spring-boot/pom.xml | 3 ++ src/integration/spring/cache/pom.xml | 3 ++ ...hingAuthorizationServiceConfiguration.java | 3 +- .../CachingAuthorizationServiceTest.java | 6 ++- src/integration/spring/domain/pom.xml | 3 ++ src/openapi/spring5/pom.xml | 1 + .../accessmanager/ACLDispatcherCallback.java | 5 ++- .../ACLResourceAccessManager.java | 22 ++++++---- .../accessmanager/AccessManagerConfig.java | 6 ++- .../acl/plugin/accessmanager/AclBaseTest.java | 3 +- .../it/support/AclIntegrationTestSupport.java | 1 - src/plugin/pom.xml | 3 ++ .../model/DataAccessRuleEditModel.java | 3 +- .../model/DataAccessRulesDataProvider.java | 3 +- .../model/MutableLayerDetails.java | 5 ++- .../model/AdminRulesTableDataProvider.java | 3 +- .../web/components/AbstractRulesModel.java | 7 +-- .../web/components/RulesDataProvider.java | 6 +-- .../web/components/RulesTablePanelTest.java | 6 ++- 39 files changed, 168 insertions(+), 82 deletions(-) diff --git a/.github/workflows/build-plugin.yaml b/.github/workflows/build-plugin.yaml index c9d131b..9f4ee3b 100644 --- a/.github/workflows/build-plugin.yaml +++ b/.github/workflows/build-plugin.yaml @@ -12,12 +12,15 @@ jobs: name: GeoServer dev version runs-on: ubuntu-latest timeout-minutes: 15 + strategy: + matrix: + java-version: [ 11, 17, 21 ] steps: - uses: actions/checkout@v3 - uses: actions/setup-java@v2 with: distribution: 'temurin' - java-version: '17' + java-version: ${{ matrix.java-version }} cache: 'maven' - run: | make plugin-test-gs-dev @@ -25,12 +28,15 @@ jobs: name: GeoServer stable version runs-on: ubuntu-latest timeout-minutes: 15 + strategy: + matrix: + java-version: [ 11, 17, 21 ] steps: - uses: actions/checkout@v3 - uses: actions/setup-java@v2 with: distribution: 'temurin' - java-version: '17' + java-version: ${{ matrix.java-version }} cache: 'maven' - run: | make plugin-test-gs-stable @@ -38,12 +44,15 @@ jobs: name: GeoServer maintenance version runs-on: ubuntu-latest timeout-minutes: 15 + strategy: + matrix: + java-version: [ 11, 17, 21 ] steps: - uses: actions/checkout@v3 - uses: actions/setup-java@v2 with: distribution: 'temurin' - java-version: '17' + java-version: ${{ matrix.java-version }} cache: 'maven' - run: | make plugin-test-gs-maintenance diff --git a/Makefile b/Makefile index 4b38e0f..25dffd4 100644 --- a/Makefile +++ b/Makefile @@ -11,14 +11,17 @@ install: plugin: ./mvnw clean install -pl :gs-acl-client-plugin --also-make -ntp +# plugin-test-* run with -Denforcer.skip for the CI build +# to execute it with both Java 11 and 17, ensuring the plugin is compatible with +# the minimum java version required by GeoServer plugin-test-gs-dev: - ./mvnw -P gs_dev verify -pl :gs-acl-client-plugin -am -ntp + ./mvnw -Denforcer.skip -P gs_dev verify -pl :gs-acl-client-plugin -am -ntp plugin-test-gs-stable: - ./mvnw -P gs_stable verify -pl :gs-acl-client-plugin -am -ntp + ./mvnw -Denforcer.skip -P gs_stable verify -pl :gs-acl-client-plugin -am -ntp plugin-test-gs-maintenance: - ./mvnw -P gs_maintenance verify -pl :gs-acl-client-plugin -am -ntp + ./mvnw -Denforcer.skip -P gs_maintenance verify -pl :gs-acl-client-plugin -am -ntp lint: ./mvnw sortpom:verify fmt:check -ntp diff --git a/pom.xml b/pom.xml index c77f252..7859117 100644 --- a/pom.xml +++ b/pom.xml @@ -354,7 +354,7 @@ com.spotify.fmt fmt-maven-plugin - 2.21.1 + 2.23 false .*\.java diff --git a/src/application/authorization-api/src/main/java/org/geoserver/acl/authorization/AccessSummary.java b/src/application/authorization-api/src/main/java/org/geoserver/acl/authorization/AccessSummary.java index 52ca9fc..e435b23 100644 --- a/src/application/authorization-api/src/main/java/org/geoserver/acl/authorization/AccessSummary.java +++ b/src/application/authorization-api/src/main/java/org/geoserver/acl/authorization/AccessSummary.java @@ -4,6 +4,8 @@ */ package org.geoserver.acl.authorization; +import static java.lang.String.format; + import lombok.EqualsAndHashCode; import lombok.NonNull; @@ -94,7 +96,7 @@ public Set adminableWorkspaces() { @Override public String toString() { var values = new TreeMap<>(workspaceSummaries).values(); - return "%s[%s]".formatted(getClass().getSimpleName(), values); + return format("%s[%s]", getClass().getSimpleName(), values); } public boolean hasAdminRightsToAnyWorkspace() { diff --git a/src/application/authorization-api/src/main/java/org/geoserver/acl/authorization/WorkspaceAccessSummary.java b/src/application/authorization-api/src/main/java/org/geoserver/acl/authorization/WorkspaceAccessSummary.java index ea382ac..001d792 100644 --- a/src/application/authorization-api/src/main/java/org/geoserver/acl/authorization/WorkspaceAccessSummary.java +++ b/src/application/authorization-api/src/main/java/org/geoserver/acl/authorization/WorkspaceAccessSummary.java @@ -4,6 +4,8 @@ */ package org.geoserver.acl.authorization; +import static java.lang.String.format; + import lombok.Builder; import lombok.NonNull; import lombok.Value; @@ -58,8 +60,9 @@ public class WorkspaceAccessSummary implements Comparable flatten(Map> found) { .flatMap(List::stream) .sorted((r1, r2) -> Long.compare(r1.getPriority(), r2.getPriority())) .distinct() - .toList(); + .collect(Collectors.toList()); } @Override @@ -116,7 +117,8 @@ public AccessInfo getAccessInfo(@NonNull AccessRequest request) { if (null == ret) ret = AccessInfo.DENY_ALL; - List matchingIds = flatten(groupedRules).stream().map(Rule::getId).toList(); + List matchingIds = + flatten(groupedRules).stream().map(Rule::getId).collect(Collectors.toList()); ret = ret.withMatchingRules(matchingIds); log.debug("Request: {}, response: {}", request, ret); return ret; @@ -147,7 +149,7 @@ public AccessSummary getUserAccessSummary(AccessSummaryRequest request) { List summaries = workspaces.stream() .map(ws -> conflateViewables(ws, wsAdminRules, wsRules)) - .toList(); + .collect(Collectors.toList()); return AccessSummary.of(summaries); } @@ -206,16 +208,21 @@ void conflateRules(WorkspaceAccessSummary.Builder builder, List rules) { String layer = r.getIdentifier().getLayer(); if (null == layer) layer = WorkspaceAccessSummary.ANY; switch (access) { - case ALLOW -> builder.addAllowed(layer); - case DENY -> { - // only add forbidden layers if they're so for all services, to - // comply with the "somehow can see" motto of the summary - String service = r.getIdentifier().getService(); - if (null == service) { - builder.addForbidden(layer); + case ALLOW: + builder.addAllowed(layer); + break; + case DENY: + { + // only add forbidden layers if they're so for all services, + // to comply with the "somehow can see" motto of the summary + String service = r.getIdentifier().getService(); + if (null == service) { + builder.addForbidden(layer); + } } - } - default -> throw new IllegalArgumentException(); + break; + default: + throw new IllegalArgumentException(); } }); } @@ -270,11 +277,11 @@ private Function workspaceMapper(Function workspaceExt private BinaryOperator> mergeFunction() { return (l1, l2) -> { - if (l1 instanceof ArrayList) { + if (l1 instanceof ArrayList) { l1.addAll(l2); return l1; } - if (l2 instanceof ArrayList) { + if (l2 instanceof ArrayList) { l2.addAll(l1); return l2; } @@ -364,7 +371,7 @@ private Geometry toJTS(org.geolatte.geom.Geometry geom) { private String unionCQL(String c1, String c2) { if (c1 == null || c2 == null) return null; - return "(%s) OR (%s)".formatted(c1, c2); + return format("(%s) OR (%s)", c1, c2); } private Geometry unionGeometry(Geometry g1, Geometry g2) { @@ -525,7 +532,7 @@ private Geometry intersect(List limits) { .map(RuleLimits::getAllowedArea) .filter(Objects::nonNull) .map(this::toJTS) - .toList(); + .collect(Collectors.toList()); if (geoms.isEmpty()) return null; if (1 == geoms.size()) return geoms.get(0); @@ -618,7 +625,8 @@ protected Map> getMatchingRulesByRole(AccessRequest request) filter = filter.clone(); filter.getRole().setType(SpecialFilterType.DEFAULT); } - List found = ruleService.getAll(RuleQuery.of(filter)).toList(); + List found = + ruleService.getAll(RuleQuery.of(filter)).collect(Collectors.toList()); ret.put(null, found); } else { // used to be: for(role: finalRoleFilter) getRulesByRole(filter, role);, @@ -641,7 +649,7 @@ protected Map> getMatchingRulesByRole(AccessRequest request) private List getRulesByRoleIncludeDefault(RuleFilter filter) { filter = filter.clone(); filter.getRole().setIncludeDefault(true); - return ruleService.getAll(RuleQuery.of(filter)).toList(); + return ruleService.getAll(RuleQuery.of(filter)).collect(Collectors.toList()); } private boolean isAdminAuth(Optional rule) { diff --git a/src/application/authorization-impl/src/test/java/org/geoserver/acl/authorization/AuthorizationServiceTest.java b/src/application/authorization-impl/src/test/java/org/geoserver/acl/authorization/AuthorizationServiceTest.java index 869b362..0d500b3 100644 --- a/src/application/authorization-impl/src/test/java/org/geoserver/acl/authorization/AuthorizationServiceTest.java +++ b/src/application/authorization-impl/src/test/java/org/geoserver/acl/authorization/AuthorizationServiceTest.java @@ -33,6 +33,7 @@ import java.util.Arrays; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; /** * {@link AuthorizationService} integration/conformance test @@ -594,9 +595,12 @@ private void assertGetMatchingRules( private void assertMatchingRules(AccessRequest request, Integer... expectedPriorities) { List rules = authorizationService.getMatchingRules(request); - List pri = rules.stream().map(r -> r.getPriority()).sorted().toList(); + List pri = + rules.stream().map(r -> r.getPriority()).sorted().collect(Collectors.toList()); List exp = - Arrays.asList(expectedPriorities).stream().map(i -> i.longValue()).toList(); + Arrays.asList(expectedPriorities).stream() + .map(i -> i.longValue()) + .collect(Collectors.toList()); assertEquals(exp, pri, "Bad rule set selected for filter " + request); } diff --git a/src/application/pom.xml b/src/application/pom.xml index 82d89b9..686f289 100644 --- a/src/application/pom.xml +++ b/src/application/pom.xml @@ -18,4 +18,7 @@ authorization-api authorization-impl + + 11 + diff --git a/src/artifacts/api/src/main/java/org/geoserver/acl/autoconfigure/security/PreAuthenticationSecurityAutoConfiguration.java b/src/artifacts/api/src/main/java/org/geoserver/acl/autoconfigure/security/PreAuthenticationSecurityAutoConfiguration.java index 3c10f01..b64aece 100644 --- a/src/artifacts/api/src/main/java/org/geoserver/acl/autoconfigure/security/PreAuthenticationSecurityAutoConfiguration.java +++ b/src/artifacts/api/src/main/java/org/geoserver/acl/autoconfigure/security/PreAuthenticationSecurityAutoConfiguration.java @@ -41,7 +41,7 @@ RequestHeaderAuthenticationFilter requestHeaderAuthenticationFilter( String rolesHeader = config.getHeaders().getRolesHeader(); if (!StringUtils.hasText(userHeader) || !StringUtils.hasText(rolesHeader)) { throw new IllegalStateException( - """ + """ Both user and roles header names must be provided, got \ geoserver.acl.security.headers.userHeader: %s, \ geoserver.acl.security.headers.rolesHeader: %s diff --git a/src/domain/pom.xml b/src/domain/pom.xml index 5a0c856..983538c 100644 --- a/src/domain/pom.xml +++ b/src/domain/pom.xml @@ -20,4 +20,7 @@ rule-management adminrule-management + + 11 + diff --git a/src/domain/rule-management/src/main/java/org/geoserver/acl/domain/rules/RuleAdminServiceImpl.java b/src/domain/rule-management/src/main/java/org/geoserver/acl/domain/rules/RuleAdminServiceImpl.java index 16a0f69..5c3ebaa 100644 --- a/src/domain/rule-management/src/main/java/org/geoserver/acl/domain/rules/RuleAdminServiceImpl.java +++ b/src/domain/rule-management/src/main/java/org/geoserver/acl/domain/rules/RuleAdminServiceImpl.java @@ -18,6 +18,7 @@ import java.util.Optional; import java.util.Set; import java.util.function.Consumer; +import java.util.stream.Collectors; import java.util.stream.Stream; /** @@ -186,7 +187,7 @@ public Stream getAll(@NonNull RuleQuery query) { @Override public Optional getRule(@NonNull RuleFilter filter) throws IllegalArgumentException { RuleQuery query = RuleQuery.of(filter).setLimit(2); - List found = ruleRepository.findAll(query).toList(); + List found = ruleRepository.findAll(query).collect(Collectors.toList()); if (found.size() > 1) { throw new IllegalArgumentException( "Unexpected rule count for filter " + filter + " : " + found.size()); diff --git a/src/domain/rule-management/src/main/java/org/geoserver/acl/domain/rules/RuleEvent.java b/src/domain/rule-management/src/main/java/org/geoserver/acl/domain/rules/RuleEvent.java index 8efeb75..3ec795d 100644 --- a/src/domain/rule-management/src/main/java/org/geoserver/acl/domain/rules/RuleEvent.java +++ b/src/domain/rule-management/src/main/java/org/geoserver/acl/domain/rules/RuleEvent.java @@ -4,6 +4,8 @@ */ package org.geoserver.acl.domain.rules; +import static java.lang.String.format; + import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Data; @@ -48,6 +50,6 @@ public static RuleEvent deleted(@NonNull String... ids) { @Override public String toString() { - return "%s%s".formatted(eventType, ruleIds); + return format("%s%s", eventType, ruleIds); } } diff --git a/src/domain/rule-management/src/test/java/org/geoserver/acl/domain/rules/MemoryPriorityRepository.java b/src/domain/rule-management/src/test/java/org/geoserver/acl/domain/rules/MemoryPriorityRepository.java index 976525a..8938a0d 100644 --- a/src/domain/rule-management/src/test/java/org/geoserver/acl/domain/rules/MemoryPriorityRepository.java +++ b/src/domain/rule-management/src/test/java/org/geoserver/acl/domain/rules/MemoryPriorityRepository.java @@ -11,6 +11,7 @@ import java.util.Optional; import java.util.SortedSet; import java.util.TreeSet; +import java.util.stream.Collectors; import java.util.stream.Stream; public abstract class MemoryPriorityRepository { @@ -72,7 +73,7 @@ protected int shiftPrioritiesBetween(long min, long max, long offset) { long p = getPriority(r); return p >= min && p <= max; }) - .toList(); + .collect(Collectors.toList()); rules.removeAll(matches); matches.forEach( diff --git a/src/domain/rule-management/src/test/java/org/geoserver/acl/domain/rules/RuleAdminServiceIT.java b/src/domain/rule-management/src/test/java/org/geoserver/acl/domain/rules/RuleAdminServiceIT.java index 41ed440..40f731a 100644 --- a/src/domain/rule-management/src/test/java/org/geoserver/acl/domain/rules/RuleAdminServiceIT.java +++ b/src/domain/rule-management/src/test/java/org/geoserver/acl/domain/rules/RuleAdminServiceIT.java @@ -27,6 +27,7 @@ import java.util.List; import java.util.Optional; import java.util.Set; +import java.util.stream.Collectors; import java.util.stream.IntStream; public class RuleAdminServiceIT { @@ -255,7 +256,7 @@ void testGetAll() { ruleAdminService.setLayerDetails(r2.getId(), details2); List expected = List.of(r1, r2); - List actual = ruleAdminService.getAll().toList(); + List actual = ruleAdminService.getAll().collect(Collectors.toList()); assertThat(actual).isEqualTo(expected); } @@ -278,7 +279,7 @@ void testGetAll_and_GetList_paginated() { String nextCursorId = null; for (int page = 0; page < maxPages; page++) { query.setNextId(nextCursorId); - List result = ruleAdminService.getAll(query).toList(); + List result = ruleAdminService.getAll(query).collect(Collectors.toList()); if (result.size() > pageSize) { assertThat(result.size()).isEqualTo(1 + pageSize); nextCursorId = result.get(pageSize).getId(); @@ -608,7 +609,7 @@ void testUpdateRuleById_shifts_other_priorities_if_needed() { r1 = r1.withPriority(4); r4 = r4.withPriority(5); assertThat(ruleAdminService.update(r3)).isEqualTo(r3); - List collect = ruleAdminService.getAll().toList(); + List collect = ruleAdminService.getAll().collect(Collectors.toList()); assertGet(r2).as("r2 should have kept priority 2").isEqualTo(r2); @@ -689,11 +690,9 @@ void testShiftRulesByPriority() { } private void assertPriorities(List expectedOrder, List expectedPriorities) { - assertThat(expectedOrder.size()) - .as("mismatch in expectations") - .isEqualTo(expectedPriorities.size()); - List all = ruleAdminService.getAll().toList(); - assertThat(all.size()).isEqualTo(expectedPriorities.size()); + assertThat(expectedOrder).as("mismatch in expectations").hasSize(expectedPriorities.size()); + List all = ruleAdminService.getAll().collect(Collectors.toList()); + assertThat(all).hasSize(expectedPriorities.size()); for (int i = 0; i < expectedOrder.size(); i++) { int p = expectedPriorities.get(i); diff --git a/src/domain/rule-management/src/test/java/org/geoserver/acl/domain/rules/RuleAdminServiceImplTest.java b/src/domain/rule-management/src/test/java/org/geoserver/acl/domain/rules/RuleAdminServiceImplTest.java index efbb0f5..8fbc72f 100644 --- a/src/domain/rule-management/src/test/java/org/geoserver/acl/domain/rules/RuleAdminServiceImplTest.java +++ b/src/domain/rule-management/src/test/java/org/geoserver/acl/domain/rules/RuleAdminServiceImplTest.java @@ -26,6 +26,7 @@ import java.util.List; import java.util.Optional; import java.util.Set; +import java.util.stream.Collectors; import java.util.stream.Stream; class RuleAdminServiceImplTest { @@ -175,7 +176,7 @@ void getAll() { List expected = List.of(Rule.allow(), Rule.deny(), Rule.limit()); when(repository.findAll()).thenReturn(expected.stream()); - List actual = service.getAll().toList(); + List actual = service.getAll().collect(Collectors.toList()); verify(repository, times(1)).findAll(); verifyNoMoreInteractions(repository); assertThat(actual).isEqualTo(expected); @@ -196,7 +197,7 @@ void getList() { when(repository.findAll(query)).thenReturn(expected.stream()); - List actual = service.getAll(query).toList(); + List actual = service.getAll(query).collect(Collectors.toList()); verify(repository, times(1)).findAll(eq(query)); verifyNoMoreInteractions(repository); assertThat(actual).isEqualTo(expected); diff --git a/src/integration/openapi/java-client/pom.xml b/src/integration/openapi/java-client/pom.xml index a91bd82..dde53a9 100644 --- a/src/integration/openapi/java-client/pom.xml +++ b/src/integration/openapi/java-client/pom.xml @@ -13,6 +13,9 @@ ${revision} gs-acl-api-client + + 11 + org.geoserver.acl.openapi.spring5 diff --git a/src/integration/openapi/java-client/src/main/java/org/geoserver/acl/api/client/config/ApiClientConfiguration.java b/src/integration/openapi/java-client/src/main/java/org/geoserver/acl/api/client/config/ApiClientConfiguration.java index deb79b0..891d51c 100644 --- a/src/integration/openapi/java-client/src/main/java/org/geoserver/acl/api/client/config/ApiClientConfiguration.java +++ b/src/integration/openapi/java-client/src/main/java/org/geoserver/acl/api/client/config/ApiClientConfiguration.java @@ -4,6 +4,8 @@ */ package org.geoserver.acl.api.client.config; +import static java.lang.String.format; + import lombok.extern.slf4j.Slf4j; import org.geoserver.acl.api.client.DataRulesApi; @@ -68,20 +70,21 @@ private void waitForIt(AclClient client, int timeoutSeconds) throws InterruptedE } if (error != null) { String msg = - "Unable to connect to ACL after %,d seconds. URL: %s, user: %s, error: %s" - .formatted( - timeoutSeconds, - client.getBasePath(), - client.getUsername(), - error.getMessage()); + format( + "Unable to connect to ACL after %,d seconds. URL: %s, user: %s, error: %s", + timeoutSeconds, + client.getBasePath(), + client.getUsername(), + error.getMessage()); throw new BeanInitializationException(msg, error); } } private void logWaiting(AclClient client, RuntimeException e) { String msg = - "ACL API endpoint not ready. URL: %s, user: %s, error: %s" - .formatted(client.getBasePath(), client.getUsername(), e.getMessage()); + format( + "ACL API endpoint not ready. URL: %s, user: %s, error: %s", + client.getBasePath(), client.getUsername(), e.getMessage()); log.info(msg); } diff --git a/src/integration/openapi/java-client/src/main/java/org/geoserver/acl/api/client/integration/AuthorizationServiceClientAdaptor.java b/src/integration/openapi/java-client/src/main/java/org/geoserver/acl/api/client/integration/AuthorizationServiceClientAdaptor.java index 8388a74..b418248 100644 --- a/src/integration/openapi/java-client/src/main/java/org/geoserver/acl/api/client/integration/AuthorizationServiceClientAdaptor.java +++ b/src/integration/openapi/java-client/src/main/java/org/geoserver/acl/api/client/integration/AuthorizationServiceClientAdaptor.java @@ -19,6 +19,7 @@ import org.geoserver.acl.domain.rules.Rule; import java.util.List; +import java.util.stream.Collectors; @RequiredArgsConstructor @Slf4j @@ -70,7 +71,7 @@ public List getMatchingRules( try { apiRequest = mapper.toApi(request); apiResponse = apiClient.getMatchingRules(apiRequest); - return apiResponse.stream().map(ruleMapper::toModel).toList(); + return apiResponse.stream().map(ruleMapper::toModel).collect(Collectors.toList()); } catch (RuntimeException e) { log.error("Error getting matching rules for {}", request, e); throw e; diff --git a/src/integration/openapi/model-mapping/pom.xml b/src/integration/openapi/model-mapping/pom.xml index 3e9ba8b..b8de12a 100644 --- a/src/integration/openapi/model-mapping/pom.xml +++ b/src/integration/openapi/model-mapping/pom.xml @@ -13,6 +13,9 @@ ${revision} gs-acl-api-model-mapper + + 11 + org.geoserver.acl.openapi.spring5 diff --git a/src/integration/openapi/model-mapping/src/main/java/org/geoserver/acl/api/mapper/AuthorizationModelApiMapper.java b/src/integration/openapi/model-mapping/src/main/java/org/geoserver/acl/api/mapper/AuthorizationModelApiMapper.java index eac4bc4..41b770d 100644 --- a/src/integration/openapi/model-mapping/src/main/java/org/geoserver/acl/api/mapper/AuthorizationModelApiMapper.java +++ b/src/integration/openapi/model-mapping/src/main/java/org/geoserver/acl/api/mapper/AuthorizationModelApiMapper.java @@ -17,6 +17,7 @@ import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; @Mapper( componentModel = "spring", @@ -54,7 +55,7 @@ default AccessSummary toModel(org.geoserver.acl.api.model.AccessSummary apiRespo List workspaces = Optional.ofNullable(apiResponse.getWorkspaces()).orElse(List.of()).stream() .map(this::workspaceAccessSummary) - .toList(); + .collect(Collectors.toList()); return AccessSummary.of(workspaces); } diff --git a/src/integration/spring-boot/pom.xml b/src/integration/spring-boot/pom.xml index 3974c43..27c4864 100644 --- a/src/integration/spring-boot/pom.xml +++ b/src/integration/spring-boot/pom.xml @@ -18,4 +18,7 @@ simplejndi spring-cloud-bus + + 11 + diff --git a/src/integration/spring/cache/pom.xml b/src/integration/spring/cache/pom.xml index a84fea0..6394848 100644 --- a/src/integration/spring/cache/pom.xml +++ b/src/integration/spring/cache/pom.xml @@ -13,6 +13,9 @@ ${revision} gs-acl-cache + + 11 + org.geoserver.acl diff --git a/src/integration/spring/cache/src/main/java/org/geoserver/acl/authorization/cache/CachingAuthorizationServiceConfiguration.java b/src/integration/spring/cache/src/main/java/org/geoserver/acl/authorization/cache/CachingAuthorizationServiceConfiguration.java index a9a746c..90a3045 100644 --- a/src/integration/spring/cache/src/main/java/org/geoserver/acl/authorization/cache/CachingAuthorizationServiceConfiguration.java +++ b/src/integration/spring/cache/src/main/java/org/geoserver/acl/authorization/cache/CachingAuthorizationServiceConfiguration.java @@ -61,7 +61,8 @@ ConcurrentMap aclViewablesCache( @SuppressWarnings("unchecked") private ConcurrentMap getCache(CacheManager cacheManager, String cacheName) { - if (cacheManager instanceof CaffeineCacheManager ccf) { + if (cacheManager instanceof CaffeineCacheManager) { + CaffeineCacheManager ccf = (CaffeineCacheManager) cacheManager; org.springframework.cache.Cache cache = ccf.getCache(cacheName); if (cache != null) { Cache caffeineCache = (Cache) cache.getNativeCache(); diff --git a/src/integration/spring/cache/src/test/java/org/geoserver/acl/authorization/cache/CachingAuthorizationServiceTest.java b/src/integration/spring/cache/src/test/java/org/geoserver/acl/authorization/cache/CachingAuthorizationServiceTest.java index 2fb8550..5b4f3d8 100644 --- a/src/integration/spring/cache/src/test/java/org/geoserver/acl/authorization/cache/CachingAuthorizationServiceTest.java +++ b/src/integration/spring/cache/src/test/java/org/geoserver/acl/authorization/cache/CachingAuthorizationServiceTest.java @@ -5,7 +5,8 @@ package org.geoserver.acl.authorization.cache; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -28,6 +29,7 @@ import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import java.util.stream.Collectors; import java.util.stream.Stream; class CachingAuthorizationServiceTest { @@ -185,7 +187,7 @@ private void grantAll( } private AccessInfo grant(AccessRequest req, Rule... matching) { - List ids = Stream.of(matching).map(Rule::getId).toList(); + List ids = Stream.of(matching).map(Rule::getId).collect(Collectors.toList()); AccessInfo grant = AccessInfo.ALLOW_ALL.withMatchingRules(ids); this.dataAccessCache.put(req, grant); return grant; diff --git a/src/integration/spring/domain/pom.xml b/src/integration/spring/domain/pom.xml index 59ef110..ddb63a8 100644 --- a/src/integration/spring/domain/pom.xml +++ b/src/integration/spring/domain/pom.xml @@ -13,6 +13,9 @@ ${revision} gs-acl-domain-spring-integration + + 11 + org.geoserver.acl.domain diff --git a/src/openapi/spring5/pom.xml b/src/openapi/spring5/pom.xml index 9be88ca..af34597 100644 --- a/src/openapi/spring5/pom.xml +++ b/src/openapi/spring5/pom.xml @@ -21,6 +21,7 @@ java-client + 11 1.3.5 diff --git a/src/plugin/accessmanager/src/main/java/org/geoserver/acl/plugin/accessmanager/ACLDispatcherCallback.java b/src/plugin/accessmanager/src/main/java/org/geoserver/acl/plugin/accessmanager/ACLDispatcherCallback.java index 5939ba9..ae1fa03 100644 --- a/src/plugin/accessmanager/src/main/java/org/geoserver/acl/plugin/accessmanager/ACLDispatcherCallback.java +++ b/src/plugin/accessmanager/src/main/java/org/geoserver/acl/plugin/accessmanager/ACLDispatcherCallback.java @@ -42,6 +42,7 @@ import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.stream.Collectors; /** * {@link ResourceAccessManager} to make GeoServer use the ACL service to assess data access rules @@ -302,7 +303,9 @@ private void addGroupStyles( else groupStyles = groupInfo.styles(); requestedStyles.addAll( - groupStyles.stream().map(s -> s != null ? s.prefixedName() : null).toList()); + groupStyles.stream() + .map(s -> s != null ? s.prefixedName() : null) + .collect(Collectors.toList())); } private List parseLayersParameter(Request gsRequest, GetMapRequest getMap) { diff --git a/src/plugin/accessmanager/src/main/java/org/geoserver/acl/plugin/accessmanager/ACLResourceAccessManager.java b/src/plugin/accessmanager/src/main/java/org/geoserver/acl/plugin/accessmanager/ACLResourceAccessManager.java index 02764c8..7561740 100644 --- a/src/plugin/accessmanager/src/main/java/org/geoserver/acl/plugin/accessmanager/ACLResourceAccessManager.java +++ b/src/plugin/accessmanager/src/main/java/org/geoserver/acl/plugin/accessmanager/ACLResourceAccessManager.java @@ -348,10 +348,12 @@ private AccessLimits getAccessLimits( AccessLimits limits; if (info instanceof LayerGroupInfo) { limits = buildLayerGroupAccessLimits(accessInfo); - } else if (info instanceof ResourceInfo ri) { - limits = buildResourceAccessLimits(ri, accessInfo, processingResult); - } else if (info instanceof LayerInfo li) { - limits = buildResourceAccessLimits(li.getResource(), accessInfo, processingResult); + } else if (info instanceof ResourceInfo) { + limits = buildResourceAccessLimits((ResourceInfo) info, accessInfo, processingResult); + } else if (info instanceof LayerInfo) { + limits = + buildResourceAccessLimits( + ((LayerInfo) info).getResource(), accessInfo, processingResult); } else { throw new IllegalArgumentException( "Expected LayerInfo|LayerGroupInfo|ResourceInfo, got " + info); @@ -416,8 +418,9 @@ private AccessLimits buildAdminAccessLimits(CatalogInfo info) { AccessLimits accessLimits; if (info instanceof LayerGroupInfo) accessLimits = buildLayerGroupAccessLimits(AccessInfo.ALLOW_ALL); - else if (info instanceof ResourceInfo ri) - accessLimits = buildResourceAccessLimits(ri, AccessInfo.ALLOW_ALL, null); + else if (info instanceof ResourceInfo) + accessLimits = + buildResourceAccessLimits((ResourceInfo) info, AccessInfo.ALLOW_ALL, null); else accessLimits = buildResourceAccessLimits( @@ -435,9 +438,10 @@ private String getUserNameFromAuth(Authentication authentication) { private Collection getGroupSummary(Object resource) { Collection summaries; - if (resource instanceof ResourceInfo ri) summaries = groupsCache.getContainerGroupsFor(ri); - else if (resource instanceof LayerInfo li) - summaries = groupsCache.getContainerGroupsFor(li.getResource()); + if (resource instanceof ResourceInfo) + summaries = groupsCache.getContainerGroupsFor((ResourceInfo) resource); + else if (resource instanceof LayerInfo) + summaries = groupsCache.getContainerGroupsFor(((LayerInfo) resource).getResource()); else summaries = groupsCache.getContainerGroupsFor((LayerGroupInfo) resource); return summaries == null ? List.of() : summaries; } diff --git a/src/plugin/accessmanager/src/main/java/org/geoserver/acl/plugin/accessmanager/AccessManagerConfig.java b/src/plugin/accessmanager/src/main/java/org/geoserver/acl/plugin/accessmanager/AccessManagerConfig.java index 7e47ff6..1224f8d 100644 --- a/src/plugin/accessmanager/src/main/java/org/geoserver/acl/plugin/accessmanager/AccessManagerConfig.java +++ b/src/plugin/accessmanager/src/main/java/org/geoserver/acl/plugin/accessmanager/AccessManagerConfig.java @@ -15,6 +15,7 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * Configuration object for {@link ACLResourceAccessManager}. @@ -128,7 +129,10 @@ public void setAcceptedRoles(List acceptedRoles) { if (acceptedRoles == null || acceptedRoles.isEmpty()) { this.roles = new ArrayList<>(List.of("*")); } else { - this.roles = acceptedRoles.stream().filter(StringUtils::hasText).toList(); + this.roles = + acceptedRoles.stream() + .filter(StringUtils::hasText) + .collect(Collectors.toList()); } } diff --git a/src/plugin/accessmanager/src/test/java/org/geoserver/acl/plugin/accessmanager/AclBaseTest.java b/src/plugin/accessmanager/src/test/java/org/geoserver/acl/plugin/accessmanager/AclBaseTest.java index aec9148..a5456e1 100644 --- a/src/plugin/accessmanager/src/test/java/org/geoserver/acl/plugin/accessmanager/AclBaseTest.java +++ b/src/plugin/accessmanager/src/test/java/org/geoserver/acl/plugin/accessmanager/AclBaseTest.java @@ -31,6 +31,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * Creates the following rules, which the test cases expect as precondition: @@ -152,7 +153,7 @@ protected void onTearDown(SystemTestData testData) throws Exception { * */ private void createDefaultRules(RuleAdminService ruleAdminService) { - List rules = ruleAdminService.getAll().toList(); + List rules = ruleAdminService.getAll().collect(Collectors.toList()); rules.stream().map(Rule::getId).forEach(ruleAdminService::delete); ruleAdminService.insert(Rule.allow().withUsername("admin")); ruleAdminService.insert(Rule.allow().withService("WMS")); diff --git a/src/plugin/accessmanager/src/test/java/org/geoserver/acl/plugin/it/support/AclIntegrationTestSupport.java b/src/plugin/accessmanager/src/test/java/org/geoserver/acl/plugin/it/support/AclIntegrationTestSupport.java index 8714948..5f17a7f 100644 --- a/src/plugin/accessmanager/src/test/java/org/geoserver/acl/plugin/it/support/AclIntegrationTestSupport.java +++ b/src/plugin/accessmanager/src/test/java/org/geoserver/acl/plugin/it/support/AclIntegrationTestSupport.java @@ -72,7 +72,6 @@ public void setDispatcherRequest(String service, String request) { public @Override void before() { createdLayerGroups = new ArrayList<>(); - @SuppressWarnings("PMD.CloseResource") GeoServerTestApplicationContext context = appContext.get(); ruleService = context.getBean(RuleAdminService.class); adminRuleService = context.getBean(AdminRuleAdminService.class); diff --git a/src/plugin/pom.xml b/src/plugin/pom.xml index c750ed8..12dca44 100644 --- a/src/plugin/pom.xml +++ b/src/plugin/pom.xml @@ -18,6 +18,9 @@ config plugin + + 11 + diff --git a/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/accessrules/model/DataAccessRuleEditModel.java b/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/accessrules/model/DataAccessRuleEditModel.java index 464ea21..5919f27 100644 --- a/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/accessrules/model/DataAccessRuleEditModel.java +++ b/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/accessrules/model/DataAccessRuleEditModel.java @@ -32,6 +32,7 @@ import java.util.Objects; import java.util.Optional; import java.util.regex.Pattern; +import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.Nullable; @@ -229,7 +230,7 @@ private void updateLayerAttributes(PublishedInfo info) { } } List mapped = - attributes.stream().map(MutableLayerAttribute::new).toList(); + attributes.stream().map(MutableLayerAttribute::new).collect(Collectors.toList()); ld.getAttributes().clear(); ld.getAttributes().addAll(mapped); } diff --git a/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/accessrules/model/DataAccessRulesDataProvider.java b/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/accessrules/model/DataAccessRulesDataProvider.java index ac7b420..7cc1dc1 100644 --- a/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/accessrules/model/DataAccessRulesDataProvider.java +++ b/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/accessrules/model/DataAccessRulesDataProvider.java @@ -16,6 +16,7 @@ import org.springframework.dao.DuplicateKeyException; import java.util.List; +import java.util.stream.Collectors; /** * @author Niels Charlier - Originally as part of GeoFence's GeoServer extension @@ -66,7 +67,7 @@ protected void delete(MutableRule rule) { @Override protected List doReload() { - return adminService().getAll().map(MutableRule::new).toList(); + return adminService().getAll().map(MutableRule::new).collect(Collectors.toList()); } @Override diff --git a/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/accessrules/model/MutableLayerDetails.java b/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/accessrules/model/MutableLayerDetails.java index 5be2947..dbbeddf 100644 --- a/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/accessrules/model/MutableLayerDetails.java +++ b/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/accessrules/model/MutableLayerDetails.java @@ -51,7 +51,10 @@ public MutableLayerDetails(@NonNull LayerDetails ld) { setCatalogMode(ld.getCatalogMode()); setSpatialFilterType(ld.getSpatialFilterType()); setAllowedStyles(ld.getAllowedStyles()); - setAttributes(ld.getAttributes().stream().map(MutableLayerAttribute::new).toList()); + setAttributes( + ld.getAttributes().stream() + .map(MutableLayerAttribute::new) + .collect(Collectors.toList())); } public void setAllowedStyles(Set styles) { diff --git a/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/adminrules/model/AdminRulesTableDataProvider.java b/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/adminrules/model/AdminRulesTableDataProvider.java index 5998e10..bb8f522 100644 --- a/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/adminrules/model/AdminRulesTableDataProvider.java +++ b/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/adminrules/model/AdminRulesTableDataProvider.java @@ -16,6 +16,7 @@ import org.springframework.dao.DuplicateKeyException; import java.util.List; +import java.util.stream.Collectors; @SuppressWarnings("serial") public class AdminRulesTableDataProvider extends RulesDataProvider { @@ -42,7 +43,7 @@ public List> getProperties() { @Override protected List doReload() { - return adminService().getAll().map(MutableAdminRule::new).toList(); + return adminService().getAll().map(MutableAdminRule::new).collect(Collectors.toList()); } protected @Override void delete(MutableAdminRule rule) { diff --git a/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/components/AbstractRulesModel.java b/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/components/AbstractRulesModel.java index 811faf0..cadc288 100644 --- a/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/components/AbstractRulesModel.java +++ b/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/components/AbstractRulesModel.java @@ -38,6 +38,7 @@ import java.util.SortedSet; import java.util.TreeSet; import java.util.regex.Pattern; +import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.Nullable; @@ -63,7 +64,7 @@ public List findServiceNames() { .sorted() .distinct() .filter(service -> !"GWC".equalsIgnoreCase(service)) - .toList(); + .collect(Collectors.toList()); } /** @@ -85,7 +86,7 @@ public List findOperationNames(String serviceName) { .orElseGet(Stream::empty)) .sorted() .distinct() - .toList(); + .collect(Collectors.toList()); } public Iterator getSubfieldChoices(@Nullable String input) { @@ -148,7 +149,7 @@ public Iterator getLayerChoices(@Nullable String input) { .filter(PublishedInfo::isAdvertised) .filter(PublishedInfo::isEnabled) .limit(MAX_SUGGESTIONS) - .toList() + .collect(Collectors.toList()) .stream(); } } else { diff --git a/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/components/RulesDataProvider.java b/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/components/RulesDataProvider.java index 0cc7057..e9bca8e 100644 --- a/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/components/RulesDataProvider.java +++ b/src/plugin/web/src/main/java/org/geoserver/acl/plugin/web/components/RulesDataProvider.java @@ -19,6 +19,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; @SuppressWarnings("serial") public abstract class RulesDataProvider extends GeoServerDataProvider { @@ -29,7 +30,7 @@ public abstract class RulesDataProvider extends GeoServerDataProvider { private @Setter SerializablePredicate filter; - public RulesDataProvider(Class modelClass) { + protected RulesDataProvider(Class modelClass) { this.modelClass = modelClass; setSort("priority", SortOrder.ASCENDING); } @@ -54,7 +55,7 @@ public List getItems() { if (_rules.isEmpty()) reload(); SerializablePredicate predicate = filter; if (predicate == null) return _rules; - return _rules.stream().filter(predicate).toList(); + return _rules.stream().filter(predicate).collect(Collectors.toList()); } private final void reload() { @@ -64,7 +65,6 @@ private final void reload() { } public void remove(Collection selected) { - // rules.removeAll(selected); if (selected.isEmpty()) return; for (R rule : selected) { delete(rule); diff --git a/src/plugin/web/src/test/java/org/geoserver/acl/plugin/web/components/RulesTablePanelTest.java b/src/plugin/web/src/test/java/org/geoserver/acl/plugin/web/components/RulesTablePanelTest.java index 8cef8aa..bef476c 100644 --- a/src/plugin/web/src/test/java/org/geoserver/acl/plugin/web/components/RulesTablePanelTest.java +++ b/src/plugin/web/src/test/java/org/geoserver/acl/plugin/web/components/RulesTablePanelTest.java @@ -21,6 +21,7 @@ import org.junit.Test; import java.util.List; +import java.util.stream.Collectors; import java.util.stream.IntStream; @SuppressWarnings("unused") @@ -30,7 +31,7 @@ List createTestRules(final int count) { AdminRuleAdminService adminService = adminService(); assertEquals(0, adminService.count()); IntStream.rangeClosed(1, count).mapToObj(this::testRule).forEach(adminService::insert); - return adminService.getAll().toList(); + return adminService.getAll().collect(Collectors.toList()); } private AdminRule testRule(int i) { @@ -85,7 +86,8 @@ public void testRows() { @Test public void testUpDown() { List rules = createTestRules(3); - List mutableRules = rules.stream().map(MutableAdminRule::new).toList(); + List mutableRules = + rules.stream().map(MutableAdminRule::new).collect(Collectors.toList()); AdminRulesTableDataProvider data = spy(new AdminRulesTableDataProvider());