From 791b87b27bd037c0b0b6fc6cafba577a1bde0801 Mon Sep 17 00:00:00 2001 From: Avgustin Marinov Date: Sat, 3 Feb 2024 00:43:10 +0200 Subject: [PATCH] Reduce dependency on Guava 2 (#1590) Signed-off-by: Marinov Avgustin --- .../ArtifactFilesystemRepository.java | 8 ++------ .../scheduling/ExecutorAutoConfiguration.java | 20 +++++++++++++++---- hawkbit-dmf/hawkbit-dmf-amqp/pom.xml | 7 +++++-- .../amqp/AmqpMessageDispatcherService.java | 5 +++-- .../hawkbit-repository-jpa/pom.xml | 4 ++++ .../management/JpaControllerManagement.java | 5 ++--- .../management/JpaDeploymentManagement.java | 8 ++++---- .../jpa/management/JpaTargetManagement.java | 6 ++---- .../OfflineDsAssignmentStrategy.java | 4 ++-- .../OnlineDsAssignmentStrategy.java | 4 ++-- .../repository/jpa/model/JpaActionStatus.java | 17 ++++++++++++++-- .../jpa/rsql/RsqlParserValidationOracle.java | 19 ++++-------------- .../TargetManagementSearchTest.java | 1 - .../repository/test/TestConfiguration.java | 15 +++++++++++--- .../test/matcher/EventVerifier.java | 17 ++++++++-------- 15 files changed, 81 insertions(+), 59 deletions(-) diff --git a/hawkbit-artifact-repository-filesystem/src/main/java/org/eclipse/hawkbit/artifact/repository/ArtifactFilesystemRepository.java b/hawkbit-artifact-repository-filesystem/src/main/java/org/eclipse/hawkbit/artifact/repository/ArtifactFilesystemRepository.java index 866787ecf..f728de7c2 100644 --- a/hawkbit-artifact-repository-filesystem/src/main/java/org/eclipse/hawkbit/artifact/repository/ArtifactFilesystemRepository.java +++ b/hawkbit-artifact-repository-filesystem/src/main/java/org/eclipse/hawkbit/artifact/repository/ArtifactFilesystemRepository.java @@ -14,15 +14,12 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.List; import org.apache.commons.io.FileUtils; import org.eclipse.hawkbit.artifact.repository.model.AbstractDbArtifact; import org.eclipse.hawkbit.artifact.repository.model.DbArtifactHash; import org.springframework.validation.annotation.Validated; -import com.google.common.base.Splitter; - /** * Implementation of the {@link ArtifactRepository} to store artifacts on the * file-system. The files are stored by their SHA1 hash of the artifact binary. @@ -94,9 +91,8 @@ public class ArtifactFilesystemRepository extends AbstractArtifactRepository { private Path getSha1DirectoryPath(final String tenant, final String sha1) { final int length = sha1.length(); - final List folders = Splitter.fixedLength(2).splitToList(sha1.substring(length - 4, length)); - final String folder1 = folders.get(0); - final String folder2 = folders.get(1); + final String folder1 = sha1.substring(length - 4, length - 2); + final String folder2 = sha1.substring(length - 2, length); return Paths.get(artifactResourceProperties.getPath(), sanitizeTenant(tenant), folder1, folder2); } diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java index 3109a2888..7d0638495 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java @@ -9,15 +9,19 @@ */ package org.eclipse.hawkbit.autoconfigure.scheduling; +import java.util.Locale; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; +import java.util.function.Function; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,7 +38,7 @@ import org.springframework.security.concurrent.DelegatingSecurityContextExecutor import org.springframework.security.concurrent.DelegatingSecurityContextExecutorService; import org.springframework.security.concurrent.DelegatingSecurityContextScheduledExecutorService; -import com.google.common.util.concurrent.ThreadFactoryBuilder; +import static java.util.Objects.requireNonNull; /** * Central event processors inside update server. @@ -78,7 +82,7 @@ public class ExecutorAutoConfiguration { return new ThreadPoolExecutor(asyncConfigurerProperties.getCorethreads(), asyncConfigurerProperties.getMaxthreads(), asyncConfigurerProperties.getIdletimeout(), TimeUnit.MILLISECONDS, blockingQueue, - new ThreadFactoryBuilder().setNameFormat("central-executor-pool-%d").build(), + threadFactory("central-executor-pool-%d"), new PoolSizeExceededPolicy()); } @@ -100,7 +104,7 @@ public class ExecutorAutoConfiguration { public Executor uiExecutor() { final BlockingQueue blockingQueue = new ArrayBlockingQueue<>(20); final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 20, 10000, TimeUnit.MILLISECONDS, - blockingQueue, new ThreadFactoryBuilder().setNameFormat("ui-executor-pool-%d").build()); + blockingQueue, threadFactory("ui-executor-pool-%d")); threadPoolExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); return new DelegatingSecurityContextExecutor(threadPoolExecutor); } @@ -114,7 +118,7 @@ public class ExecutorAutoConfiguration { public ScheduledExecutorService scheduledExecutorService() { return new DelegatingSecurityContextScheduledExecutorService( Executors.newScheduledThreadPool(asyncConfigurerProperties.getSchedulerThreads(), - new ThreadFactoryBuilder().setNameFormat("central-scheduled-executor-pool-%d").build())); + threadFactory("central-scheduled-executor-pool-%d"))); } /** @@ -126,4 +130,12 @@ public class ExecutorAutoConfiguration { return new ConcurrentTaskScheduler(scheduledExecutorService()); } + private static ThreadFactory threadFactory(final String format) { + final AtomicLong count = new AtomicLong(0); + return (runnable) -> { + final Thread thread = Executors.defaultThreadFactory().newThread(runnable); + thread.setName(String.format(Locale.ROOT, format, count.getAndIncrement())); + return thread; + }; + } } diff --git a/hawkbit-dmf/hawkbit-dmf-amqp/pom.xml b/hawkbit-dmf/hawkbit-dmf-amqp/pom.xml index 97f8a8ed3..79db813ae 100644 --- a/hawkbit-dmf/hawkbit-dmf-amqp/pom.xml +++ b/hawkbit-dmf/hawkbit-dmf-amqp/pom.xml @@ -69,7 +69,11 @@ org.springframework.boot spring-boot-starter-logging - + + + org.apache.commons + commons-collections4 + @@ -90,5 +94,4 @@ test - \ No newline at end of file diff --git a/hawkbit-dmf/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java b/hawkbit-dmf/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java index b92ad2f39..af5eb89eb 100644 --- a/hawkbit-dmf/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java +++ b/hawkbit-dmf/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java @@ -25,7 +25,8 @@ import java.util.function.Supplier; import java.util.stream.Collectors; import java.util.stream.StreamSupport; -import com.google.common.collect.Iterables; +import org.apache.commons.collections4.IterableUtils; +import org.apache.commons.collections4.ListUtils; import org.eclipse.hawkbit.api.ApiType; import org.eclipse.hawkbit.api.ArtifactUrl; import org.eclipse.hawkbit.api.ArtifactUrlHandler; @@ -368,7 +369,7 @@ public class AmqpMessageDispatcherService extends BaseAmqpService { // Ensure not exceeding the max value of MAX_PROCESSING_SIZE if (controllerIds.size() > MAX_PROCESSING_SIZE) { // Split the provided collection - final Iterable> partitions = Iterables.partition(controllerIds, MAX_PROCESSING_SIZE); + final Iterable> partitions = ListUtils.partition(IterableUtils.toList(controllerIds), MAX_PROCESSING_SIZE); // Preserve the security context because it gets lost when executing // loading calls in new threads final SecurityContext context = SecurityContextHolder.getContext(); diff --git a/hawkbit-repository/hawkbit-repository-jpa/pom.xml b/hawkbit-repository/hawkbit-repository-jpa/pom.xml index 384317e05..3b900e3f2 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/pom.xml +++ b/hawkbit-repository/hawkbit-repository-jpa/pom.xml @@ -81,6 +81,10 @@ org.hibernate.validator hibernate-validator + + org.apache.commons + commons-collections4 + diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaControllerManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaControllerManagement.java index b21a5a22a..0fd1b50d6 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaControllerManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaControllerManagement.java @@ -33,15 +33,14 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -import com.google.common.collect.Lists; import jakarta.persistence.EntityManager; import jakarta.persistence.Query; import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.CriteriaQuery; import jakarta.persistence.criteria.Root; import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; +import org.apache.commons.collections4.ListUtils; import org.eclipse.hawkbit.repository.ConfirmationManagement; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.EntityFactory; @@ -473,7 +472,7 @@ public class JpaControllerManagement extends JpaActionManagement implements Cont private Void updateLastTargetQueries(final String tenant, final List polls) { LOG.debug("Persist {} targetqueries.", polls.size()); - final List> pollChunks = Lists.partition( + final List> pollChunks = ListUtils.partition( polls.stream().map(TargetPoll::getControllerId).collect(Collectors.toList()), Constants.MAX_ENTRIES_IN_STATEMENT); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDeploymentManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDeploymentManagement.java index 690637173..473f9894a 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDeploymentManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDeploymentManagement.java @@ -28,7 +28,6 @@ import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.IntStream; -import com.google.common.collect.Lists; import jakarta.persistence.EntityManager; import jakarta.persistence.Query; import jakarta.persistence.criteria.CriteriaBuilder; @@ -37,6 +36,7 @@ import jakarta.persistence.criteria.JoinType; import jakarta.persistence.criteria.ListJoin; import jakarta.persistence.criteria.Root; +import org.apache.commons.collections4.ListUtils; import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; @@ -281,7 +281,7 @@ public class JpaDeploymentManagement extends JpaActionManagement implements Depl private void checkCompatibilityForSingleDsAssignment(final Long distSetId, final List controllerIds) { final DistributionSetType distSetType = distributionSetManagement.getValidAndComplete(distSetId).getType(); - final Set incompatibleTargetTypes = Lists.partition(controllerIds, Constants.MAX_ENTRIES_IN_STATEMENT) + final Set incompatibleTargetTypes = ListUtils.partition(controllerIds, Constants.MAX_ENTRIES_IN_STATEMENT) .stream() .map(ids -> targetRepository.findAll(TargetSpecifications.hasControllerIdIn(ids) .and(TargetSpecifications.notCompatibleWithDistributionSetType(distSetType.getId())))) @@ -377,7 +377,7 @@ public class JpaDeploymentManagement extends JpaActionManagement implements Depl final List providedTargetIds = targetsWithActionType.stream().map(TargetWithActionType::getControllerId) .distinct().toList(); - final List existingTargetIds = Lists.partition(providedTargetIds, Constants.MAX_ENTRIES_IN_STATEMENT) + final List existingTargetIds = ListUtils.partition(providedTargetIds, Constants.MAX_ENTRIES_IN_STATEMENT) .stream() .map(ids -> targetRepository.findAll(AccessController.Operation.UPDATE, TargetSpecifications.hasControllerIdIn(ids))) @@ -442,7 +442,7 @@ public class JpaDeploymentManagement extends JpaActionManagement implements Depl * statements */ private static List> getTargetEntitiesAsChunks(final List targetEntities) { - return Lists.partition(targetEntities.stream().map(Target::getId).collect(Collectors.toList()), + return ListUtils.partition(targetEntities.stream().map(Target::getId).collect(Collectors.toList()), Constants.MAX_ENTRIES_IN_STATEMENT); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetManagement.java index 1a0f7e4b6..1a1c970b0 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetManagement.java @@ -21,7 +21,6 @@ import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; -import com.google.common.collect.Lists; import jakarta.persistence.EntityManager; import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.CriteriaQuery; @@ -29,6 +28,7 @@ import jakarta.persistence.criteria.MapJoin; import jakarta.persistence.criteria.Root; import jakarta.validation.constraints.NotEmpty; +import org.apache.commons.collections4.ListUtils; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.FilterParams; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; @@ -40,7 +40,6 @@ import org.eclipse.hawkbit.repository.TimestampCalculator; import org.eclipse.hawkbit.repository.builder.TargetCreate; import org.eclipse.hawkbit.repository.builder.TargetUpdate; import org.eclipse.hawkbit.repository.event.remote.TargetAttributesRequestedEvent; -import org.eclipse.hawkbit.repository.event.remote.TargetDeletedEvent; import org.eclipse.hawkbit.repository.event.remote.entity.TargetUpdatedEvent; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; @@ -49,7 +48,6 @@ import org.eclipse.hawkbit.repository.jpa.acm.AccessController; import org.eclipse.hawkbit.repository.jpa.builder.JpaTargetCreate; import org.eclipse.hawkbit.repository.jpa.builder.JpaTargetUpdate; import org.eclipse.hawkbit.repository.jpa.configuration.Constants; -import org.eclipse.hawkbit.repository.jpa.executor.AfterTransactionCommitExecutor; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetMetadata; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetMetadata_; @@ -553,7 +551,7 @@ public class JpaTargetManagement implements TargetManagement { private List findTargetsByInSpecification(final Collection controllerIds, final Specification specification) { - return Lists.partition(new ArrayList<>(controllerIds), Constants.MAX_ENTRIES_IN_STATEMENT).stream() + return ListUtils.partition(new ArrayList<>(controllerIds), Constants.MAX_ENTRIES_IN_STATEMENT).stream() .map(ids -> targetRepository.findAll(TargetSpecifications.hasControllerIdIn(ids).and(specification))) .flatMap(List::stream).toList(); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/OfflineDsAssignmentStrategy.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/OfflineDsAssignmentStrategy.java index 8bec8443e..b4c6e2faa 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/OfflineDsAssignmentStrategy.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/OfflineDsAssignmentStrategy.java @@ -17,7 +17,7 @@ import java.util.function.BooleanSupplier; import java.util.function.Function; import java.util.stream.Collectors; -import com.google.common.collect.Lists; +import org.apache.commons.collections4.ListUtils; import org.eclipse.hawkbit.repository.QuotaManagement; import org.eclipse.hawkbit.repository.RepositoryConstants; import org.eclipse.hawkbit.repository.RepositoryProperties; @@ -75,7 +75,7 @@ public class OfflineDsAssignmentStrategy extends AbstractDsAssignmentStrategy { Arrays.asList(TargetSpecifications.hasControllerIdAndAssignedDistributionSetIdNot(ids, setId), TargetSpecifications.notEqualToTargetUpdateStatus(TargetUpdateStatus.PENDING)))); } - return Lists.partition(controllerIDs, Constants.MAX_ENTRIES_IN_STATEMENT).stream().map(mapper) + return ListUtils.partition(controllerIDs, Constants.MAX_ENTRIES_IN_STATEMENT).stream().map(mapper) .flatMap(List::stream).collect(Collectors.toList()); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/OnlineDsAssignmentStrategy.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/OnlineDsAssignmentStrategy.java index d9cd5c987..e7da2956c 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/OnlineDsAssignmentStrategy.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/OnlineDsAssignmentStrategy.java @@ -18,7 +18,7 @@ import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; -import com.google.common.collect.Lists; +import org.apache.commons.collections4.ListUtils; import org.eclipse.hawkbit.repository.QuotaManagement; import org.eclipse.hawkbit.repository.RepositoryProperties; import org.eclipse.hawkbit.repository.event.remote.MultiActionAssignEvent; @@ -109,7 +109,7 @@ public class OnlineDsAssignmentStrategy extends AbstractDsAssignmentStrategy { mapper = ids -> targetRepository .findAll(TargetSpecifications.hasControllerIdAndAssignedDistributionSetIdNot(ids, setId)); } - return Lists.partition(controllerIDs, Constants.MAX_ENTRIES_IN_STATEMENT).stream().map(mapper) + return ListUtils.partition(controllerIDs, Constants.MAX_ENTRIES_IN_STATEMENT).stream().map(mapper) .flatMap(List::stream).collect(Collectors.toList()); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java index e3056b336..42fa2a10c 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java @@ -14,7 +14,7 @@ import java.util.Collections; import java.util.List; import java.util.Optional; -import com.google.common.base.Splitter; + import jakarta.persistence.CollectionTable; import jakarta.persistence.Column; import jakarta.persistence.ConstraintMode; @@ -159,7 +159,20 @@ public class JpaActionStatus extends AbstractJpaTenantAwareBaseEntity implements if (messages == null) { messages = new ArrayList<>((message.length() / MESSAGE_ENTRY_LENGTH) + 1); } - Splitter.fixedLength(MESSAGE_ENTRY_LENGTH).split(message).forEach(messages::add); + if (message.length() > MESSAGE_ENTRY_LENGTH) { + // split + for (int off = 0; off < message.length();) { + final int end = off + MESSAGE_ENTRY_LENGTH; + if (end < message.length()) { + messages.add(message.substring(off, end)); + } else { + messages.add(message.substring(off)); + } + off = end; + } + } else { + messages.add(message); + } } } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlParserValidationOracle.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlParserValidationOracle.java index 2b35a70a9..0548c6aab 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlParserValidationOracle.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlParserValidationOracle.java @@ -13,6 +13,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; @@ -36,9 +37,6 @@ import org.slf4j.LoggerFactory; import org.springframework.orm.jpa.JpaSystemException; import org.springframework.util.CollectionUtils; -import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.Multimap; - import cz.jirutka.rsql.parser.ParseException; import cz.jirutka.rsql.parser.RSQLParserException; @@ -254,22 +252,14 @@ public class RsqlParserValidationOracle implements RsqlValidationOracle { // sensitive help on search query. private static final class TokenDescription { - private static final Multimap TOKEN_MAP = ArrayListMultimap.create(); + private static final Map> TOKEN_MAP = new HashMap<>(); private static final int LOGICAL_OP = 8; private static final int COMPARATOR = 12; static { - TOKEN_MAP.put(LOGICAL_OP, "and"); - TOKEN_MAP.put(LOGICAL_OP, "or"); - TOKEN_MAP.put(COMPARATOR, "=="); - TOKEN_MAP.put(COMPARATOR, "!="); - TOKEN_MAP.put(COMPARATOR, "=ge="); - TOKEN_MAP.put(COMPARATOR, "=le="); - TOKEN_MAP.put(COMPARATOR, "=gt="); - TOKEN_MAP.put(COMPARATOR, "=lt="); - TOKEN_MAP.put(COMPARATOR, "=in="); - TOKEN_MAP.put(COMPARATOR, "=out="); + TOKEN_MAP.put(LOGICAL_OP, List.of("and", "or")); + TOKEN_MAP.put(COMPARATOR, List.of("==", "!=", "=ge=", "=le=", "=gt=", "=lt=", "=in=", "=out=")); } private TokenDescription() { @@ -279,7 +269,6 @@ public class RsqlParserValidationOracle implements RsqlValidationOracle { private static Collection getTokenImage(final int tokenIndex) { return TOKEN_MAP.get(tokenIndex); } - } private static final class FieldNameDescription { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementSearchTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementSearchTest.java index b3b702586..3d3e84a3d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementSearchTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementSearchTest.java @@ -38,7 +38,6 @@ import org.springframework.data.domain.Slice; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; -import com.google.common.collect.Lists; import com.google.common.primitives.Ints; import io.qameta.allure.Description; diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/TestConfiguration.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/TestConfiguration.java index f5f736fed..b29f110ff 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/TestConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/TestConfiguration.java @@ -10,9 +10,11 @@ package org.eclipse.hawkbit.repository.test; import java.util.Collections; +import java.util.Locale; import java.util.concurrent.Executor; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.atomic.AtomicLong; import org.eclipse.hawkbit.ContextAware; import org.eclipse.hawkbit.ControllerPollProperties; @@ -69,7 +71,7 @@ import org.springframework.security.concurrent.DelegatingSecurityContextExecutor import org.springframework.security.concurrent.DelegatingSecurityContextScheduledExecutorService; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; -import com.google.common.util.concurrent.ThreadFactoryBuilder; +import static java.util.Objects.requireNonNull; /** * Spring context configuration required for Dev.Environment. @@ -209,8 +211,15 @@ public class TestConfiguration implements AsyncConfigurer { @Bean public ScheduledExecutorService scheduledExecutorService() { - return new DelegatingSecurityContextScheduledExecutorService(Executors.newScheduledThreadPool(1, - new ThreadFactoryBuilder().setNameFormat("central-scheduled-executor-pool-%d").build())); + final AtomicLong count = new AtomicLong(0); + return new DelegatingSecurityContextScheduledExecutorService( + Executors.newScheduledThreadPool(1, (runnable) -> { + final Thread thread = Executors.defaultThreadFactory().newThread(runnable); + thread.setName( + String.format( + Locale.ROOT, "central-scheduled-executor-pool-%d", count.getAndIncrement())); + return thread; + })); } /** diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/matcher/EventVerifier.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/matcher/EventVerifier.java index 6315a0e0d..4b5f7b3cb 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/matcher/EventVerifier.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/matcher/EventVerifier.java @@ -15,16 +15,15 @@ import static org.hamcrest.Matchers.equalTo; import static org.junit.jupiter.api.Assertions.fail; import java.lang.reflect.Method; +import java.util.HashSet; import java.util.Iterator; import java.util.Optional; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import java.util.stream.Stream; -import com.google.common.collect.ConcurrentHashMultiset; -import com.google.common.collect.Multiset; -import com.google.common.collect.Sets; import org.awaitility.Awaitility; import org.awaitility.core.ConditionTimeoutException; import org.eclipse.hawkbit.repository.event.remote.RemoteIdEvent; @@ -137,7 +136,7 @@ public class EventVerifier extends AbstractTestExecutionListener { private static class EventCaptor implements ApplicationListener { - private final Multiset> capturedEvents = ConcurrentHashMultiset.create(); + private final ConcurrentHashMap, Integer> capturedEvents = new ConcurrentHashMap<>(); @Override public void onApplicationEvent(final RemoteApplicationEvent event) { @@ -162,18 +161,18 @@ public class EventVerifier extends AbstractTestExecutionListener { assertThat(((TargetAssignDistributionSetEvent) event).getDistributionSetId()).isNotNull(); } - capturedEvents.add(event.getClass()); + capturedEvents.compute(event.getClass(), (k, v) -> v == null ? 1 : v + 1); } public int getCountFor(final Class expectedEvent) { - return capturedEvents.count(expectedEvent); + return Optional.ofNullable(capturedEvents.get(expectedEvent)).orElse(0); } public Set> diff(final Expect[] allEvents) { - return Sets.difference(capturedEvents.elementSet(), - Stream.of(allEvents).map(Expect::type).collect(Collectors.toSet())); + final Set> keys = new HashSet<>(capturedEvents.keySet()); + keys.removeAll(Stream.of(allEvents).map(Expect::type).collect(Collectors.toSet())); + return keys; } - } private static final class ResetCounterMarkerEvent extends RemoteApplicationEvent {