JpaTarget switch to javax.persistence.Convert(er) (#2038)

Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
This commit is contained in:
Avgustin Marinov
2024-11-15 18:02:00 +02:00
committed by GitHub
parent bf1e171523
commit ec6009b268
3 changed files with 34 additions and 10 deletions

View File

@@ -23,6 +23,8 @@ import jakarta.persistence.CascadeType;
import jakarta.persistence.CollectionTable;
import jakarta.persistence.Column;
import jakarta.persistence.ConstraintMode;
import jakarta.persistence.Convert;
import jakarta.persistence.Converter;
import jakarta.persistence.ElementCollection;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
@@ -48,6 +50,7 @@ import org.eclipse.hawkbit.repository.event.remote.TargetDeletedEvent;
import org.eclipse.hawkbit.repository.event.remote.entity.TargetCreatedEvent;
import org.eclipse.hawkbit.repository.event.remote.entity.TargetUpdatedEvent;
import org.eclipse.hawkbit.repository.jpa.model.helper.SecurityTokenGeneratorHolder;
import org.eclipse.hawkbit.repository.jpa.utils.MapAttributeConverter;
import org.eclipse.hawkbit.repository.model.Action;
import org.eclipse.hawkbit.repository.model.AutoConfirmationStatus;
import org.eclipse.hawkbit.repository.model.DistributionSet;
@@ -61,9 +64,6 @@ import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder;
import org.eclipse.hawkbit.repository.model.helper.SystemSecurityContextHolder;
import org.eclipse.hawkbit.repository.model.helper.TenantConfigurationManagementHolder;
import org.eclipse.hawkbit.security.SystemSecurityContext;
import org.eclipse.persistence.annotations.ConversionValue;
import org.eclipse.persistence.annotations.Convert;
import org.eclipse.persistence.annotations.ObjectTypeConverter;
/**
* JPA implementation of {@link Target}.
@@ -119,14 +119,21 @@ public class JpaTarget extends AbstractJpaNamedEntity implements Target, EventAw
@Column(name = "install_date")
private Long installationDate;
@Converter
public static class TargetUpdateStatusConverter extends MapAttributeConverter<TargetUpdateStatus, Integer> {
public TargetUpdateStatusConverter() {
super(Map.of(
TargetUpdateStatus.UNKNOWN, 0,
TargetUpdateStatus.IN_SYNC, 1,
TargetUpdateStatus.PENDING, 2,
TargetUpdateStatus.ERROR, 3,
TargetUpdateStatus.REGISTERED, 4
));
}
}
@Column(name = "update_status", nullable = false)
@ObjectTypeConverter(name = "updateStatus", objectType = TargetUpdateStatus.class, dataType = Integer.class, conversionValues = {
@ConversionValue(objectValue = "UNKNOWN", dataValue = "0"),
@ConversionValue(objectValue = "IN_SYNC", dataValue = "1"),
@ConversionValue(objectValue = "PENDING", dataValue = "2"),
@ConversionValue(objectValue = "ERROR", dataValue = "3"),
@ConversionValue(objectValue = "REGISTERED", dataValue = "4") })
@Convert("updateStatus")
@Convert(converter = TargetUpdateStatusConverter.class)
@NotNull
private TargetUpdateStatus updateStatus = TargetUpdateStatus.UNKNOWN;

View File

@@ -53,6 +53,7 @@ class ActionTest extends AbstractJpaIntegrationTest {
}
@Test
@Description("Tests the action type mapping.")
void testActionTypeConvert() {
final long id = createAction().getId();
for (final ActionType actionType : ActionType.values()) {
@@ -66,6 +67,7 @@ class ActionTest extends AbstractJpaIntegrationTest {
}
@Test
@Description("Tests the status mapping.")
void testStatusConvert() {
final long id = createAction().getId();
for (final Status status : Status.values()) {
@@ -79,6 +81,7 @@ class ActionTest extends AbstractJpaIntegrationTest {
}
@Test
@Description("Tests the action status status mapping.")
void testActionsStatusStatusConvert() {
for (final Status status : Status.values()) {
final long id = createAction().getId();

View File

@@ -76,6 +76,7 @@ import org.eclipse.hawkbit.repository.model.TargetMetadata;
import org.eclipse.hawkbit.repository.model.TargetTag;
import org.eclipse.hawkbit.repository.model.TargetType;
import org.eclipse.hawkbit.repository.model.TargetTypeAssignmentResult;
import org.eclipse.hawkbit.repository.model.TargetUpdateStatus;
import org.eclipse.hawkbit.repository.rsql.RsqlConfigHolder;
import org.eclipse.hawkbit.repository.test.matcher.Expect;
import org.eclipse.hawkbit.repository.test.matcher.ExpectEvents;
@@ -1208,6 +1209,19 @@ class TargetManagementTest extends AbstractJpaIntegrationTest {
() -> targetManagement.isTargetMatchingQueryAndDSNotAssignedAndCompatibleAndUpdatable(target, 123, "name==*"));
}
@Test
@Description("Test update status convert")
void testUpdateStatusConvert() {
final long id = testdataFactory.createTarget().getId();
for (final TargetUpdateStatus status : TargetUpdateStatus.values()) {
final JpaTarget target = targetRepository.findById(id).orElseThrow(() -> new IllegalStateException("Target not found"));
target.setUpdateStatus(status);
targetRepository.save(target);
assertThat(targetRepository.findById(target.getId()).orElseThrow(() -> new IllegalStateException("Target not found"))
.getUpdateStatus()).isEqualTo(status);
}
}
@Step
private void createAndUpdateTargetWithInvalidDescription(final Target target) {