From b4848f987588e6fad5ea533c150a19176ef1fd68 Mon Sep 17 00:00:00 2001 From: Avgustin Marinov Date: Fri, 15 Nov 2024 16:25:14 +0200 Subject: [PATCH] Extract map attribute converter (#2036) Signed-off-by: Avgustin Marinov --- .../repository/jpa/model/JpaAction.java | 30 ++------------ .../jpa/utils/MapAttributeConverter.java | 39 +++++++++++++++++++ 2 files changed, 42 insertions(+), 27 deletions(-) create mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/utils/MapAttributeConverter.java diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java index d921f4b5b..1ce09ac49 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java @@ -17,9 +17,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.stream.Collectors; -import jakarta.persistence.AttributeConverter; import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.ConstraintMode; @@ -44,6 +42,7 @@ import jakarta.validation.constraints.NotNull; import org.eclipse.hawkbit.repository.MaintenanceScheduleHelper; import org.eclipse.hawkbit.repository.event.remote.entity.ActionCreatedEvent; import org.eclipse.hawkbit.repository.event.remote.entity.ActionUpdatedEvent; +import org.eclipse.hawkbit.repository.jpa.utils.MapAttributeConverter; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.BaseEntity; @@ -96,7 +95,7 @@ public class JpaAction extends AbstractJpaTenantAwareBaseEntity implements Actio private boolean active; @Converter - public static class ActionTypeConverter extends MapTypeConverter { + public static class ActionTypeConverter extends MapAttributeConverter { public ActionTypeConverter() { super(Map.of( @@ -121,7 +120,7 @@ public class JpaAction extends AbstractJpaTenantAwareBaseEntity implements Actio private Integer weight; @Converter - public static class StatusConverter extends MapTypeConverter { + public static class StatusConverter extends MapAttributeConverter { public StatusConverter() { super(new HashMap<>() {{ @@ -425,27 +424,4 @@ public class JpaAction extends AbstractJpaTenantAwareBaseEntity implements Actio .map(start -> start.plus(MaintenanceScheduleHelper.convertToISODuration(maintenanceWindowDuration))); } - private static class MapTypeConverter implements AttributeConverter { - - private final Map javaToDbMap; - private final Map dbToJavaMap; - - protected MapTypeConverter(final Map javaToDbMap) { - this.javaToDbMap = javaToDbMap; - this.dbToJavaMap = javaToDbMap.entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); - if (javaToDbMap.size() != dbToJavaMap.size()) { - throw new IllegalArgumentException("Duplicate values in javaToDbMap"); - } - } - - @Override - public DB_TYPE convertToDatabaseColumn(final JAVA_TYPE attribute) { - return javaToDbMap.get(attribute); - } - - @Override - public JAVA_TYPE convertToEntityAttribute(final DB_TYPE dbData) { - return dbToJavaMap.get(dbData); - } - } } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/utils/MapAttributeConverter.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/utils/MapAttributeConverter.java new file mode 100644 index 000000000..68693b85c --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/utils/MapAttributeConverter.java @@ -0,0 +1,39 @@ +/** + * Copyright (c) 2024 Contributors to the Eclipse Foundation + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.eclipse.hawkbit.repository.jpa.utils; + +import java.util.Map; +import java.util.stream.Collectors; + +import jakarta.persistence.AttributeConverter; + +public class MapAttributeConverter, DB_TYPE> implements AttributeConverter { + + private final Map javaToDbMap; + private final Map dbToJavaMap; + + protected MapAttributeConverter(final Map javaToDbMap) { + this.javaToDbMap = javaToDbMap; + this.dbToJavaMap = javaToDbMap.entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); + if (javaToDbMap.size() != dbToJavaMap.size()) { + throw new IllegalArgumentException("Duplicate values in javaToDbMap"); + } + } + + @Override + public DB_TYPE convertToDatabaseColumn(final JAVA_TYPE attribute) { + return javaToDbMap.get(attribute); + } + + @Override + public JAVA_TYPE convertToEntityAttribute(final DB_TYPE dbData) { + return dbToJavaMap.get(dbData); + } +}