diff --git a/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java b/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java index f36b27fe4..e360a2dd0 100644 --- a/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java +++ b/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java @@ -38,6 +38,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RestController; @@ -49,18 +50,15 @@ import org.springframework.web.bind.annotation.RestController; @RestController public class MgmtTargetTagResource implements MgmtTargetTagRestApi { - private final TargetTagManagement tagManagement; + private final TargetTagManagement tagManagement; private final TargetManagement targetManagement; - private final EntityFactory entityFactory; private final TenantConfigHelper tenantConfigHelper; MgmtTargetTagResource( - final TargetTagManagement tagManagement, final TargetManagement targetManagement, - final EntityFactory entityFactory, + final TargetTagManagement tagManagement, final TargetManagement targetManagement, final SystemSecurityContext securityContext, final TenantConfigurationManagement configurationManagement) { this.tagManagement = tagManagement; this.targetManagement = targetManagement; - this.entityFactory = entityFactory; tenantConfigHelper = TenantConfigHelper.usingContext(securityContext, configurationManagement); } @@ -68,7 +66,7 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi { public ResponseEntity> getTargetTags( final String rsqlParam, final int pagingOffsetParam, final int pagingLimitParam, final String sortParam) { final Pageable pageable = PagingUtility.toPageable(pagingOffsetParam, pagingLimitParam, sanitizeTagSortParam(sortParam)); - final Page findTargetsAll; + final Page findTargetsAll; if (rsqlParam == null) { findTargetsAll = this.tagManagement.findAll(pageable); } else { @@ -92,7 +90,7 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi { @Override public ResponseEntity> createTargetTags(final List tags) { log.debug("creating {} target tags", tags.size()); - final List createdTargetTags = tagManagement.create(MgmtTagMapper.mapTagFromRequest(entityFactory, tags)); + final List createdTargetTags = tagManagement.create(MgmtTagMapper.mapTagFromRequest(tags)); return new ResponseEntity<>(MgmtTagMapper.toResponse(createdTargetTags), HttpStatus.CREATED); } @@ -101,8 +99,8 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi { log.debug("update {} target tag", restTargetTagRest); final TargetTag updateTargetTag = tagManagement - .update(entityFactory.tag().update(targetTagId).name(restTargetTagRest.getName()) - .description(restTargetTagRest.getDescription()).colour(restTargetTagRest.getColour())); + .update(TargetTagManagement.Update.builder().id(targetTagId).name(restTargetTagRest.getName()) + .description(restTargetTagRest.getDescription()).colour(restTargetTagRest.getColour()).build()); log.debug("target tag updated"); @@ -118,7 +116,7 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi { log.debug("Delete {} target tag", targetTagId); final TargetTag targetTag = findTargetTagById(targetTagId); - this.tagManagement.delete(targetTag.getName()); + this.tagManagement.delete(targetTag.getId()); return ResponseEntity.ok().build(); } diff --git a/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/mapper/MgmtTagMapper.java b/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/mapper/MgmtTagMapper.java index 5092f9676..5da88d6f2 100644 --- a/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/mapper/MgmtTagMapper.java +++ b/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/mapper/MgmtTagMapper.java @@ -24,7 +24,7 @@ import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTagRestApi; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetTagRestApi; import org.eclipse.hawkbit.repository.EntityFactory; -import org.eclipse.hawkbit.repository.builder.TagCreate; +import org.eclipse.hawkbit.repository.TargetTagManagement; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.TargetTag; @@ -36,7 +36,7 @@ import org.eclipse.hawkbit.rest.json.model.ResponseList; @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class MgmtTagMapper { - public static List toResponse(final List targetTags) { + public static List toResponse(final List targetTags) { final List tagsRest = new ArrayList<>(); if (targetTags == null) { return tagsRest; @@ -106,10 +106,14 @@ public final class MgmtTagMapper { .withRel("assignedDistributionSets").expand()); } - public static List> mapTagFromRequest(final EntityFactory entityFactory, final Collection tags) { + public static List mapTagFromRequest(final Collection tags) { return tags.stream() - .map(tagRest -> entityFactory.tag().create().name(tagRest.getName()) - .description(tagRest.getDescription()).colour(tagRest.getColour())) + .map(tagRest -> TargetTagManagement.Create.builder() + .name(tagRest.getName()) + .description(tagRest.getDescription()) + .colour(tagRest.getColour()) + .build()) + .map(TargetTagManagement.Create.class::cast) .toList(); } diff --git a/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResourceTest.java b/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResourceTest.java index 4b99bd5ab..6f0a09b66 100644 --- a/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResourceTest.java +++ b/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResourceTest.java @@ -21,7 +21,6 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; @@ -29,6 +28,7 @@ import java.util.Random; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.resource.util.ResourceUtility; +import org.eclipse.hawkbit.repository.DistributionSetTagManagement; import org.eclipse.hawkbit.repository.event.remote.DistributionSetTagDeletedEvent; import org.eclipse.hawkbit.repository.event.remote.entity.DistributionSetCreatedEvent; import org.eclipse.hawkbit.repository.event.remote.entity.DistributionSetTagCreatedEvent; @@ -188,14 +188,16 @@ class MgmtDistributionSetTagResourceTest extends AbstractManagementApiIntegratio @Test @ExpectEvents({ @Expect(type = DistributionSetTagCreatedEvent.class, count = 2) }) void createDistributionSetTags() throws Exception { - final Tag tagOne = entityFactory.tag().create().colour("testcol1").description("its a test1").name("thetest1") + final DistributionSetTagManagement.Create tagOne = DistributionSetTagManagement.Create.builder() + .colour("testcol1").description("its a test1").name("thetest1") .build(); - final Tag tagTwo = entityFactory.tag().create().colour("testcol2").description("its a test2").name("thetest2") + final DistributionSetTagManagement.Create tagTwo = DistributionSetTagManagement.Create.builder() + .colour("testcol2").description("its a test2").name("thetest2") .build(); final ResultActions result = mvc .perform(post(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING) - .content(JsonBuilder.tags(Arrays.asList(tagOne, tagTwo))) + .content(JsonBuilder.dsTags(List.of(tagOne, tagTwo))) .contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()) .andExpect(status().isCreated()) @@ -210,8 +212,7 @@ class MgmtDistributionSetTagResourceTest extends AbstractManagementApiIntegratio assertThat(createdTwo.getDescription()).isEqualTo(tagTwo.getDescription()); assertThat(createdTwo.getColour()).isEqualTo(tagTwo.getColour()); - result.andExpect(applyTagMatcherOnArrayResult(createdOne)) - .andExpect(applyTagMatcherOnArrayResult(createdTwo)); + result.andExpect(applyTagMatcherOnArrayResult(createdOne)).andExpect(applyTagMatcherOnArrayResult(createdTwo)); } /** @@ -225,12 +226,13 @@ class MgmtDistributionSetTagResourceTest extends AbstractManagementApiIntegratio final List tags = testdataFactory.createDistributionSetTags(1); final DistributionSetTag original = tags.get(0); - final Tag update = entityFactory.tag().create().name("updatedName").colour("updatedCol") - .description("updatedDesc").build(); + final DistributionSetTagManagement.Update update = DistributionSetTagManagement.Update.builder() + .name("updatedName").colour("updatedCol").description("updatedDesc") + .build(); final ResultActions result = mvc .perform(put(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + "/" + original.getId()) - .content(JsonBuilder.tag(update)).contentType(MediaType.APPLICATION_JSON) + .content(JsonBuilder.dsTag(update)).contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()) diff --git a/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResourceTest.java b/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResourceTest.java index 778d9fe07..04b3b3c77 100644 --- a/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResourceTest.java +++ b/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResourceTest.java @@ -30,6 +30,7 @@ import java.util.Random; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetTagRestApi; import org.eclipse.hawkbit.mgmt.rest.resource.util.ResourceUtility; +import org.eclipse.hawkbit.repository.TargetTagManagement; import org.eclipse.hawkbit.repository.event.remote.TargetTagDeletedEvent; import org.eclipse.hawkbit.repository.event.remote.entity.TargetCreatedEvent; import org.eclipse.hawkbit.repository.event.remote.entity.TargetTagCreatedEvent; @@ -153,14 +154,16 @@ public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationT @Test @ExpectEvents({ @Expect(type = TargetTagCreatedEvent.class, count = 2) }) public void createTargetTags() throws Exception { - final Tag tagOne = entityFactory.tag().create().colour("testcol1").description("its a test1").name("thetest1") + final TargetTagManagement.Create tagOne = TargetTagManagement.Create.builder() + .colour("testcol1").description("its a test1").name("thetest1") .build(); - final Tag tagTwo = entityFactory.tag().create().colour("testcol2").description("its a test2").name("thetest2") + final TargetTagManagement.Create tagTwo = TargetTagManagement.Create.builder() + .colour("testcol2").description("its a test2").name("thetest2") .build(); final ResultActions result = mvc .perform(post(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING) - .content(JsonBuilder.tags(Arrays.asList(tagOne, tagTwo))) + .content(JsonBuilder.targetTags(List.of(tagOne, tagTwo))) .contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()) .andExpect(status().isCreated()) @@ -190,12 +193,13 @@ public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationT final List tags = testdataFactory.createTargetTags(1, ""); final TargetTag original = tags.get(0); - final Tag update = entityFactory.tag().create().name("updatedName").colour("updatedCol") - .description("updatedDesc").build(); + final TargetTagManagement.Update update = TargetTagManagement.Update.builder() + .name("updatedName").colour("updatedCol").description("updatedDesc") + .build(); final ResultActions result = mvc .perform(put(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/" + original.getId()) - .content(JsonBuilder.tag(update)).contentType(MediaType.APPLICATION_JSON) + .content(JsonBuilder.targetTag(update)).contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/EntityFactory.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/EntityFactory.java index 03b651b37..2b9adada3 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/EntityFactory.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/EntityFactory.java @@ -12,16 +12,13 @@ package org.eclipse.hawkbit.repository; import org.eclipse.hawkbit.repository.builder.ActionStatusBuilder; import org.eclipse.hawkbit.repository.builder.RolloutBuilder; import org.eclipse.hawkbit.repository.builder.RolloutGroupBuilder; -import org.eclipse.hawkbit.repository.builder.TagBuilder; import org.eclipse.hawkbit.repository.builder.TargetBuilder; import org.eclipse.hawkbit.repository.builder.TargetFilterQueryBuilder; import org.eclipse.hawkbit.repository.builder.TargetTypeBuilder; import org.eclipse.hawkbit.repository.model.BaseEntity; -import org.eclipse.hawkbit.repository.model.Tag; /** - * central {@link BaseEntity} generation service. Objects are created but not - * persisted. + * Central {@link BaseEntity} generation service. Objects are created but not persisted. */ public interface EntityFactory { @@ -30,11 +27,6 @@ public interface EntityFactory { */ ActionStatusBuilder actionStatus(); - /** - * @return {@link TagBuilder} object - */ - TagBuilder tag(); - /** * @return {@link RolloutGroupBuilder} object */ diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryManagement.java index 2653ce85f..cde60f010 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryManagement.java @@ -83,7 +83,7 @@ public interface RepositoryManagement findAll(@NotNull Pageable pageable); + Page findAll(@NotNull Pageable pageable); /** * Retrieves all {@link BaseEntity}s with a given specification. diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetTagManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetTagManagement.java index 8759b9688..ad988ca54 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetTagManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetTagManagement.java @@ -9,129 +9,67 @@ */ package org.eclipse.hawkbit.repository; -import java.util.Collection; -import java.util.List; import java.util.Optional; -import jakarta.validation.ConstraintViolationException; -import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.ToString; +import lombok.experimental.SuperBuilder; import org.eclipse.hawkbit.im.authentication.SpringEvalExpressions; -import org.eclipse.hawkbit.repository.builder.TagCreate; -import org.eclipse.hawkbit.repository.builder.TagUpdate; -import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; -import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; -import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; +import org.eclipse.hawkbit.repository.model.NamedEntity; import org.eclipse.hawkbit.repository.model.Tag; -import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetTag; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; import org.springframework.security.access.prepost.PreAuthorize; /** * Management service for {@link TargetTag}s. */ -public interface TargetTagManagement { +public interface TargetTagManagement + extends RepositoryManagement { - /** - * Count {@link TargetTag}s. - * - * @return size of {@link TargetTag}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - long count(); + @Override + default String permissionGroup() { + return "TARGET"; + } - /** - * Creates a new {@link TargetTag}. - * - * @param create to be created - * @return the new created {@link TargetTag} - * @throws EntityAlreadyExistsException if given object already exists - * @throws ConstraintViolationException if fields are not filled as specified. Check {@link TagCreate} for field constraints. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET) - TargetTag create(@NotNull @Valid TagCreate create); - - /** - * Created multiple {@link TargetTag}s. - * - * @param creates to be created - * @return the new created {@link TargetTag}s - * @throws EntityAlreadyExistsException if given object has already an ID. - * @throws ConstraintViolationException if fields are not filled as specified. Check {@link TagCreate} for field constraints. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET) - List create(@NotNull @Valid Collection> creates); - - /** - * Deletes {@link TargetTag} with given name. - * - * @param targetTagName tag name of the {@link TargetTag} to be deleted - * @throws EntityNotFoundException if tag with given name does not exist - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_TARGET) - void delete(@NotEmpty String targetTagName); - - /** - * returns all {@link TargetTag}s. - * - * @param pageable page parameter - * @return all {@link TargetTag}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - Page findAll(@NotNull Pageable pageable); - - /** - * Retrieves all target tags based on the given specification. - * - * @param rsql rsql query string - * @param pageable pagination parameter - * @return the found {@link Target}s, never {@code null} - * @throws RSQLParameterUnsupportedFieldException if a field in the RSQL string is used but not provided by the given {@code fieldNameProvider} - * @throws RSQLParameterSyntaxException if the RSQL syntax is wrong - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - Page findByRsql(@NotNull String rsql, @NotNull Pageable pageable); - - /** - * Find {@link TargetTag} based on given Name. - * - * @param name to look for. - * @return {@link TargetTag} - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + @PreAuthorize(SpringEvalExpressions.HAS_READ_REPOSITORY) Optional getByName(@NotEmpty String name); - /** - * Finds {@link TargetTag} by given id. - * - * @param id to search for - * @return the found {@link TargetTag} - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - Optional get(long id); + @SuperBuilder + @Getter + @EqualsAndHashCode(callSuper = true) + @ToString(callSuper = true) + final class Create extends DistributionSetTagManagement.UpdateCreate {} - /** - * Finds {@link TargetTag} by given ids. - * - * @param ids the ids to for - * @return the found {@link TargetTag}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - List get(@NotEmpty Collection ids); + @SuperBuilder + @Getter + @EqualsAndHashCode(callSuper = true) + @ToString(callSuper = true) + final class Update extends DistributionSetTagManagement.UpdateCreate implements Identifiable { - /** - * Updates the {@link TargetTag}. - * - * @param update the {@link TargetTag} with updated values - * @return the updated {@link TargetTag} - * @throws EntityNotFoundException in case the {@link TargetTag} does not exist and cannot be updated - * @throws ConstraintViolationException if fields are not filled as specified. Check {@link TagUpdate} for field constraints. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) - TargetTag update(@NotNull @Valid TagUpdate update); + @NotNull + private Long id; + } + + @SuperBuilder + @Getter + class UpdateCreate { + + @ValidString + @Size(min = 1, max = NamedEntity.NAME_MAX_SIZE) + @NotNull(groups = DistributionSetTagManagement.Create.class) + private String name; + + @ValidString + @Size(max = NamedEntity.DESCRIPTION_MAX_SIZE) + private String description; + + @ValidString + @Size(max = Tag.COLOUR_MAX_SIZE) + private String colour; + } } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/TagBuilder.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/TagBuilder.java deleted file mode 100644 index d08647c41..000000000 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/TagBuilder.java +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others - * - * 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.builder; - -import org.eclipse.hawkbit.repository.model.Tag; - -/** - * Builder for {@link Tag}. - */ -public interface TagBuilder { - - /** - * @param id of the updatable entity - * @return builder instance - */ - TagUpdate update(long id); - - /** - * @return builder instance - */ - TagCreate create(); -} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/TagCreate.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/TagCreate.java deleted file mode 100644 index 3560bc172..000000000 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/TagCreate.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others - * - * 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.builder; - -import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Size; - -import org.eclipse.hawkbit.repository.model.BaseEntity; -import org.eclipse.hawkbit.repository.model.NamedEntity; -import org.eclipse.hawkbit.repository.model.Tag; - -/** - * Builder to create a new {@link Tag} entry. Defines all fields that can be set - * at creation time. Other fields are set by the repository automatically, e.g. - * {@link BaseEntity#getCreatedAt()}. - */ -public interface TagCreate { - - /** - * @param name for {@link Tag#getName()} - * @return updated builder instance - */ - TagCreate name(@Size(min = 1, max = NamedEntity.NAME_MAX_SIZE) @NotNull String name); - - /** - * @param description for {@link Tag#getDescription()} - * @return updated builder instance - */ - TagCreate description(@Size(max = NamedEntity.DESCRIPTION_MAX_SIZE) String description); - - /** - * @param colour for {@link Tag#getColour()} - * @return updated builder instance - */ - TagCreate colour(@Size(max = Tag.COLOUR_MAX_SIZE) String colour); - - /** - * @return peek on current state of {@link Tag} in the builder - */ - T build(); -} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/TagUpdate.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/TagUpdate.java deleted file mode 100644 index cd4f771e2..000000000 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/TagUpdate.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others - * - * 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.builder; - -import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Size; - -import org.eclipse.hawkbit.repository.model.NamedEntity; -import org.eclipse.hawkbit.repository.model.Tag; - -/** - * Builder to update an existing {@link Tag} entry. Defines all fields that can - * be updated. - */ -public interface TagUpdate { - - /** - * @param name for {@link Tag#getName()} - * @return updated builder instance - */ - TagUpdate name(@Size(min = 1, max = NamedEntity.NAME_MAX_SIZE) @NotNull String name); - - /** - * @param description for {@link Tag#getDescription()} - * @return updated builder instance - */ - TagUpdate description(@Size(max = NamedEntity.DESCRIPTION_MAX_SIZE) String description); - - /** - * @param colour for {@link Tag#getColour()} - * @return updated builder instance - */ - TagUpdate colour(@Size(max = Tag.COLOUR_MAX_SIZE) String colour); -} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-core/src/main/java/org/eclipse/hawkbit/repository/builder/GenericTagUpdate.java b/hawkbit-repository/hawkbit-repository-core/src/main/java/org/eclipse/hawkbit/repository/builder/GenericTagUpdate.java deleted file mode 100644 index 089b15c23..000000000 --- a/hawkbit-repository/hawkbit-repository-core/src/main/java/org/eclipse/hawkbit/repository/builder/GenericTagUpdate.java +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others - * - * 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.builder; - -/** - * Update implementation. - */ -public class GenericTagUpdate extends AbstractTagUpdateCreate implements TagUpdate { - - public GenericTagUpdate(final Long id) { - super.id = id; - } -} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java index 80f1e265a..4cbfd2606 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java @@ -13,14 +13,11 @@ import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.builder.ActionStatusBuilder; import org.eclipse.hawkbit.repository.builder.RolloutBuilder; import org.eclipse.hawkbit.repository.builder.RolloutGroupBuilder; -import org.eclipse.hawkbit.repository.builder.TagBuilder; import org.eclipse.hawkbit.repository.builder.TargetBuilder; import org.eclipse.hawkbit.repository.builder.TargetFilterQueryBuilder; import org.eclipse.hawkbit.repository.builder.TargetTypeBuilder; import org.eclipse.hawkbit.repository.jpa.builder.JpaActionStatusBuilder; import org.eclipse.hawkbit.repository.jpa.builder.JpaRolloutGroupBuilder; -import org.eclipse.hawkbit.repository.jpa.builder.JpaTagBuilder; -import org.eclipse.hawkbit.repository.model.Tag; import org.springframework.validation.annotation.Validated; /** @@ -49,12 +46,6 @@ public class JpaEntityFactory implements EntityFactory { return new JpaActionStatusBuilder(); } - @Override - public TagBuilder tag() { - return (TagBuilder)new JpaTagBuilder(); - } - - @Override public RolloutGroupBuilder rolloutGroup() { return new JpaRolloutGroupBuilder(); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRepositoryConfiguration.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRepositoryConfiguration.java index 82fd45c92..1ac84b51d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRepositoryConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRepositoryConfiguration.java @@ -453,8 +453,7 @@ public class JpaRepositoryConfiguration { final TargetBuilder targetBuilder, final TargetTypeBuilder targetTypeBuilder, final TargetFilterQueryBuilder targetFilterQueryBuilder, final RolloutBuilder rolloutBuilder) { - return new JpaEntityFactory( - targetBuilder, targetTypeBuilder, targetFilterQueryBuilder, rolloutBuilder); + return new JpaEntityFactory(targetBuilder, targetTypeBuilder, targetFilterQueryBuilder, rolloutBuilder); } /** diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/builder/JpaTagBuilder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/builder/JpaTagBuilder.java deleted file mode 100644 index ad9e325ae..000000000 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/builder/JpaTagBuilder.java +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others - * - * 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.builder; - -import org.eclipse.hawkbit.repository.builder.GenericTagUpdate; -import org.eclipse.hawkbit.repository.builder.TagBuilder; -import org.eclipse.hawkbit.repository.builder.TagCreate; -import org.eclipse.hawkbit.repository.builder.TagUpdate; -import org.eclipse.hawkbit.repository.jpa.model.JpaTag; -import org.eclipse.hawkbit.repository.model.Tag; - -/** - * Builder implementation for {@link Tag}. - */ -public class JpaTagBuilder implements TagBuilder { - - @Override - public TagUpdate update(final long id) { - return new GenericTagUpdate(id); - } - - @Override - public TagCreate create() { - return new JpaTagCreate(); - } -} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/builder/JpaTagCreate.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/builder/JpaTagCreate.java deleted file mode 100644 index b0fed3f48..000000000 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/builder/JpaTagCreate.java +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others - * - * 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.builder; - -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import org.eclipse.hawkbit.repository.builder.AbstractTagUpdateCreate; -import org.eclipse.hawkbit.repository.builder.TagCreate; -import org.eclipse.hawkbit.repository.jpa.model.JpaTag; -import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; - -/** - * Create/build implementation. - */ -@NoArgsConstructor(access = AccessLevel.PACKAGE) -public class JpaTagCreate extends AbstractTagUpdateCreate> implements TagCreate { - - public JpaTargetTag buildTargetTag() { - return new JpaTargetTag(name, description, colour); - } - - @Override - public JpaTag build() { - return new JpaTag(name, description, colour); - } -} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/AbstractJpaRepositoryManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/AbstractJpaRepositoryManagement.java index 6a70db0ec..6d3ad1b73 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/AbstractJpaRepositoryManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/AbstractJpaRepositoryManagement.java @@ -142,8 +142,8 @@ abstract class AbstractJpaRepositoryManagement findAll(final Pageable pageable) { - return JpaManagementHelper.findAllWithoutCountBySpec( + public Page findAll(final Pageable pageable) { + return JpaManagementHelper.findAllWithCountBySpec( jpaRepository, isNotDeleted().map(List::of).orElseGet(Collections::emptyList), pageable); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetTagManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetTagManagement.java index 721cb258a..06e855ca5 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetTagManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetTagManagement.java @@ -9,33 +9,16 @@ */ package org.eclipse.hawkbit.repository.jpa.management; -import java.util.Collection; -import java.util.Collections; -import java.util.List; import java.util.Optional; +import jakarta.persistence.EntityManager; + import org.eclipse.hawkbit.repository.TargetTagFields; import org.eclipse.hawkbit.repository.TargetTagManagement; -import org.eclipse.hawkbit.repository.builder.GenericTagUpdate; -import org.eclipse.hawkbit.repository.builder.TagCreate; -import org.eclipse.hawkbit.repository.builder.TagUpdate; -import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.JpaManagementHelper; -import org.eclipse.hawkbit.repository.jpa.acm.AccessController; -import org.eclipse.hawkbit.repository.jpa.builder.JpaTagCreate; -import org.eclipse.hawkbit.repository.jpa.configuration.Constants; -import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaNamedEntity_; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; import org.eclipse.hawkbit.repository.jpa.repository.TargetTagRepository; -import org.eclipse.hawkbit.repository.jpa.rsql.RsqlUtility; -import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.TargetTag; import org.springframework.boot.autoconfigure.condition.ConditionalOnBooleanProperty; -import org.springframework.dao.ConcurrencyFailureException; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.retry.annotation.Backoff; -import org.springframework.retry.annotation.Retryable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -47,91 +30,19 @@ import org.springframework.validation.annotation.Validated; @Validated @Service @ConditionalOnBooleanProperty(prefix = "hawkbit.jpa", name = { "enabled", "target-tag-management" }, matchIfMissing = true) -public class JpaTargetTagManagement implements TargetTagManagement { +public class JpaTargetTagManagement + extends AbstractJpaRepositoryManagement + implements TargetTagManagement { - private final TargetTagRepository targetTagRepository; - - protected JpaTargetTagManagement(final TargetTagRepository targetTagRepository) { - this.targetTagRepository = targetTagRepository; + protected JpaTargetTagManagement( + final TargetTagRepository targetTagRepository, + final EntityManager entityManager) { + super(targetTagRepository, entityManager); } - @Override - public long count() { - return targetTagRepository.count(); - } - - @Override - @Transactional - @Retryable(retryFor = { ConcurrencyFailureException.class }, maxAttempts = Constants.TX_RT_MAX, - backoff = @Backoff(delay = Constants.TX_RT_DELAY)) - public TargetTag create(final TagCreate c) { - final JpaTagCreate create = (JpaTagCreate) c; - - return targetTagRepository.save(AccessController.Operation.CREATE, create.buildTargetTag()); - } - - @Override - @Transactional - @Retryable(retryFor = { ConcurrencyFailureException.class }, maxAttempts = Constants.TX_RT_MAX, - backoff = @Backoff(delay = Constants.TX_RT_DELAY)) - public List create(final Collection> tt) { - final List targetTagList = tt.stream().map(JpaTagCreate.class::cast) - .map(JpaTagCreate::buildTargetTag).toList(); - return Collections.unmodifiableList( - targetTagRepository.saveAll(AccessController.Operation.CREATE, targetTagList)); - } - - @Override - @Transactional - @Retryable(retryFor = { ConcurrencyFailureException.class }, maxAttempts = Constants.TX_RT_MAX, - backoff = @Backoff(delay = Constants.TX_RT_DELAY)) - public void delete(final String targetTagName) { - targetTagRepository.delete( - targetTagRepository - .findOne(((root, query, cb) -> cb.equal(root.get(AbstractJpaNamedEntity_.name), targetTagName))) - .orElseThrow(() -> new EntityNotFoundException(TargetTag.class, targetTagName))); - } - - @Override - public Page findAll(final Pageable pageable) { - return JpaManagementHelper.findAllWithCountBySpec(targetTagRepository, null, pageable); - } - - @Override - public Page findByRsql(final String rsql, final Pageable pageable) { - return JpaManagementHelper.findAllWithCountBySpec(targetTagRepository, Collections.singletonList( - RsqlUtility.getInstance().buildRsqlSpecification(rsql, TargetTagFields.class)), pageable); - } @Override public Optional getByName(final String name) { - return targetTagRepository.findByNameEquals(name); - } - - @Override - public Optional get(final long id) { - return targetTagRepository.findById(id).map(TargetTag.class::cast); - } - - @Override - public List get(final Collection ids) { - return Collections.unmodifiableList(targetTagRepository.findAllById(ids)); - } - - @Override - @Transactional - @Retryable(retryFor = { ConcurrencyFailureException.class }, maxAttempts = Constants.TX_RT_MAX, - backoff = @Backoff(delay = Constants.TX_RT_DELAY)) - public TargetTag update(final TagUpdate u) { - final GenericTagUpdate update = (GenericTagUpdate) u; - - final JpaTargetTag tag = targetTagRepository.findById(update.getId()) - .orElseThrow(() -> new EntityNotFoundException(TargetTag.class, update.getId())); - - update.getName().ifPresent(tag::setName); - update.getDescription().ifPresent(tag::setDescription); - update.getColour().ifPresent(tag::setColour); - - return targetTagRepository.save(tag); + return jpaRepository.findByNameEquals(name); } } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/TargetTagEventTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/TargetTagEventTest.java index 826bec43a..65f912233 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/TargetTagEventTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/TargetTagEventTest.java @@ -9,6 +9,7 @@ */ package org.eclipse.hawkbit.repository.event.remote.entity; +import org.eclipse.hawkbit.repository.TargetTagManagement; import org.eclipse.hawkbit.repository.model.TargetTag; import org.junit.jupiter.api.Test; @@ -32,12 +33,12 @@ class TargetTagEventTest extends AbstractRemoteEntityEventTest { * Verifies that the target tag entity reloading by remote updated event works */ @Test - void testTargetTagUpdateEventt() { + void testTargetTagUpdateEvent() { assertAndCreateRemoteEvent(TargetTagUpdatedEvent.class); } @Override protected TargetTag createEntity() { - return targetTagManagement.create(entityFactory.tag().create().name("tag1")); + return targetTagManagement.create(TargetTagManagement.Create.builder().name("tag1").build()); } } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/acm/TargetAccessControllerTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/acm/TargetAccessControllerTest.java index 76584428d..c84944bae 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/acm/TargetAccessControllerTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/acm/TargetAccessControllerTest.java @@ -25,6 +25,7 @@ import java.util.List; import org.eclipse.hawkbit.repository.FilterParams; import org.eclipse.hawkbit.repository.Identifiable; +import org.eclipse.hawkbit.repository.TargetTagManagement; import org.eclipse.hawkbit.repository.exception.InsufficientPermissionException; import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.repository.jpa.autoassign.AutoAssignChecker; @@ -127,11 +128,11 @@ class TargetAccessControllerTest extends AbstractJpaIntegrationTest { final Target hiddenTarget = targetManagement .create(entityFactory.target().create().controllerId("device03").status(TargetUpdateStatus.REGISTERED)); - final Long myTagId = targetTagManagement.create(entityFactory.tag().create().name("myTag")).getId(); + final Long myTagId = targetTagManagement.create(TargetTagManagement.Create.builder().name("myTag").build()).getId(); // perform tag assignment before setting access rules targetManagement.assignTag( - Arrays.asList(permittedTarget.getControllerId(), readOnlyTargetControllerId, hiddenTarget.getControllerId()), myTagId); + List.of(permittedTarget.getControllerId(), readOnlyTargetControllerId, hiddenTarget.getControllerId()), myTagId); runAs(withUser("user", READ_TARGET + "/controllerId==" + permittedTarget.getControllerId() + " or controllerId==" + readOnlyTargetControllerId, 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 3ff0d996d..90d8cac42 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 @@ -18,6 +18,7 @@ import java.util.List; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.FilterParams; +import org.eclipse.hawkbit.repository.TargetTagManagement; import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -67,10 +68,10 @@ class TargetManagementSearchTest extends AbstractJpaIntegrationTest { */ @Test void targetSearchWithVariousFilterCombinations() { - final TargetTag targTagX = targetTagManagement.create(entityFactory.tag().create().name("TargTag-X")); - final TargetTag targTagY = targetTagManagement.create(entityFactory.tag().create().name("TargTag-Y")); - final TargetTag targTagZ = targetTagManagement.create(entityFactory.tag().create().name("TargTag-Z")); - final TargetTag targTagW = targetTagManagement.create(entityFactory.tag().create().name("TargTag-W")); + final TargetTag targTagX = targetTagManagement.create(TargetTagManagement.Create.builder().name("TargTag-X").build()); + final TargetTag targTagY = targetTagManagement.create(TargetTagManagement.Create.builder().name("TargTag-Y").build()); + final TargetTag targTagZ = targetTagManagement.create(TargetTagManagement.Create.builder().name("TargTag-Z").build()); + final TargetTag targTagW = targetTagManagement.create(TargetTagManagement.Create.builder().name("TargTag-W").build()); final DistributionSet setA = testdataFactory.createDistributionSet("A"); final DistributionSet setB = testdataFactory.createDistributionSet("B"); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementTest.java index 836f2f595..79ac5d45f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementTest.java @@ -32,6 +32,7 @@ import org.eclipse.hawkbit.im.authentication.SpPermission; import org.eclipse.hawkbit.im.authentication.SpRole; import org.eclipse.hawkbit.repository.FilterParams; import org.eclipse.hawkbit.repository.Identifiable; +import org.eclipse.hawkbit.repository.TargetTagManagement; import org.eclipse.hawkbit.repository.builder.TargetCreate; import org.eclipse.hawkbit.repository.builder.TargetUpdate; import org.eclipse.hawkbit.repository.event.remote.TargetAssignDistributionSetEvent; @@ -108,7 +109,7 @@ class TargetManagementTest extends AbstractJpaIntegrationTest { @Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = TargetTagCreatedEvent.class, count = 1) }) void entityQueriesReferringToNotExistingEntitiesThrowsException() { - final TargetTag tag = targetTagManagement.create(entityFactory.tag().create().name("A")); + final TargetTag tag = targetTagManagement.create(TargetTagManagement.Create.builder().name("A").build()); final Target target = testdataFactory.createTarget(); verifyThrownExceptionBy( @@ -240,7 +241,7 @@ class TargetManagementTest extends AbstractJpaIntegrationTest { assignTarget.add(targetManagement.create(entityFactory.target().create().controllerId("targetId1235")).getControllerId()); assignTarget.add(targetManagement.create(entityFactory.target().create().controllerId("targetId1236")).getControllerId()); - final TargetTag targetTag = targetTagManagement.create(entityFactory.tag().create().name("Tag1")); + final TargetTag targetTag = targetTagManagement.create(TargetTagManagement.Create.builder().name("Tag1").build()); final List assignedTargets = targetManagement.assignTag(assignTarget, targetTag.getId()); assertThat(assignedTargets).as("Assigned targets are wrong").hasSize(4); @@ -554,10 +555,10 @@ class TargetManagementTest extends AbstractJpaIntegrationTest { final List tagABCTargets = testdataFactory.createTargets(10, "tagABCTargets", "first description"); - final TargetTag tagA = targetTagManagement.create(entityFactory.tag().create().name("A")); - final TargetTag tagB = targetTagManagement.create(entityFactory.tag().create().name("B")); - final TargetTag tagC = targetTagManagement.create(entityFactory.tag().create().name("C")); - targetTagManagement.create(entityFactory.tag().create().name("X")); + final TargetTag tagA = targetTagManagement.create(TargetTagManagement.Create.builder().name("A").build()); + final TargetTag tagB = targetTagManagement.create(TargetTagManagement.Create.builder().name("B").build()); + final TargetTag tagC = targetTagManagement.create(TargetTagManagement.Create.builder().name("C").build()); + targetTagManagement.create(TargetTagManagement.Create.builder().name("X").build()); // doing different assignments assignTag(tagATargets, tagA); @@ -618,9 +619,9 @@ class TargetManagementTest extends AbstractJpaIntegrationTest { @Expect(type = TargetCreatedEvent.class, count = 109), @Expect(type = TargetUpdatedEvent.class, count = 227) }) void targetTagBulkUnassignments() { - final TargetTag targTagA = targetTagManagement.create(entityFactory.tag().create().name("Targ-A-Tag")); - final TargetTag targTagB = targetTagManagement.create(entityFactory.tag().create().name("Targ-B-Tag")); - final TargetTag targTagC = targetTagManagement.create(entityFactory.tag().create().name("Targ-C-Tag")); + final TargetTag targTagA = targetTagManagement.create(TargetTagManagement.Create.builder().name("Targ-A-Tag").build()); + final TargetTag targTagB = targetTagManagement.create(TargetTagManagement.Create.builder().name("Targ-B-Tag").build()); + final TargetTag targTagC = targetTagManagement.create(TargetTagManagement.Create.builder().name("Targ-C-Tag").build()); final List targAs = testdataFactory.createTargets(25, "target-id-A", "first description"); final List targBs = testdataFactory.createTargets(20, "target-id-B", "first description"); @@ -679,7 +680,7 @@ class TargetManagementTest extends AbstractJpaIntegrationTest { @Expect(type = TargetCreatedEvent.class, count = 50), @Expect(type = TargetUpdatedEvent.class, count = 25) }) void findTargetsWithNoTag() { - final TargetTag targTagA = targetTagManagement.create(entityFactory.tag().create().name("Targ-A-Tag")); + final TargetTag targTagA = targetTagManagement.create(TargetTagManagement.Create.builder().name("Targ-A-Tag").build()); final List targAs = testdataFactory.createTargets(25, "target-id-A", "first description"); assignTag(targAs, targTagA); @@ -721,7 +722,7 @@ class TargetManagementTest extends AbstractJpaIntegrationTest { @Test void findTargetsWithTagOrId() { final String rsqlFilter = "tag==Targ-A-Tag,id==target-id-B-00001,id==target-id-B-00008"; - final TargetTag targTagA = targetTagManagement.create(entityFactory.tag().create().name("Targ-A-Tag")); + final TargetTag targTagA = targetTagManagement.create(TargetTagManagement.Create.builder().name("Targ-A-Tag").build()); final List targAs = testdataFactory.createTargets(25, "target-id-A", "first description").stream() .map(Target::getControllerId).toList(); targetManagement.assignTag(targAs, targTagA.getId()); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetTagManagementSecurityTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetTagManagementSecurityTest.java index 6cee2a029..511423b67 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetTagManagementSecurityTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetTagManagementSecurityTest.java @@ -13,6 +13,7 @@ import java.util.List; import lombok.extern.slf4j.Slf4j; import org.eclipse.hawkbit.im.authentication.SpPermission; +import org.eclipse.hawkbit.repository.TargetTagManagement; import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.junit.jupiter.api.Test; @@ -36,7 +37,9 @@ class TargetTagManagementSecurityTest extends AbstractJpaIntegrationTest { */ @Test void createPermissionsCheck() { - assertPermissions(() -> targetTagManagement.create(entityFactory.tag().create().name("name")), List.of(SpPermission.CREATE_TARGET)); + assertPermissions( + () -> targetTagManagement.create(TargetTagManagement.Create.builder().name("name").build()), + List.of(SpPermission.CREATE_TARGET)); } /** @@ -44,7 +47,8 @@ class TargetTagManagementSecurityTest extends AbstractJpaIntegrationTest { */ @Test void createCollectionPermissionsCheck() { - assertPermissions(() -> targetTagManagement.create(List.of(entityFactory.tag().create().name("name"))), + assertPermissions( + () -> targetTagManagement.create(List.of(TargetTagManagement.Create.builder().name("name").build())), List.of(SpPermission.CREATE_TARGET)); } @@ -54,7 +58,7 @@ class TargetTagManagementSecurityTest extends AbstractJpaIntegrationTest { @Test void deletePermissionsCheck() { assertPermissions(() -> { - targetTagManagement.delete("tag"); + targetTagManagement.delete(1); return null; }, List.of(SpPermission.DELETE_TARGET)); } @@ -104,6 +108,6 @@ class TargetTagManagementSecurityTest extends AbstractJpaIntegrationTest { */ @Test void updatePermissionsCheck() { - assertPermissions(() -> targetTagManagement.update(entityFactory.tag().update(1L)), List.of(SpPermission.UPDATE_TARGET)); + assertPermissions(() -> targetTagManagement.update(TargetTagManagement.Update.builder().id(1L).build()), List.of(SpPermission.UPDATE_TARGET)); } } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetTagManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetTagManagementTest.java index f38532516..3ad034c5d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetTagManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetTagManagementTest.java @@ -23,8 +23,8 @@ import java.util.Random; import jakarta.validation.ConstraintViolationException; import org.eclipse.hawkbit.repository.TargetTagManagement; -import org.eclipse.hawkbit.repository.builder.TagCreate; -import org.eclipse.hawkbit.repository.builder.TagUpdate; +import org.eclipse.hawkbit.repository.TargetTagManagement.Create; +import org.eclipse.hawkbit.repository.TargetTagManagement.Update; import org.eclipse.hawkbit.repository.event.remote.entity.DistributionSetTagUpdatedEvent; import org.eclipse.hawkbit.repository.event.remote.entity.TargetCreatedEvent; import org.eclipse.hawkbit.repository.event.remote.entity.TargetTagUpdatedEvent; @@ -59,7 +59,7 @@ class TargetTagManagementTest extends AbstractJpaIntegrationTest { final Collection group = testdataFactory.createTargets(5).stream() .map(Target::getControllerId) .toList(); - final TargetTag tag = targetTagManagement.create(entityFactory.tag().create().name("tag1").description("tagdesc1")); + final TargetTag tag = targetTagManagement.create(Create.builder().name("tag1").description("tagdesc1").build()); final List missing = new ArrayList<>(); for (int i = 0; i < 5; i++) { @@ -77,7 +77,7 @@ class TargetTagManagementTest extends AbstractJpaIntegrationTest { .matches(e -> { if (e instanceof EntityNotFoundException enfe && enfe.getInfo().get(EntityNotFoundException.TYPE).equals(Target.class.getSimpleName()) - && enfe.getInfo().get(EntityNotFoundException.ENTITY_ID) instanceof Collection entityId) { + && enfe.getInfo().get(EntityNotFoundException.ENTITY_ID) instanceof Collection entityId) { return entityId.stream().sorted().toList().equals(missing); } return false; @@ -85,7 +85,7 @@ class TargetTagManagementTest extends AbstractJpaIntegrationTest { } /** - * Verifies that management get access reacts as specfied on calls for non existing entities by means + * Verifies that management get access reacts as specfied on calls for non existing entities by means * of Optional not present. */ @Test @@ -96,16 +96,16 @@ class TargetTagManagementTest extends AbstractJpaIntegrationTest { } /** - * Verifies that management queries react as specfied on calls for non existing entities - * by means of throwing EntityNotFoundException. + * Verifies that management queries react as specfied on calls for non existing entities + * by means of throwing EntityNotFoundException. */ @Test @ExpectEvents({ @Expect(type = DistributionSetTagUpdatedEvent.class), @Expect(type = TargetTagUpdatedEvent.class) }) void entityQueriesReferringToNotExistingEntitiesThrowsException() { - verifyThrownExceptionBy(() -> targetTagManagement.delete(NOT_EXIST_ID), "TargetTag"); - verifyThrownExceptionBy(() -> targetTagManagement.update(entityFactory.tag().update(NOT_EXIST_IDL)), "TargetTag"); + verifyThrownExceptionBy(() -> targetTagManagement.delete(NOT_EXIST_IDL), "TargetTag"); + verifyThrownExceptionBy(() -> targetTagManagement.update(Update.builder().id(NOT_EXIST_IDL).build()), "TargetTag"); verifyThrownExceptionBy(() -> getTargetTags(NOT_EXIST_ID), "Target"); } @@ -114,7 +114,7 @@ class TargetTagManagementTest extends AbstractJpaIntegrationTest { */ @Test void createAndUpdateTagWithInvalidFields() { - final TargetTag tag = targetTagManagement.create(entityFactory.tag().create().name("tag1").description("tagdesc1")); + final TargetTag tag = targetTagManagement.create(Create.builder().name("tag1").description("tagdesc1").build()); createAndUpdateTagWithInvalidDescription(tag); createAndUpdateTagWithInvalidColour(tag); createAndUpdateTagWithInvalidName(tag); @@ -128,7 +128,7 @@ class TargetTagManagementTest extends AbstractJpaIntegrationTest { final List groupA = testdataFactory.createTargets(20); final List groupB = testdataFactory.createTargets(20, "groupb", "groupb"); - final TargetTag tag = targetTagManagement.create(entityFactory.tag().create().name("tag1").description("tagdesc1")); + final TargetTag tag = targetTagManagement.create(Create.builder().name("tag1").description("tagdesc1").build()); // toggle A only -> A is now assigned List result = assignTag(groupA, tag); @@ -175,13 +175,10 @@ class TargetTagManagementTest extends AbstractJpaIntegrationTest { */ @Test void createTargetTag() { - final Tag tag = targetTagManagement - .create(entityFactory.tag().create().name("kai1").description("kai2").colour("colour")); - - assertThat(targetTagRepository.findByNameEquals("kai1").get().getDescription()).as("wrong tag ed") - .isEqualTo("kai2"); - assertThat(targetTagManagement.getByName("kai1").get().getColour()).as("wrong tag found").isEqualTo("colour"); - assertThat(targetTagManagement.get(tag.getId()).get().getColour()).as("wrong tag found").isEqualTo("colour"); + final Tag tag = targetTagManagement.create(Create.builder().name("k1").description("k2").colour("colour").build()); + assertThat(targetTagRepository.findByNameEquals("k1").orElseThrow().getDescription()).as("wrong tag ed").isEqualTo("k2"); + assertThat(targetTagManagement.getByName("k1").orElseThrow().getColour()).as("wrong tag found").isEqualTo("colour"); + assertThat(targetTagManagement.get(tag.getId()).orElseThrow().getColour()).as("wrong tag found").isEqualTo("colour"); } /** @@ -198,7 +195,7 @@ class TargetTagManagementTest extends AbstractJpaIntegrationTest { } // delete - targetTagManagement.delete(toDelete.getName()); + targetTagManagement.delete(toDelete.getId()); // check for (final Target target : targetRepository.findAll()) { @@ -220,13 +217,13 @@ class TargetTagManagementTest extends AbstractJpaIntegrationTest { final TargetTag savedAssigned = tags.iterator().next(); // persist - targetTagManagement.update(entityFactory.tag().update(savedAssigned.getId()).name("test123")); + targetTagManagement.update(Update.builder().id(savedAssigned.getId()).name("test123").build()); // check data assertThat(targetTagRepository.findAll()).as("Wrong target tag size").hasSize(tags.size()); - assertThat(targetTagRepository.findById(savedAssigned.getId()).get().getName()).as("wrong target tag is saved") + assertThat(targetTagRepository.findById(savedAssigned.getId()).orElseThrow().getName()).as("wrong target tag is saved") .isEqualTo("test123"); - assertThat(targetTagRepository.findById(savedAssigned.getId()).get().getOptLockRevision()) + assertThat(targetTagRepository.findById(savedAssigned.getId()).orElseThrow().getOptLockRevision()) .as("wrong target tag is saved") .isEqualTo(2); } @@ -236,7 +233,7 @@ class TargetTagManagementTest extends AbstractJpaIntegrationTest { */ @Test void failedDuplicateTargetTagNameException() { - final TagCreate tagCreate = entityFactory.tag().create().name("A"); + final Create tagCreate = Create.builder().name("A").build(); targetTagManagement.create(tagCreate); assertThatExceptionOfType(EntityAlreadyExistsException.class).isThrownBy(() -> targetTagManagement.create(tagCreate)); } @@ -246,69 +243,68 @@ class TargetTagManagementTest extends AbstractJpaIntegrationTest { */ @Test void failedDuplicateTargetTagNameExceptionAfterUpdate() { - targetTagManagement.create(entityFactory.tag().create().name("A")); - final TargetTag tag = targetTagManagement.create(entityFactory.tag().create().name("B")); + targetTagManagement.create(Create.builder().name("A").build()); + final TargetTag tag = targetTagManagement.create(Create.builder().name("B").build()); - final TagUpdate tagUpdate = entityFactory.tag().update(tag.getId()).name("A"); + final Update tagUpdate = Update.builder().id(tag.getId()).name("A").build(); assertThatExceptionOfType(EntityAlreadyExistsException.class).isThrownBy(() -> targetTagManagement.update(tagUpdate)); } private void createAndUpdateTagWithInvalidDescription(final Tag tag) { - final TagCreate tagCraeteTooLong = entityFactory.tag().create().name("a").description(randomString(513)); + final Create tagCreateTooLong = Create.builder().name("a").description(randomString(513)).build(); assertThatExceptionOfType(ConstraintViolationException.class) .as("tag with too long description should not be created") - .isThrownBy(() -> targetTagManagement.create(tagCraeteTooLong)); - final TagCreate tagCreateInvalidHtml = entityFactory.tag().create().name("a").description(INVALID_TEXT_HTML); + .isThrownBy(() -> targetTagManagement.create(tagCreateTooLong)); + final Create tagCreateInvalidHtml = Create.builder().name("a").description(INVALID_TEXT_HTML).build(); assertThatExceptionOfType(ConstraintViolationException.class) .as("tag with invalid description should not be created") .isThrownBy(() -> targetTagManagement.create(tagCreateInvalidHtml)); - final TagUpdate tagUpdateTooLong = entityFactory.tag().update(tag.getId()).description(randomString(513)); + final Update tagUpdateTooLong = Update.builder().id(tag.getId()).description(randomString(513)).build(); assertThatExceptionOfType(ConstraintViolationException.class) .as("tag with too long description should not be updated") .isThrownBy(() -> targetTagManagement.update(tagUpdateTooLong)); - final TagUpdate tagUpdateInvalidHtml = entityFactory.tag().update(tag.getId()).description(INVALID_TEXT_HTML); + final Update tagUpdateInvalidHtml = Update.builder().id(tag.getId()).description(INVALID_TEXT_HTML).build(); assertThatExceptionOfType(ConstraintViolationException.class) .as("tag with invalid description should not be updated") .isThrownBy(() -> targetTagManagement.update(tagUpdateInvalidHtml)); } private void createAndUpdateTagWithInvalidColour(final Tag tag) { - final TagCreate tagCreateTooLong = entityFactory.tag().create().name("a").colour(randomString(17)); + final Create tagCreateTooLong = Create.builder().name("a").colour(randomString(17)).build(); assertThatExceptionOfType(ConstraintViolationException.class) .as("tag with too long colour should not be created") .isThrownBy(() -> targetTagManagement.create(tagCreateTooLong)); - final TagCreate tagCraeteInvalidHtml = entityFactory.tag().create().name("a").colour(INVALID_TEXT_HTML); + final Create tagCreateInvalidHtml = Create.builder().name("a").colour(INVALID_TEXT_HTML).build(); assertThatExceptionOfType(ConstraintViolationException.class) .as("tag with invalid colour should not be created") - .isThrownBy(() -> targetTagManagement.create(tagCraeteInvalidHtml)); - final TagUpdate tagUpdateTooLong = entityFactory.tag().update(tag.getId()).colour(randomString(17)); + .isThrownBy(() -> targetTagManagement.create(tagCreateInvalidHtml)); + final Update tagUpdateTooLong = Update.builder().id(tag.getId()).colour(randomString(17)).build(); assertThatExceptionOfType(ConstraintViolationException.class) .as("tag with too long colour should not be updated") .isThrownBy(() -> targetTagManagement.update(tagUpdateTooLong)); - final TagUpdate tagUpdateInvalidHtml = entityFactory.tag().update(tag.getId()).colour(INVALID_TEXT_HTML); + final Update tagUpdateInvalidHtml = Update.builder().id(tag.getId()).colour(INVALID_TEXT_HTML).build(); assertThatExceptionOfType(ConstraintViolationException.class) .as("tag with invalid colour should not be updated") - .isThrownBy(() -> targetTagManagement - .update(tagUpdateInvalidHtml)); + .isThrownBy(() -> targetTagManagement.update(tagUpdateInvalidHtml)); } private void createAndUpdateTagWithInvalidName(final Tag tag) { - final TagCreate tagCreateTooLong = entityFactory.tag().create().name(randomString(NamedEntity.NAME_MAX_SIZE + 1)); + final Create tagCreateTooLong = Create.builder().name(randomString(NamedEntity.NAME_MAX_SIZE + 1)).build(); assertThatExceptionOfType(ConstraintViolationException.class) .as("tag with too long name should not be created") .isThrownBy(() -> targetTagManagement.create(tagCreateTooLong)); - final TagCreate tagCreateInvalidHtml = entityFactory.tag().create().name(INVALID_TEXT_HTML); + final Create tagCreateInvalidHtml = Create.builder().name(INVALID_TEXT_HTML).build(); assertThatExceptionOfType(ConstraintViolationException.class) .as("tag with invalid name should not be created") .isThrownBy(() -> targetTagManagement.create(tagCreateInvalidHtml)); - final TagUpdate tagUpdateTooLong = entityFactory.tag().update(tag.getId()).name(randomString(NamedEntity.NAME_MAX_SIZE + 1)); + final Update tagUpdateTooLong = Update.builder().id(tag.getId()).name(randomString(NamedEntity.NAME_MAX_SIZE + 1)).build(); assertThatExceptionOfType(ConstraintViolationException.class) .as("tag with too long name should not be updated") .isThrownBy(() -> targetTagManagement.update(tagUpdateTooLong)); - final TagUpdate tagUpdateInvalidHtml = entityFactory.tag().update(tag.getId()).name(INVALID_TEXT_HTML); + final Update tagUpdateInvalidHtml = Update.builder().id(tag.getId()).name(INVALID_TEXT_HTML).build(); assertThatExceptionOfType(ConstraintViolationException.class).as("tag with invalid name should not be updated") .isThrownBy(() -> targetTagManagement.update(tagUpdateInvalidHtml)); - final TagUpdate tagUpdateEmpty = entityFactory.tag().update(tag.getId()).name(""); + final Update tagUpdateEmpty = Update.builder().id(tag.getId()).name("").build(); assertThatExceptionOfType(ConstraintViolationException.class) .as("tag with too short name should not be updated") .isThrownBy(() -> targetTagManagement.update(tagUpdateEmpty)); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlTagFieldsTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlTagFieldsTest.java index 607fd46d7..d40062019 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlTagFieldsTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlTagFieldsTest.java @@ -13,6 +13,7 @@ import static org.assertj.core.api.Assertions.assertThat; import org.eclipse.hawkbit.repository.DistributionSetTagManagement; import org.eclipse.hawkbit.repository.TagFields; +import org.eclipse.hawkbit.repository.TargetTagManagement; import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.TargetTag; @@ -30,8 +31,8 @@ class RsqlTagFieldsTest extends AbstractJpaIntegrationTest { @BeforeEach void seuptBeforeTest() { for (int i = 0; i < 5; i++) { - targetTagManagement.create(entityFactory.tag().create() - .name(Integer.toString(i)).description(Integer.toString(i)).colour(i % 2 == 0 ? "red" : "blue")); + targetTagManagement.create(TargetTagManagement.Create.builder() + .name(Integer.toString(i)).description(Integer.toString(i)).colour(i % 2 == 0 ? "red" : "blue").build()); distributionSetTagManagement.create(DistributionSetTagManagement.Create.builder() .name(Integer.toString(i)).description(Integer.toString(i)).colour(i % 2 == 0 ? "red" : "blue").build()); } @@ -135,7 +136,7 @@ class RsqlTagFieldsTest extends AbstractJpaIntegrationTest { } private void assertRSQLQueryTarget(final String rsql, final long expectedEntities) { - final Page findEntity = targetTagManagement.findByRsql(rsql, PageRequest.of(0, 100)); + final Page findEntity = targetTagManagement.findByRsql(rsql, PageRequest.of(0, 100)); final long countAllEntities = findEntity.getTotalElements(); assertThat(findEntity).isNotNull(); assertThat(countAllEntities).isEqualTo(expectedEntities); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlTargetFieldTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlTargetFieldTest.java index a9e7d209d..c6fa5a2d3 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlTargetFieldTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RsqlTargetFieldTest.java @@ -18,6 +18,7 @@ import java.util.Arrays; import java.util.Map; import org.eclipse.hawkbit.repository.TargetFields; +import org.eclipse.hawkbit.repository.TargetTagManagement; import org.eclipse.hawkbit.repository.TargetTypeFields; import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; @@ -59,10 +60,10 @@ class RsqlTargetFieldTest extends AbstractJpaIntegrationTest { final DistributionSet ds = testdataFactory.createDistributionSet("AssignedDs"); - final TargetTag targetTag = targetTagManagement.create(entityFactory.tag().create().name("Tag1")); - final TargetTag targetTag2 = targetTagManagement.create(entityFactory.tag().create().name("Tag2")); - final TargetTag targetTag3 = targetTagManagement.create(entityFactory.tag().create().name("Tag3")); - targetTagManagement.create(entityFactory.tag().create().name("Tag4")); + final TargetTag targetTag = targetTagManagement.create(TargetTagManagement.Create.builder().name("Tag1").build()); + final TargetTag targetTag2 = targetTagManagement.create(TargetTagManagement.Create.builder().name("Tag2").build()); + final TargetTag targetTag3 = targetTagManagement.create(TargetTagManagement.Create.builder().name("Tag3").build()); + targetTagManagement.create(TargetTagManagement.Create.builder().name("Tag4").build()); target = targetManagement.create( entityFactory.target().create() diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java index 8344d0a00..41b95be6f 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java @@ -66,6 +66,7 @@ import org.eclipse.hawkbit.repository.model.RepositoryModelConstants; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.test.TestConfiguration; import org.eclipse.hawkbit.repository.test.matcher.EventVerifier; import org.eclipse.hawkbit.security.SystemSecurityContext; @@ -144,7 +145,7 @@ public abstract class AbstractIntegrationTest { @Autowired protected TargetFilterQueryManagement targetFilterQueryManagement; @Autowired - protected TargetTagManagement targetTagManagement; + protected TargetTagManagement targetTagManagement; @Autowired protected DeploymentManagement deploymentManagement; @Autowired diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestdataFactory.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestdataFactory.java index 4e98dcd41..45f7a73e3 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestdataFactory.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestdataFactory.java @@ -49,7 +49,6 @@ import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.TargetTagManagement; import org.eclipse.hawkbit.repository.TargetTypeManagement; import org.eclipse.hawkbit.repository.builder.DynamicRolloutGroupTemplate; -import org.eclipse.hawkbit.repository.builder.TagCreate; import org.eclipse.hawkbit.repository.builder.TargetCreate; import org.eclipse.hawkbit.repository.builder.TargetTypeCreate; import org.eclipse.hawkbit.repository.model.Action; @@ -914,9 +913,9 @@ public class TestdataFactory { * @return the created set of {@link TargetTag}s */ public List createTargetTags(final int number, final String tagPrefix) { - final List> result = new ArrayList<>(number); + final List result = new ArrayList<>(number); for (int i = 0; i < number; i++) { - result.add(entityFactory.tag().create().name(tagPrefix + i).description(tagPrefix + i).colour(String.valueOf(i))); + result.add(TargetTagManagement.Create.builder().name(tagPrefix + i).description(tagPrefix + i).colour(String.valueOf(i)).build()); } return targetTagManagement.create(result); } diff --git a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/JsonBuilder.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/JsonBuilder.java index 77cf7e0dd..6f6eba1c7 100644 --- a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/JsonBuilder.java +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/JsonBuilder.java @@ -19,9 +19,11 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.DistributionSetTagManagement; import org.eclipse.hawkbit.repository.DistributionSetTypeManagement; import org.eclipse.hawkbit.repository.SoftwareModuleManagement; import org.eclipse.hawkbit.repository.SoftwareModuleTypeManagement; +import org.eclipse.hawkbit.repository.TargetTagManagement; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.RolloutGroupConditionBuilder; import org.eclipse.hawkbit.repository.model.RolloutGroupConditions; @@ -72,6 +74,59 @@ public class JsonBuilder { return builder.toString(); } + public static String targetTag(final TargetTagManagement.Update dsTagUpdate) throws JSONException { + final StringBuilder builder = new StringBuilder(); + builder.append(new JSONObject() + .put("name", dsTagUpdate.getName()).put("description", dsTagUpdate.getDescription()) + .put("colour", dsTagUpdate.getColour()).toString()); + return builder.toString(); + } + + public static String targetTags(final List dsTagsCreate) throws JSONException { + final StringBuilder builder = new StringBuilder(); + + builder.append("["); + int i = 0; + for (final TargetTagManagement.Create tag : dsTagsCreate) { + builder.append(new JSONObject() + .put("name", tag.getName()).put("description", tag.getDescription()) + .put("colour", tag.getColour()).toString()); + + if (++i < dsTagsCreate.size()) { + builder.append(","); + } + } + builder.append("]"); + + return builder.toString(); + } + + public static String dsTag(final DistributionSetTagManagement.Update dsTagUpdate) throws JSONException { + final StringBuilder builder = new StringBuilder(); + builder.append(new JSONObject() + .put("name", dsTagUpdate.getName()).put("description", dsTagUpdate.getDescription()) + .put("colour", dsTagUpdate.getColour()).toString()); + return builder.toString(); + } + + public static String dsTags(final List dsTagsCreate) throws JSONException { + final StringBuilder builder = new StringBuilder(); + + builder.append("["); + int i = 0; + for (final DistributionSetTagManagement.Create tag : dsTagsCreate) { + builder.append(new JSONObject() + .put("name", tag.getName()).put("description", tag.getDescription()) + .put("colour", tag.getColour()).toString()); + + if (++i < dsTagsCreate.size()) { + builder.append(","); + } + } + builder.append("]"); + + return builder.toString(); + } public static String tag(final Tag tag) throws JSONException { final StringBuilder builder = new StringBuilder();