From 8ce8d8e571586873a041d96e74fca1b8182ba464 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Mon, 5 Sep 2016 09:17:15 +0200 Subject: [PATCH 01/10] Fixed DMF sending out wrong message if action on CANCELING Signed-off-by: Kai Zimmermann --- .../rest/resource/DataConversionHelper.java | 25 ++++++++----------- .../ddi/rest/resource/DdiRootController.java | 2 +- .../amqp/AmqpMessageHandlerService.java | 20 ++++++++++----- .../amqp/AmqpMessageHandlerServiceTest.java | 7 +++--- .../repository/ControllerManagement.java | 12 +++++++++ .../repository/jpa/ActionRepository.java | 23 ++++++++++++----- .../jpa/JpaControllerManagement.java | 6 +++++ pom.xml | 2 +- 8 files changed, 65 insertions(+), 32 deletions(-) diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DataConversionHelper.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DataConversionHelper.java index d87de67d0..deda60646 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DataConversionHelper.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DataConversionHelper.java @@ -14,6 +14,7 @@ import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; import javax.servlet.http.HttpServletResponse; @@ -29,7 +30,6 @@ import org.eclipse.hawkbit.ddi.json.model.DdiControllerBase; import org.eclipse.hawkbit.ddi.json.model.DdiPolling; import org.eclipse.hawkbit.ddi.rest.api.DdiRestConstants; import org.eclipse.hawkbit.repository.model.Action; -import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.tenancy.TenantAware; @@ -108,30 +108,25 @@ public final class DataConversionHelper { return file; } - static DdiControllerBase fromTarget(final Target target, final List actions, + static DdiControllerBase fromTarget(final Target target, final Optional action, final String defaultControllerPollTime, final TenantAware tenantAware) { final DdiControllerBase result = new DdiControllerBase( new DdiConfig(new DdiPolling(defaultControllerPollTime))); - boolean addedUpdate = false; - boolean addedCancel = false; - final long countCancelingActions = actions.stream().filter(a -> a.getStatus() == Status.CANCELING).count(); - for (final Action action : actions) { - if (countCancelingActions <= 0 && !action.isCancelingOrCanceled() && !addedUpdate) { + if (action.isPresent()) { + if (action.get().isCancelingOrCanceled()) { + result.add(linkTo(methodOn(DdiRootController.class, tenantAware.getCurrentTenant()) + .getControllerCancelAction(target.getControllerId(), action.get().getId())) + .withRel(DdiRestConstants.CANCEL_ACTION)); + } else { // we need to add the hashcode here of the actionWithStatus // because the action might // have changed from 'soft' to 'forced' type and we need to // change the payload of the // response because of eTags. result.add(linkTo(methodOn(DdiRootController.class, tenantAware.getCurrentTenant()) - .getControllerBasedeploymentAction(target.getControllerId(), action.getId(), - calculateEtag(action))).withRel(DdiRestConstants.DEPLOYMENT_BASE_ACTION)); - addedUpdate = true; - } else if (action.isCancelingOrCanceled() && !addedCancel) { - result.add(linkTo(methodOn(DdiRootController.class, tenantAware.getCurrentTenant()) - .getControllerCancelAction(target.getControllerId(), action.getId())) - .withRel(DdiRestConstants.CANCEL_ACTION)); - addedCancel = true; + .getControllerBasedeploymentAction(target.getControllerId(), action.get().getId(), + calculateEtag(action.get()))).withRel(DdiRestConstants.DEPLOYMENT_BASE_ACTION)); } } diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootController.java index 9dd65d5fc..f1ce7e812 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootController.java @@ -130,7 +130,7 @@ public class DdiRootController implements DdiRootControllerRestApi { } return new ResponseEntity<>( - DataConversionHelper.fromTarget(target, controllerManagement.findActionByTargetAndActive(target), + DataConversionHelper.fromTarget(target, controllerManagement.findOldestActionByTargetAndActive(target), controllerManagement.getPollingTime(), tenantAware), HttpStatus.OK); } diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java index dd152bd5a..a8723a63a 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java @@ -13,6 +13,7 @@ import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.UUID; import org.apache.commons.lang3.ArrayUtils; @@ -32,6 +33,7 @@ import org.eclipse.hawkbit.dmf.json.model.ArtifactHash; import org.eclipse.hawkbit.dmf.json.model.DownloadResponse; import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken; import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken.FileResource; +import org.eclipse.hawkbit.eventbus.event.CancelTargetAssignmentEvent; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; import org.eclipse.hawkbit.repository.ArtifactManagement; @@ -344,18 +346,24 @@ public class AmqpMessageHandlerService extends BaseAmqpService { } private void lookIfUpdateAvailable(final Target target) { - final List actions = controllerManagement.findActionByTargetAndActive(target); - if (actions.isEmpty()) { + final Optional action = controllerManagement.findOldestActionByTargetAndActive(target); + if (!action.isPresent()) { return; } - // action are ordered by ASC - final Action action = actions.get(0); - final DistributionSet distributionSet = action.getDistributionSet(); + + if (action.get().isCancelingOrCanceled()) { + amqpMessageDispatcherService.targetCancelAssignmentToDistributionSet( + new CancelTargetAssignmentEvent(target.getOptLockRevision(), target.getTenant(), + target.getControllerId(), action.get().getId(), target.getTargetInfo().getAddress())); + return; + } + + final DistributionSet distributionSet = action.get().getDistributionSet(); final List softwareModuleList = controllerManagement .findSoftwareModulesByDistributionSet(distributionSet); final String targetSecurityToken = systemSecurityContext.runAsSystem(() -> target.getSecurityToken()); amqpMessageDispatcherService.targetAssignDistributionSet(new TargetAssignDistributionSetEvent( - target.getOptLockRevision(), target.getTenant(), target.getControllerId(), action.getId(), + target.getOptLockRevision(), target.getTenant(), target.getControllerId(), action.get().getId(), softwareModuleList, target.getTargetInfo().getAddress(), targetSecurityToken)); } diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java index 9ed314ebc..5937d8126 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java @@ -23,6 +23,7 @@ import java.net.URI; import java.net.URL; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import org.eclipse.hawkbit.api.HostnameResolver; import org.eclipse.hawkbit.artifact.repository.ArtifactRepository; @@ -155,6 +156,7 @@ public class AmqpMessageHandlerServiceTest { final ArgumentCaptor uriCaptor = ArgumentCaptor.forClass(URI.class); when(controllerManagementMock.findOrRegisterTargetIfItDoesNotexist(targetIdCaptor.capture(), uriCaptor.capture())).thenReturn(null); + when(controllerManagementMock.findOldestActionByTargetAndActive(Matchers.any())).thenReturn(Optional.empty()); amqpMessageHandlerService.onMessage(message, MessageType.THING_CREATED.name(), TENANT, "vHost"); @@ -362,9 +364,8 @@ public class AmqpMessageHandlerServiceTest { when(controllerManagementMock.addUpdateActionStatus(Matchers.any())).thenReturn(action); when(entityFactoryMock.generateActionStatus()).thenReturn(new JpaActionStatus()); // for the test the same action can be used - final List actionList = new ArrayList<>(); - actionList.add(action); - when(controllerManagementMock.findActionByTargetAndActive(Matchers.any())).thenReturn(actionList); + when(controllerManagementMock.findOldestActionByTargetAndActive(Matchers.any())) + .thenReturn(Optional.of(action)); final List softwareModuleList = createSoftwareModuleList(); when(controllerManagementMock.findSoftwareModulesByDistributionSet(Matchers.any())) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java index f06621fd4..14780cee6 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.repository; import java.net.URI; import java.util.List; import java.util.Map; +import java.util.Optional; import javax.validation.constraints.NotNull; @@ -113,6 +114,17 @@ public interface ControllerManagement { @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) List findActionByTargetAndActive(@NotNull Target target); + /** + * Retrieves oldest {@link Action} that is active and assigned to a + * {@link Target}. + * + * @param target + * the target to retrieve the actions from + * @return a list of actions assigned to given target which are active + */ + @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) + Optional findOldestActionByTargetAndActive(@NotNull Target target); + /** * Get the {@link Action} entity for given actionId with all lazy * attributes. diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionRepository.java index 0eebbced1..8989a5a41 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionRepository.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.Collection; import java.util.List; +import java.util.Optional; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; @@ -79,21 +80,31 @@ public interface ActionRepository extends BaseEntityRepository, Slice findByTarget(Pageable pageable, JpaTarget target); /** - * Retrieves all {@link Action}s which are active and referring the given - * {@link Target} in a specified order. Loads also the lazy - * {@link Action#getDistributionSet()} field. + * Retrieves all {@link Action}s which are active and referring to the given + * {@link Target} order by ID ascending. * - * @param pageable - * page parameters * @param target * the target to find assigned actions * @param active * the action active flag * @return the found {@link Action}s */ - @EntityGraph(value = "Action.ds", type = EntityGraphType.LOAD) List findByTargetAndActiveOrderByIdAsc(final JpaTarget target, boolean active); + /** + * Retrieves the oldest {@link Action} that is active and referring to the + * given {@link Target}. + * + * @param target + * the target to find assigned actions + * @param active + * the action active flag + * + * @return the found {@link Action} + */ + @EntityGraph(value = "Action.ds", type = EntityGraphType.LOAD) + Optional findFirstByTargetAndActiveOrderByIdAsc(final JpaTarget target, boolean active); + /** * Retrieves latest {@link UpdateAction} for given target and * {@link SoftwareModule}. diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java index 34160aa37..7d02b3bd8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java @@ -12,6 +12,7 @@ import java.net.URI; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Optional; import javax.persistence.EntityManager; import javax.persistence.criteria.CriteriaBuilder; @@ -160,6 +161,11 @@ public class JpaControllerManagement implements ControllerManagement { return actionRepository.findByTargetAndActiveOrderByIdAsc((JpaTarget) target, true); } + @Override + public Optional findOldestActionByTargetAndActive(final Target target) { + return actionRepository.findFirstByTargetAndActiveOrderByIdAsc((JpaTarget) target, true); + } + @Override public List findSoftwareModulesByDistributionSet(final DistributionSet distributionSet) { return new ArrayList<>(softwareModuleRepository.findByAssignedTo((JpaDistributionSet) distributionSet)); diff --git a/pom.xml b/pom.xml index 31a175bd6..4684aa7b9 100644 --- a/pom.xml +++ b/pom.xml @@ -96,7 +96,7 @@ 1.5.4 1.0.2 19.0 - 1.4.3 + 1.5.2 1.50.5 2.2.4 1.1.7 From be841c6095d51280c7debb1d95f0adbbcb0bcc52 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 7 Sep 2016 09:32:18 +0200 Subject: [PATCH 02/10] Fixed feign usage after Spring Boot 1.3 upgrade Signed-off-by: Kai Zimmermann --- .../simulator/SimulationController.java | 2 +- .../hawkbit-example-core-feign-client/pom.xml | 1 - ...leConsumersProducersSpringMvcContract.java | 3 ++ .../hawkbit-example-ddi-feign-client/pom.xml | 12 ------ .../MgmtDistributionSetClientResource.java | 3 +- .../MgmtDistributionSetTagClientResource.java | 3 +- ...MgmtDistributionSetTypeClientResource.java | 3 +- .../MgmtDownloadArtifactClientResource.java | 3 +- .../resource/MgmtDownloadClientResource.java | 3 +- .../resource/MgmtRolloutClientResource.java | 3 +- .../MgmtSoftwareModuleClientResource.java | 3 +- .../MgmtSoftwareModuleTypeClientResource.java | 3 +- .../resource/MgmtSystemClientResource.java | 3 +- .../MgmtSystemManagementClientResource.java | 3 +- .../resource/MgmtTargetClientResource.java | 3 +- .../resource/MgmtTargetTagClientResource.java | 3 +- .../hawkbit-example-mgmt-simulator/pom.xml | 28 ------------- .../hawkbit/mgmt/client/Application.java | 42 +++---------------- .../scenarios/ConfigurableScenario.java | 15 +------ .../CreateStartedRolloutExample.java | 2 - examples/pom.xml | 29 ++++--------- .../rest/api/DdiRootControllerRestApi.java | 7 ++-- .../rest/api/MgmtDistributionSetRestApi.java | 17 ++++---- .../api/MgmtDistributionSetTagRestApi.java | 9 ++-- .../api/MgmtDistributionSetTypeRestApi.java | 9 ++-- .../mgmt/rest/api/MgmtRolloutRestApi.java | 3 +- .../rest/api/MgmtSoftwareModuleRestApi.java | 9 ++-- .../api/MgmtSoftwareModuleTypeRestApi.java | 5 +-- .../mgmt/rest/api/MgmtSystemRestApi.java | 3 +- .../mgmt/rest/api/MgmtTargetRestApi.java | 7 ++-- .../mgmt/rest/api/MgmtTargetTagRestApi.java | 9 ++-- 31 files changed, 66 insertions(+), 182 deletions(-) diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulationController.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulationController.java index b100cb28f..2ae8027ca 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulationController.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulationController.java @@ -93,7 +93,7 @@ public class SimulationController { gatewayToken)); } - return ResponseEntity.ok("Updated " + amount + " DMF connected targets!"); + return ResponseEntity.ok("Updated " + amount + " " + protocol + " connected targets!"); } private boolean isDmfDisabled() { diff --git a/examples/hawkbit-example-core-feign-client/pom.xml b/examples/hawkbit-example-core-feign-client/pom.xml index 5b3df2ef2..4e881d5ac 100644 --- a/examples/hawkbit-example-core-feign-client/pom.xml +++ b/examples/hawkbit-example-core-feign-client/pom.xml @@ -32,7 +32,6 @@ org.springframework.cloud spring-cloud-netflix-core - 1.0.7.RELEASE org.slf4j diff --git a/examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java b/examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java index b04143cdf..f7cf14026 100644 --- a/examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java +++ b/examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java @@ -10,12 +10,14 @@ package org.eclipse.hawkbit.feign.core.client; import java.lang.annotation.Annotation; import java.lang.reflect.Method; +import java.util.LinkedHashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.netflix.feign.support.SpringMvcContract; import feign.MethodMetadata; +import feign.Param; /** * Own implementation of the {@link SpringMvcContract} which catches the @@ -39,5 +41,6 @@ public class IgnoreMultipleConsumersProducersSpringMvcContract extends SpringMvc // https://github.com/spring-cloud/spring-cloud-netflix/issues/808 LOGGER.trace(e.getMessage(), e); } + data.indexToExpander(new LinkedHashMap()); } } diff --git a/examples/hawkbit-example-ddi-feign-client/pom.xml b/examples/hawkbit-example-ddi-feign-client/pom.xml index 5388544db..3797d609b 100644 --- a/examples/hawkbit-example-ddi-feign-client/pom.xml +++ b/examples/hawkbit-example-ddi-feign-client/pom.xml @@ -20,18 +20,6 @@ hawkBit-example :: DDI Feign Client - - - - org.springframework.cloud - spring-cloud-netflix - 1.0.7.RELEASE - pom - import - - - - org.eclipse.hawkbit diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetClientResource.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetClientResource.java index 40eb13b55..b38fc8edc 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetClientResource.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetClientResource.java @@ -9,13 +9,12 @@ package org.eclipse.hawkbit.mgmt.client.resource; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetRestApi; -import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the DistributionSet resource of the management API. */ -@FeignClient(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING) +@FeignClient(name = "MgmtDistributionSetClient", url = "${hawkbit.url:localhost:8080}") public interface MgmtDistributionSetClientResource extends MgmtDistributionSetRestApi { } diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTagClientResource.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTagClientResource.java index 1070bbd9c..c08894cca 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTagClientResource.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTagClientResource.java @@ -9,12 +9,11 @@ package org.eclipse.hawkbit.mgmt.client.resource; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTagRestApi; -import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the DistributionSetTag resource of the management API. */ -@FeignClient(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING) +@FeignClient(name = "MgmtDistributionSetTagClient", url = "${hawkbit.url:localhost:8080}") public interface MgmtDistributionSetTagClientResource extends MgmtDistributionSetTagRestApi { } diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTypeClientResource.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTypeClientResource.java index 451c53942..d7cb509d8 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTypeClientResource.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTypeClientResource.java @@ -9,14 +9,13 @@ package org.eclipse.hawkbit.mgmt.client.resource; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTypeRestApi; -import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the DistributionSetType resource of the management API. * */ -@FeignClient(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_REQUEST_MAPPING) +@FeignClient(name = "MgmtDistributionSetTypeClient", url = "${hawkbit.url:localhost:8080}") public interface MgmtDistributionSetTypeClientResource extends MgmtDistributionSetTypeRestApi { } diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadArtifactClientResource.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadArtifactClientResource.java index 5c93edce5..831b17a5f 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadArtifactClientResource.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadArtifactClientResource.java @@ -9,14 +9,13 @@ package org.eclipse.hawkbit.mgmt.client.resource; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDownloadArtifactRestApi; -import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.springframework.cloud.netflix.feign.FeignClient; /** * A feign-client interface declaration which allows to build a feign-client * stub. */ -@FeignClient(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING) +@FeignClient(name = "MgmtDownloadArtifactClient", url = "${hawkbit.url:localhost:8080}") public interface MgmtDownloadArtifactClientResource extends MgmtDownloadArtifactRestApi { } diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadClientResource.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadClientResource.java index 330d3908f..0a4d1f500 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadClientResource.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadClientResource.java @@ -9,12 +9,11 @@ package org.eclipse.hawkbit.mgmt.client.resource; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDownloadRestApi; -import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.springframework.cloud.netflix.feign.FeignClient; /** * */ -@FeignClient(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE) +@FeignClient(name = "MgmtDownloadClient", url = "${hawkbit.url:localhost:8080}") public interface MgmtDownloadClientResource extends MgmtDownloadRestApi { } diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtRolloutClientResource.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtRolloutClientResource.java index acc00d6fe..0d6856d98 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtRolloutClientResource.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtRolloutClientResource.java @@ -8,13 +8,12 @@ */ package org.eclipse.hawkbit.mgmt.client.resource; -import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRolloutRestApi; import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the Rollout resource of the management API. */ -@FeignClient(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.ROLLOUT_V1_REQUEST_MAPPING) +@FeignClient(name = "MgmtRolloutClient", url = "${hawkbit.url:localhost:8080}") public interface MgmtRolloutClientResource extends MgmtRolloutRestApi { } diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java index 7a2267e24..c5d019e78 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java @@ -9,7 +9,6 @@ package org.eclipse.hawkbit.mgmt.client.resource; import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifact; -import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleRestApi; import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.http.ResponseEntity; @@ -24,7 +23,7 @@ import feign.Param; /** * Client binding for the SoftwareModule resource of the management API. */ -@FeignClient(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING) +@FeignClient(name = "MgmtSoftwareModuleClient", url = "${hawkbit.url:localhost:8080}") public interface MgmtSoftwareModuleClientResource extends MgmtSoftwareModuleRestApi { @Override diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleTypeClientResource.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleTypeClientResource.java index 603e82f10..582ec1821 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleTypeClientResource.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleTypeClientResource.java @@ -8,13 +8,12 @@ */ package org.eclipse.hawkbit.mgmt.client.resource; -import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleTypeRestApi; import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the SoftwareModuleType resource of the management API. */ -@FeignClient(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.SOFTWAREMODULETYPE_V1_REQUEST_MAPPING) +@FeignClient(name = "MgmtSoftwareModuleTypeClient", url = "${hawkbit.url:localhost:8080}") public interface MgmtSoftwareModuleTypeClientResource extends MgmtSoftwareModuleTypeRestApi { } diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSystemClientResource.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSystemClientResource.java index e1bbd909c..9486bc560 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSystemClientResource.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSystemClientResource.java @@ -8,7 +8,6 @@ */ package org.eclipse.hawkbit.mgmt.client.resource; -import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtSystemRestApi; import org.springframework.cloud.netflix.feign.FeignClient; @@ -16,6 +15,6 @@ import org.springframework.cloud.netflix.feign.FeignClient; * Client binding for the {@link MgmtSystemRestApi}. * */ -@FeignClient(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING) +@FeignClient(name = "MgmtSystemClient", url = "${hawkbit.url:localhost:8080}") public interface MgmtSystemClientResource extends MgmtSystemRestApi { } diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSystemManagementClientResource.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSystemManagementClientResource.java index 802194fe8..8cb293ea7 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSystemManagementClientResource.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSystemManagementClientResource.java @@ -8,7 +8,6 @@ */ package org.eclipse.hawkbit.mgmt.client.resource; -import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtSystemManagementRestApi; import org.springframework.cloud.netflix.feign.FeignClient; @@ -16,7 +15,7 @@ import org.springframework.cloud.netflix.feign.FeignClient; * Client binding for the {@link MgmtSystemManagementRestApi}. * */ -@FeignClient(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.SYSTEM_ADMIN_MAPPING) +@FeignClient(name = "MgmtSystemManagementClient", url = "${hawkbit.url:localhost:8080}") public interface MgmtSystemManagementClientResource extends MgmtSystemManagementRestApi { } diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetClientResource.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetClientResource.java index c0a0193af..a64509340 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetClientResource.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetClientResource.java @@ -8,13 +8,12 @@ */ package org.eclipse.hawkbit.mgmt.client.resource; -import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetRestApi; import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the Target resource of the management API. */ -@FeignClient(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.TARGET_V1_REQUEST_MAPPING) +@FeignClient(name = "MgmtTargetClient", url = "${hawkbit.url:localhost:8080}") public interface MgmtTargetClientResource extends MgmtTargetRestApi { } diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetTagClientResource.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetTagClientResource.java index 3f9264337..b1d264e78 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetTagClientResource.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetTagClientResource.java @@ -8,13 +8,12 @@ */ package org.eclipse.hawkbit.mgmt.client.resource; -import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetTagRestApi; import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the TargetTag resource of the management API. */ -@FeignClient(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING) +@FeignClient(name = "MgmtTargetTagClient", url = "${hawkbit.url:localhost:8080}") public interface MgmtTargetTagClientResource extends MgmtTargetTagRestApi { } diff --git a/examples/hawkbit-example-mgmt-simulator/pom.xml b/examples/hawkbit-example-mgmt-simulator/pom.xml index 469290dfc..dcf1bc735 100644 --- a/examples/hawkbit-example-mgmt-simulator/pom.xml +++ b/examples/hawkbit-example-mgmt-simulator/pom.xml @@ -42,40 +42,12 @@ - - - - org.springframework.cloud - spring-cloud-netflix - 1.0.7.RELEASE - pom - import - - - - org.eclipse.hawkbit hawkbit-example-mgmt-feign-client ${project.version} - - com.netflix.feign - feign-core - - - com.netflix.feign - feign-jackson - - - com.fasterxml.jackson.core - jackson-databind - - - hibernate-validator - org.hibernate - org.springframework.boot spring-boot-starter diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java index ac65455b5..aae1bf8da 100644 --- a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java +++ b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java @@ -9,37 +9,26 @@ package org.eclipse.hawkbit.mgmt.client; import org.eclipse.hawkbit.feign.core.client.FeignClientConfiguration; -import org.eclipse.hawkbit.feign.core.client.IgnoreMultipleConsumersProducersSpringMvcContract; import org.eclipse.hawkbit.mgmt.client.resource.MgmtDistributionSetClientResource; import org.eclipse.hawkbit.mgmt.client.resource.MgmtRolloutClientResource; import org.eclipse.hawkbit.mgmt.client.resource.MgmtSoftwareModuleClientResource; import org.eclipse.hawkbit.mgmt.client.resource.MgmtTargetClientResource; import org.eclipse.hawkbit.mgmt.client.scenarios.ConfigurableScenario; import org.eclipse.hawkbit.mgmt.client.scenarios.CreateStartedRolloutExample; -import org.eclipse.hawkbit.mgmt.client.scenarios.upload.FeignMultipartEncoder; -import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.Banner.Mode; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.netflix.feign.EnableFeignClients; -import org.springframework.cloud.netflix.feign.support.ResponseEntityDecoder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import org.springframework.hateoas.hal.Jackson2HalModule; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; - -import feign.Feign; import feign.Logger; import feign.auth.BasicAuthRequestInterceptor; -import feign.jackson.JacksonDecoder; -import feign.slf4j.Slf4jLogger; @SpringBootApplication @EnableFeignClients("org.eclipse.hawkbit.mgmt.client.resource") @@ -49,9 +38,6 @@ import feign.slf4j.Slf4jLogger; @Import(FeignClientConfiguration.class) public class Application implements CommandLineRunner { - @Autowired - private ClientConfigurationProperties configuration; - @Autowired private ConfigurableScenario configuredScenario; @@ -59,7 +45,7 @@ public class Application implements CommandLineRunner { private CreateStartedRolloutExample gettingStartedRolloutScenario; public static void main(final String[] args) { - new SpringApplicationBuilder().showBanner(false).sources(Application.class).run(args); + new SpringApplicationBuilder().bannerMode(Mode.OFF).sources(Application.class).run(args); } @Override @@ -74,18 +60,17 @@ public class Application implements CommandLineRunner { } @Bean - public BasicAuthRequestInterceptor basicAuthRequestInterceptor() { + public BasicAuthRequestInterceptor basicAuthRequestInterceptor(final ClientConfigurationProperties configuration) { return new BasicAuthRequestInterceptor(configuration.getUsername(), configuration.getPassword()); } @Bean public ConfigurableScenario configurableScenario(final MgmtDistributionSetClientResource distributionSetResource, - @Qualifier("mgmtSoftwareModuleClientResource") final MgmtSoftwareModuleClientResource softwareModuleResource, - @Qualifier("uploadSoftwareModule") final MgmtSoftwareModuleClientResource uploadSoftwareModule, + final MgmtSoftwareModuleClientResource softwareModuleResource, final MgmtTargetClientResource targetResource, final MgmtRolloutClientResource rolloutResource, final ClientConfigurationProperties clientConfigurationProperties) { - return new ConfigurableScenario(distributionSetResource, softwareModuleResource, uploadSoftwareModule, - targetResource, rolloutResource, clientConfigurationProperties); + return new ConfigurableScenario(distributionSetResource, softwareModuleResource, targetResource, + rolloutResource, clientConfigurationProperties); } @Bean @@ -98,21 +83,6 @@ public class Application implements CommandLineRunner { return Logger.Level.FULL; } - @Bean - public MgmtSoftwareModuleClientResource uploadSoftwareModule() { - final ObjectMapper mapper = new ObjectMapper() - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - .registerModule(new Jackson2HalModule()); - - return Feign.builder().contract(new IgnoreMultipleConsumersProducersSpringMvcContract()) - .requestInterceptor( - new BasicAuthRequestInterceptor(configuration.getUsername(), configuration.getPassword())) - .logger(new Slf4jLogger()).encoder(new FeignMultipartEncoder()) - .decoder(new ResponseEntityDecoder(new JacksonDecoder(mapper))) - .target(MgmtSoftwareModuleClientResource.class, - configuration.getUrl() + MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING); - } - private static boolean containsArg(final String containsArg, final String... args) { for (final String arg : args) { if (arg.equalsIgnoreCase(containsArg)) { diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/ConfigurableScenario.java b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/ConfigurableScenario.java index a09459e07..5eae96931 100644 --- a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/ConfigurableScenario.java +++ b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/ConfigurableScenario.java @@ -23,7 +23,6 @@ import org.eclipse.hawkbit.mgmt.client.resource.builder.RolloutBuilder; import org.eclipse.hawkbit.mgmt.client.resource.builder.SoftwareModuleAssigmentBuilder; import org.eclipse.hawkbit.mgmt.client.resource.builder.SoftwareModuleBuilder; import org.eclipse.hawkbit.mgmt.client.resource.builder.TargetBuilder; -import org.eclipse.hawkbit.mgmt.client.scenarios.upload.ArtifactFile; import org.eclipse.hawkbit.mgmt.json.model.PagedList; import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSet; import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutResponseBody; @@ -31,7 +30,6 @@ import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule; import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTarget; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Qualifier; /** * @@ -50,8 +48,6 @@ public class ConfigurableScenario { private final MgmtSoftwareModuleClientResource softwareModuleResource; - private final MgmtSoftwareModuleClientResource uploadSoftwareModule; - private final MgmtTargetClientResource targetResource; private final MgmtRolloutClientResource rolloutResource; @@ -59,13 +55,11 @@ public class ConfigurableScenario { private final ClientConfigurationProperties clientConfigurationProperties; public ConfigurableScenario(final MgmtDistributionSetClientResource distributionSetResource, - @Qualifier("mgmtSoftwareModuleClientResource") final MgmtSoftwareModuleClientResource softwareModuleResource, - @Qualifier("uploadSoftwareModule") final MgmtSoftwareModuleClientResource uploadSoftwareModule, + final MgmtSoftwareModuleClientResource softwareModuleResource, final MgmtTargetClientResource targetResource, final MgmtRolloutClientResource rolloutResource, final ClientConfigurationProperties clientConfigurationProperties) { this.distributionSetResource = distributionSetResource; this.softwareModuleResource = softwareModuleResource; - this.uploadSoftwareModule = uploadSoftwareModule; this.targetResource = targetResource; this.rolloutResource = rolloutResource; this.clientConfigurationProperties = clientConfigurationProperties; @@ -191,13 +185,6 @@ public class ConfigurableScenario { .type("application").buildAsList(scenario.getAppModulesPerDistributionSet())) .getBody()); - for (int x = 0; x < scenario.getArtifactsPerSM(); x++) { - modules.forEach(module -> { - final ArtifactFile file = new ArtifactFile("dummyfile.dummy", null, "multipart/form-data", artifact); - uploadSoftwareModule.uploadArtifact(module.getModuleId(), file, null, null, null); - }); - } - return modules; } diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java index b450bbde2..913d2eaa4 100644 --- a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java +++ b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java @@ -28,7 +28,6 @@ import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutResponseBody; import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule; import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleType; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; /** * Example for creating and starting a Rollout. @@ -46,7 +45,6 @@ public class CreateStartedRolloutExample { private MgmtDistributionSetClientResource distributionSetResource; @Autowired - @Qualifier("mgmtSoftwareModuleClientResource") private MgmtSoftwareModuleClientResource softwareModuleResource; @Autowired diff --git a/examples/pom.xml b/examples/pom.xml index fb8ef3fc3..85dd70651 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -8,7 +8,8 @@ http://www.eclipse.org/legal/epl-v10.html --> - + 4.0.0 @@ -28,33 +29,21 @@ hawkbit-example-ddi-feign-client hawkbit-example-mgmt-feign-client hawkbit-example-mgmt-simulator - - - - - 8.14.2 - + - com.netflix.feign - feign-core - - - ${feign.version} + org.springframework.cloud + spring-cloud-dependencies + Brixton.SR5 + pom + import com.netflix.feign feign-jackson - - - ${feign.version} - - - com.netflix.feign - feign-slf4j - ${feign.version} + 8.16.2 diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiRootControllerRestApi.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiRootControllerRestApi.java index 67436c3ca..f4c80c778 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiRootControllerRestApi.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiRootControllerRestApi.java @@ -25,7 +25,6 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @@ -150,7 +149,7 @@ public interface DdiRootControllerRestApi { */ @RequestMapping(value = "/{targetid}/" + DdiRestConstants.DEPLOYMENT_BASE_ACTION + "/{actionId}/" + DdiRestConstants.FEEDBACK, method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) - ResponseEntity postBasedeploymentActionFeedback(@Valid @RequestBody final DdiActionFeedback feedback, + ResponseEntity postBasedeploymentActionFeedback(@Valid final DdiActionFeedback feedback, @PathVariable("targetid") final String targetid, @PathVariable("actionId") @NotEmpty final Long actionId); /** @@ -167,7 +166,7 @@ public interface DdiRootControllerRestApi { */ @RequestMapping(value = "/{targetid}/" + DdiRestConstants.CONFIG_DATA_ACTION, method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE) - ResponseEntity putConfigData(@Valid @RequestBody final DdiConfigData configData, + ResponseEntity putConfigData(@Valid final DdiConfigData configData, @PathVariable("targetid") final String targetid); /** @@ -205,7 +204,7 @@ public interface DdiRootControllerRestApi { @RequestMapping(value = "/{targetid}/" + DdiRestConstants.CANCEL_ACTION + "/{actionId}/" + DdiRestConstants.FEEDBACK, method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) - ResponseEntity postCancelActionFeedback(@Valid @RequestBody final DdiActionFeedback feedback, + ResponseEntity postCancelActionFeedback(@Valid final DdiActionFeedback feedback, @PathVariable("targetid") @NotEmpty final String targetid, @PathVariable("actionId") @NotEmpty final Long actionId); diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetRestApi.java index c61c9ecd3..0a28c2226 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetRestApi.java @@ -23,7 +23,6 @@ import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTarget; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @@ -55,8 +54,8 @@ public interface MgmtDistributionSetRestApi { */ @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) ResponseEntity> getDistributionSets( - @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, + @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET) final int pagingOffsetParam, + @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT) final int pagingLimitParam, @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam); @@ -88,7 +87,7 @@ public interface MgmtDistributionSetRestApi { @RequestMapping(method = RequestMethod.POST, consumes = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) ResponseEntity> createDistributionSets( - @RequestBody final List sets); + final List sets); /** * Handles the DELETE request for a single DistributionSet . @@ -116,7 +115,7 @@ public interface MgmtDistributionSetRestApi { MediaType.APPLICATION_JSON_VALUE }, produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) ResponseEntity updateDistributionSet( @PathVariable("distributionSetId") final Long distributionSetId, - @RequestBody final MgmtDistributionSetRequestBodyPut toUpdate); + final MgmtDistributionSetRequestBodyPut toUpdate); /** * Handles the GET request of retrieving assigned targets to a specific @@ -198,7 +197,7 @@ public interface MgmtDistributionSetRestApi { MediaType.APPLICATION_JSON_VALUE }, produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) ResponseEntity createAssignedTarget( @PathVariable("distributionSetId") final Long distributionSetId, - @RequestBody final List targetIds); + final List targetIds); /** * Gets a paged list of meta data for a distribution set. @@ -256,7 +255,7 @@ public interface MgmtDistributionSetRestApi { @RequestMapping(method = RequestMethod.PUT, value = "/{distributionSetId}/metadata/{metadataKey}", produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) ResponseEntity updateMetadata(@PathVariable("distributionSetId") final Long distributionSetId, - @PathVariable("metadataKey") final String metadataKey, @RequestBody final MgmtMetadata metadata); + @PathVariable("metadataKey") final String metadataKey, final MgmtMetadata metadata); /** * Deletes a single meta data entry from the distribution set. @@ -285,7 +284,7 @@ public interface MgmtDistributionSetRestApi { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }, produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) ResponseEntity> createMetadata(@PathVariable("distributionSetId") final Long distributionSetId, - @RequestBody final List metadataRest); + final List metadataRest); /** * Assigns a list of software modules to a distribution set. @@ -301,7 +300,7 @@ public interface MgmtDistributionSetRestApi { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) ResponseEntity assignSoftwareModules(@PathVariable("distributionSetId") final Long distributionSetId, - @RequestBody final List softwareModuleIDs); + final List softwareModuleIDs); /** * Deletes the assignment of the software module form the distribution set. diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTagRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTagRestApi.java index 5a836ef55..2342cff6e 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTagRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTagRestApi.java @@ -19,7 +19,6 @@ import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTagRequestBodyPut; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @@ -82,7 +81,7 @@ public interface MgmtDistributionSetTagRestApi { */ @RequestMapping(method = RequestMethod.POST, consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity> createDistributionSetTags(@RequestBody final List tags); + ResponseEntity> createDistributionSetTags(final List tags); /** * @@ -99,7 +98,7 @@ public interface MgmtDistributionSetTagRestApi { MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) ResponseEntity updateDistributionSetTag( @PathVariable("distributionsetTagId") final Long distributionsetTagId, - @RequestBody final MgmtTagRequestBodyPut restDSTagRest); + final MgmtTagRequestBodyPut restDSTagRest); /** * Handles the DELETE request for a single distribution set tag. @@ -142,7 +141,7 @@ public interface MgmtDistributionSetTagRestApi { + "/toggleTagAssignment") ResponseEntity toggleTagAssignment( @PathVariable("distributionsetTagId") final Long distributionsetTagId, - @RequestBody final List assignedDSRequestBodies); + final List assignedDSRequestBodies); /** * Handles the POST request to assign distribution sets to the given tag id. @@ -157,7 +156,7 @@ public interface MgmtDistributionSetTagRestApi { @RequestMapping(method = RequestMethod.POST, value = MgmtRestConstants.DISTRIBUTIONSET_REQUEST_MAPPING) ResponseEntity> assignDistributionSets( @PathVariable("distributionsetTagId") final Long distributionsetTagId, - @RequestBody final List assignedDSRequestBodies); + final List assignedDSRequestBodies); /** * Handles the DELETE request to unassign all distribution set from the diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTypeRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTypeRestApi.java index 25468739e..aeddbe1e7 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTypeRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTypeRestApi.java @@ -19,7 +19,6 @@ import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModule import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @@ -99,7 +98,7 @@ public interface MgmtDistributionSetTypeRestApi { MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) ResponseEntity updateDistributionSetType( @PathVariable("distributionSetTypeId") final Long distributionSetTypeId, - @RequestBody final MgmtDistributionSetTypeRequestBodyPut restDistributionSetType); + final MgmtDistributionSetTypeRequestBodyPut restDistributionSetType); /** * Handles the POST request of creating new DistributionSetTypes. The @@ -115,7 +114,7 @@ public interface MgmtDistributionSetTypeRestApi { @RequestMapping(method = RequestMethod.POST, consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) ResponseEntity> createDistributionSetTypes( - @RequestBody final List distributionSetTypes); + final List distributionSetTypes); /** * Handles the GET request of retrieving the list of mandatory software @@ -229,7 +228,7 @@ public interface MgmtDistributionSetTypeRestApi { MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) ResponseEntity addMandatoryModule(@PathVariable("distributionSetTypeId") final Long distributionSetTypeId, - @RequestBody final MgmtId smtId); + final MgmtId smtId); /** * Handles the POST request for adding an optional software module type to a @@ -247,6 +246,6 @@ public interface MgmtDistributionSetTypeRestApi { MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) ResponseEntity addOptionalModule(@PathVariable("distributionSetTypeId") final Long distributionSetTypeId, - @RequestBody final MgmtId smtId); + final MgmtId smtId); } diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtRolloutRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtRolloutRestApi.java index 7f93e2ce8..905bbad88 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtRolloutRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtRolloutRestApi.java @@ -16,7 +16,6 @@ import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTarget; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @@ -77,7 +76,7 @@ public interface MgmtRolloutRestApi { */ @RequestMapping(method = RequestMethod.POST, consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity create(@RequestBody final MgmtRolloutRestRequestBody rolloutRequestBody); + ResponseEntity create(final MgmtRolloutRestRequestBody rolloutRequestBody); /** * Handles the POST request for starting a rollout. diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleRestApi.java index cdd63ee26..cd40ffc0b 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleRestApi.java @@ -19,7 +19,6 @@ import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModuleRequ import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @@ -162,7 +161,7 @@ public interface MgmtSoftwareModuleRestApi { @RequestMapping(method = RequestMethod.POST, consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) ResponseEntity> createSoftwareModules( - @RequestBody final List softwareModules); + final List softwareModules); /** * Handles the PUT request of updating a software module. @@ -177,7 +176,7 @@ public interface MgmtSoftwareModuleRestApi { MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) ResponseEntity updateSoftwareModule( @PathVariable("softwareModuleId") final Long softwareModuleId, - @RequestBody final MgmtSoftwareModuleRequestBodyPut restSoftwareModule); + final MgmtSoftwareModuleRequestBodyPut restSoftwareModule); /** * Handles the DELETE request for a single software module. @@ -246,7 +245,7 @@ public interface MgmtSoftwareModuleRestApi { @RequestMapping(method = RequestMethod.PUT, value = "/{softwareModuleId}/metadata/{metadataKey}", produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) ResponseEntity updateMetadata(@PathVariable("softwareModuleId") final Long softwareModuleId, - @PathVariable("metadataKey") final String metadataKey, @RequestBody final MgmtMetadata metadata); + @PathVariable("metadataKey") final String metadataKey, final MgmtMetadata metadata); /** * Deletes a single meta data entry from the software module. @@ -275,6 +274,6 @@ public interface MgmtSoftwareModuleRestApi { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }, produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) ResponseEntity> createMetadata(@PathVariable("softwareModuleId") final Long softwareModuleId, - @RequestBody final List metadataRest); + final List metadataRest); } diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleTypeRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleTypeRestApi.java index 3fe32d9ad..4fd5d2c38 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleTypeRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleTypeRestApi.java @@ -17,7 +17,6 @@ import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModule import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @@ -94,7 +93,7 @@ public interface MgmtSoftwareModuleTypeRestApi { MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) ResponseEntity updateSoftwareModuleType( @PathVariable("softwareModuleTypeId") final Long softwareModuleTypeId, - @RequestBody final MgmtSoftwareModuleTypeRequestBodyPut restSoftwareModuleType); + final MgmtSoftwareModuleTypeRequestBodyPut restSoftwareModuleType); /** * Handles the POST request of creating new SoftwareModuleTypes. The request @@ -110,6 +109,6 @@ public interface MgmtSoftwareModuleTypeRestApi { @RequestMapping(method = RequestMethod.POST, consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) ResponseEntity> createSoftwareModuleTypes( - @RequestBody final List softwareModuleTypes); + final List softwareModuleTypes); } diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSystemRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSystemRestApi.java index d120759b2..f7da862ee 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSystemRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSystemRestApi.java @@ -16,7 +16,6 @@ import org.springframework.hateoas.ResourceSupport; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -83,6 +82,6 @@ public interface MgmtSystemRestApi { MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) ResponseEntity updateConfigurationValue( @PathVariable("keyName") final String keyName, - @RequestBody final MgmtSystemTenantConfigurationValueRequest configurationValueRest); + final MgmtSystemTenantConfigurationValueRequest configurationValueRest); } diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetRestApi.java index 97a0eae5c..3ffdaa534 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetRestApi.java @@ -21,7 +21,6 @@ import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTargetRequestBody; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @@ -84,7 +83,7 @@ public interface MgmtTargetRestApi { */ @RequestMapping(method = RequestMethod.POST, consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity> createTargets(@RequestBody final List targets); + ResponseEntity> createTargets(final List targets); /** * Handles the PUT request of updating a target. The ID is within the URL @@ -103,7 +102,7 @@ public interface MgmtTargetRestApi { @RequestMapping(method = RequestMethod.PUT, value = "/{controllerId}", consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) ResponseEntity updateTarget(@PathVariable("controllerId") final String controllerId, - @RequestBody final MgmtTargetRequestBody targetRest); + final MgmtTargetRequestBody targetRest); /** * Handles the DELETE request of deleting a target. @@ -247,7 +246,7 @@ public interface MgmtTargetRestApi { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) ResponseEntity postAssignedDistributionSet(@PathVariable("controllerId") final String controllerId, - @RequestBody final MgmtDistributionSetAssigment dsId); + final MgmtDistributionSetAssigment dsId); /** * Handles the GET request of retrieving the installed distribution set of diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetTagRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetTagRestApi.java index e568e7377..eb2b92af4 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetTagRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetTagRestApi.java @@ -19,7 +19,6 @@ import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTarget; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @@ -81,7 +80,7 @@ public interface MgmtTargetTagRestApi { */ @RequestMapping(method = RequestMethod.POST, consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity> createTargetTags(@RequestBody final List tags); + ResponseEntity> createTargetTags(final List tags); /** * @@ -96,7 +95,7 @@ public interface MgmtTargetTagRestApi { @RequestMapping(method = RequestMethod.PUT, value = "/{targetTagId}", consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) ResponseEntity updateTagretTag(@PathVariable("targetTagId") final Long targetTagId, - @RequestBody final MgmtTagRequestBodyPut restTargetTagRest); + final MgmtTagRequestBodyPut restTargetTagRest); /** * Handles the DELETE request for a single target tag. @@ -136,7 +135,7 @@ public interface MgmtTargetTagRestApi { + "/toggleTagAssignment") ResponseEntity toggleTagAssignment( @PathVariable("targetTagId") final Long targetTagId, - @RequestBody final List assignedTargetRequestBodies); + final List assignedTargetRequestBodies); /** * Handles the POST request to assign targets to the given tag id. @@ -150,7 +149,7 @@ public interface MgmtTargetTagRestApi { */ @RequestMapping(method = RequestMethod.POST, value = MgmtRestConstants.TARGET_TAG_TAGERTS_REQUEST_MAPPING) ResponseEntity> assignTargets(@PathVariable("targetTagId") final Long targetTagId, - @RequestBody final List assignedTargetRequestBodies); + final List assignedTargetRequestBodies); /** * Handles the DELETE request to unassign all targets from the given tag id. From 525ca8d72c305cd5b22f888d8dfc497016466aec Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Wed, 7 Sep 2016 11:58:00 +0200 Subject: [PATCH 03/10] Run only in case of failure Signed-off-by: kaizimmerm --- .../IgnoreMultipleConsumersProducersSpringMvcContract.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java b/examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java index f7cf14026..2706af4a3 100644 --- a/examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java +++ b/examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java @@ -40,7 +40,7 @@ public class IgnoreMultipleConsumersProducersSpringMvcContract extends SpringMvc // multiple consumers and produces, see // https://github.com/spring-cloud/spring-cloud-netflix/issues/808 LOGGER.trace(e.getMessage(), e); + data.indexToExpander(new LinkedHashMap()); } - data.indexToExpander(new LinkedHashMap()); } } From 47e3417f558cbbf74d7f11683388b7cd41f1fff5 Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Wed, 7 Sep 2016 12:17:50 +0200 Subject: [PATCH 04/10] Improved method naming Signed-off-by: kaizimmerm --- .../eclipse/hawkbit/ddi/rest/resource/DdiRootController.java | 2 +- .../org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java | 2 +- .../eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java | 4 ++-- .../org/eclipse/hawkbit/repository/ControllerManagement.java | 4 ++-- .../hawkbit/repository/jpa/JpaControllerManagement.java | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootController.java index f1ce7e812..9456cd63e 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootController.java @@ -130,7 +130,7 @@ public class DdiRootController implements DdiRootControllerRestApi { } return new ResponseEntity<>( - DataConversionHelper.fromTarget(target, controllerManagement.findOldestActionByTargetAndActive(target), + DataConversionHelper.fromTarget(target, controllerManagement.findOldestActiveActionByTarget(target), controllerManagement.getPollingTime(), tenantAware), HttpStatus.OK); } diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java index a8723a63a..ef4f3387f 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java @@ -346,7 +346,7 @@ public class AmqpMessageHandlerService extends BaseAmqpService { } private void lookIfUpdateAvailable(final Target target) { - final Optional action = controllerManagement.findOldestActionByTargetAndActive(target); + final Optional action = controllerManagement.findOldestActiveActionByTarget(target); if (!action.isPresent()) { return; } diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java index 5937d8126..f8dd4f645 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java @@ -156,7 +156,7 @@ public class AmqpMessageHandlerServiceTest { final ArgumentCaptor uriCaptor = ArgumentCaptor.forClass(URI.class); when(controllerManagementMock.findOrRegisterTargetIfItDoesNotexist(targetIdCaptor.capture(), uriCaptor.capture())).thenReturn(null); - when(controllerManagementMock.findOldestActionByTargetAndActive(Matchers.any())).thenReturn(Optional.empty()); + when(controllerManagementMock.findOldestActiveActionByTarget(Matchers.any())).thenReturn(Optional.empty()); amqpMessageHandlerService.onMessage(message, MessageType.THING_CREATED.name(), TENANT, "vHost"); @@ -364,7 +364,7 @@ public class AmqpMessageHandlerServiceTest { when(controllerManagementMock.addUpdateActionStatus(Matchers.any())).thenReturn(action); when(entityFactoryMock.generateActionStatus()).thenReturn(new JpaActionStatus()); // for the test the same action can be used - when(controllerManagementMock.findOldestActionByTargetAndActive(Matchers.any())) + when(controllerManagementMock.findOldestActiveActionByTarget(Matchers.any())) .thenReturn(Optional.of(action)); final List softwareModuleList = createSoftwareModuleList(); diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java index 14780cee6..1cc752ea7 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java @@ -112,7 +112,7 @@ public interface ControllerManagement { * @return a list of actions assigned to given target which are active */ @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - List findActionByTargetAndActive(@NotNull Target target); + List findActiveActionByTarget(@NotNull Target target); /** * Retrieves oldest {@link Action} that is active and assigned to a @@ -123,7 +123,7 @@ public interface ControllerManagement { * @return a list of actions assigned to given target which are active */ @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - Optional findOldestActionByTargetAndActive(@NotNull Target target); + Optional findOldestActiveActionByTarget(@NotNull Target target); /** * Get the {@link Action} entity for given actionId with all lazy diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java index 7d02b3bd8..f38eac00f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java @@ -157,12 +157,12 @@ public class JpaControllerManagement implements ControllerManagement { } @Override - public List findActionByTargetAndActive(final Target target) { + public List findActiveActionByTarget(final Target target) { return actionRepository.findByTargetAndActiveOrderByIdAsc((JpaTarget) target, true); } @Override - public Optional findOldestActionByTargetAndActive(final Target target) { + public Optional findOldestActiveActionByTarget(final Target target) { return actionRepository.findFirstByTargetAndActiveOrderByIdAsc((JpaTarget) target, true); } From d51497669a2585f6f57b691696b14cdf7a14eba7 Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Wed, 7 Sep 2016 13:37:26 +0200 Subject: [PATCH 05/10] Removed dead code Signed-off-by: kaizimmerm --- .../scenarios/ConfigurableScenario.java | 22 ++----------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/ConfigurableScenario.java b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/ConfigurableScenario.java index 5eae96931..1b461b178 100644 --- a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/ConfigurableScenario.java +++ b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/ConfigurableScenario.java @@ -9,7 +9,6 @@ package org.eclipse.hawkbit.mgmt.client.scenarios; import java.util.List; -import java.util.Random; import java.util.concurrent.TimeUnit; import org.eclipse.hawkbit.mgmt.client.ClientConfigurationProperties; @@ -159,12 +158,11 @@ public class ConfigurableScenario { private void createDistributionSets(final Scenario scenario) { LOGGER.info("Creating {} distribution sets", scenario.getDistributionSets()); - final byte[] artifact = generateArtifact(scenario); distributionSetResource.createDistributionSets(new DistributionSetBuilder().name(scenario.getDsName()) .type("os_app").version("1.0.").buildAsList(scenario.getDistributionSets())).getBody() .forEach(dsSet -> { - final List modules = addModules(scenario, dsSet, artifact); + final List modules = addModules(scenario, dsSet); final SoftwareModuleAssigmentBuilder assign = new SoftwareModuleAssigmentBuilder(); modules.forEach(module -> assign.id(module.getModuleId())); @@ -174,8 +172,7 @@ public class ConfigurableScenario { LOGGER.info("Creating {} distribution sets -> Done", scenario.getDistributionSets()); } - private List addModules(final Scenario scenario, final MgmtDistributionSet dsSet, - final byte[] artifact) { + private List addModules(final Scenario scenario, final MgmtDistributionSet dsSet) { final List modules = softwareModuleResource .createSoftwareModules(new SoftwareModuleBuilder().name(scenario.getSmFwName() + "-os") .version(dsSet.getVersion()).type("os").build()) @@ -188,21 +185,6 @@ public class ConfigurableScenario { return modules; } - private static byte[] generateArtifact(final Scenario scenario) { - - // Exception squid:S2245 - not used for cryptographic function - @SuppressWarnings("squid:S2245") - final Random random = new Random(); - - // create byte array - final byte[] nbyte = new byte[parseSize(scenario.getArtifactSize())]; - - // put the next byte in the array - random.nextBytes(nbyte); - - return nbyte; - } - private void createTargets(final Scenario scenario) { LOGGER.info("Creating {} targets", scenario.getTargets()); From 9d92e9ddc609566e4186252b778753c7394aaa62 Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Wed, 7 Sep 2016 17:43:41 +0200 Subject: [PATCH 06/10] Added missing spring cloud dependencies Signed-off-by: kaizimmerm --- examples/hawkbit-example-core-feign-client/pom.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/examples/hawkbit-example-core-feign-client/pom.xml b/examples/hawkbit-example-core-feign-client/pom.xml index 4e881d5ac..c41f7953d 100644 --- a/examples/hawkbit-example-core-feign-client/pom.xml +++ b/examples/hawkbit-example-core-feign-client/pom.xml @@ -32,6 +32,14 @@ org.springframework.cloud spring-cloud-netflix-core + + + org.springframework.cloud + spring-cloud-commons + + + org.springframework.cloud + spring-cloud-context org.slf4j From 0986b9985bede9b3368587d905076efdb425ea57 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Mon, 12 Sep 2016 09:27:43 +0200 Subject: [PATCH 07/10] don't requeue too many status entries ex, fix typo of ex Signed-off-by: Michael Hirsch --- .../eclipse/hawkbit/amqp/AmqpMessageHandlerService.java | 8 ++++---- .../eclipse/hawkbit/repository/ControllerManagement.java | 4 ++-- ...sException.java => TooManyStatusEntriesException.java} | 8 ++++---- .../hawkbit/repository/jpa/JpaControllerManagement.java | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/{ToManyStatusEntriesException.java => TooManyStatusEntriesException.java} (81%) diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java index dd152bd5a..1b607f852 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java @@ -41,7 +41,7 @@ import org.eclipse.hawkbit.repository.RepositoryConstants; import org.eclipse.hawkbit.repository.eventbus.event.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.exception.TenantNotExistException; -import org.eclipse.hawkbit.repository.exception.ToManyStatusEntriesException; +import org.eclipse.hawkbit.repository.exception.TooManyStatusEntriesException; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; @@ -155,7 +155,7 @@ public class AmqpMessageHandlerService extends BaseAmqpService { return handleAuthentifiactionMessage(message); } catch (final IllegalArgumentException ex) { throw new AmqpRejectAndDontRequeueException("Invalid message!", ex); - } catch (final TenantNotExistException | ToManyStatusEntriesException e) { + } catch (final TenantNotExistException | TooManyStatusEntriesException e) { throw new AmqpRejectAndDontRequeueException(e); } finally { SecurityContextHolder.setContext(oldContext); @@ -196,8 +196,8 @@ public class AmqpMessageHandlerService extends BaseAmqpService { } } catch (final IllegalArgumentException ex) { throw new AmqpRejectAndDontRequeueException("Invalid message!", ex); - } catch (final TenantNotExistException teex) { - throw new AmqpRejectAndDontRequeueException(teex); + } catch (final TenantNotExistException | TooManyStatusEntriesException e) { + throw new AmqpRejectAndDontRequeueException(e); } finally { SecurityContextHolder.setContext(oldContext); } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java index f06621fd4..401004d65 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.repository.eventbus.event.DownloadProgressEvent; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.exception.ToManyAttributeEntriesException; -import org.eclipse.hawkbit.repository.exception.ToManyStatusEntriesException; +import org.eclipse.hawkbit.repository.exception.TooManyStatusEntriesException; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; @@ -95,7 +95,7 @@ public interface ControllerManagement { * * @throws EntityAlreadyExistsException * if a given entity already exists - * @throws ToManyStatusEntriesException + * @throws TooManyStatusEntriesException * if more than the allowed number of status entries are * inserted */ diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ToManyStatusEntriesException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/TooManyStatusEntriesException.java similarity index 81% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ToManyStatusEntriesException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/TooManyStatusEntriesException.java index 7b8f4a1b0..3f3399a88 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ToManyStatusEntriesException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/TooManyStatusEntriesException.java @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.exception.AbstractServerRtException; * * */ -public final class ToManyStatusEntriesException extends AbstractServerRtException { +public final class TooManyStatusEntriesException extends AbstractServerRtException { /** * */ @@ -28,7 +28,7 @@ public final class ToManyStatusEntriesException extends AbstractServerRtExceptio * Creates a new FileUploadFailedException with * {@link SpServerError#SP_REST_BODY_NOT_READABLE} error. */ - public ToManyStatusEntriesException() { + public TooManyStatusEntriesException() { super(SpServerError.SP_ACTION_STATUS_TO_MANY_ENTRIES); } @@ -36,7 +36,7 @@ public final class ToManyStatusEntriesException extends AbstractServerRtExceptio * @param cause * for the exception */ - public ToManyStatusEntriesException(final Throwable cause) { + public TooManyStatusEntriesException(final Throwable cause) { super(SpServerError.SP_ACTION_STATUS_TO_MANY_ENTRIES, cause); } @@ -44,7 +44,7 @@ public final class ToManyStatusEntriesException extends AbstractServerRtExceptio * @param message * of the error */ - public ToManyStatusEntriesException(final String message) { + public TooManyStatusEntriesException(final String message) { super(message, SpServerError.SP_ACTION_STATUS_TO_MANY_ENTRIES); } } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java index 34160aa37..e0b352e99 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java @@ -26,7 +26,7 @@ import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.exception.ToManyAttributeEntriesException; -import org.eclipse.hawkbit.repository.exception.ToManyStatusEntriesException; +import org.eclipse.hawkbit.repository.exception.TooManyStatusEntriesException; import org.eclipse.hawkbit.repository.jpa.cache.CacheWriteNotify; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; @@ -326,7 +326,7 @@ public class JpaControllerManagement implements ControllerManagement { LOG_DOS.error( "Potential denial of service (DOS) attack identfied. More status entries in the system than permitted ({})!", securityProperties.getDos().getMaxStatusEntriesPerAction()); - throw new ToManyStatusEntriesException( + throw new TooManyStatusEntriesException( String.valueOf(securityProperties.getDos().getMaxStatusEntriesPerAction())); } } From 11aea8ea4da70c3130d5e408d476b6e33990ef63 Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Mon, 12 Sep 2016 10:29:07 +0200 Subject: [PATCH 08/10] Added defaults Signed-off-by: kaizimmerm --- .../hawkbit/mgmt/rest/api/MgmtDistributionSetRestApi.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetRestApi.java index 0a28c2226..d3439adc6 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetRestApi.java @@ -54,8 +54,8 @@ public interface MgmtDistributionSetRestApi { */ @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) ResponseEntity> getDistributionSets( - @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET) final int pagingOffsetParam, - @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT) final int pagingLimitParam, + @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, + @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam); From 228524dccf830a0fc98e0db8b2a6aea5cc335f14 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Mon, 12 Sep 2016 11:29:04 +0200 Subject: [PATCH 09/10] add dummy artifact upload again Signed-off-by: Michael Hirsch --- .../hawkbit/mgmt/client/Application.java | 28 +++++++++++++-- .../scenarios/ConfigurableScenario.java | 36 +++++++++++++++++-- 2 files changed, 59 insertions(+), 5 deletions(-) diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java index aae1bf8da..d94519df2 100644 --- a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java +++ b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java @@ -9,12 +9,14 @@ package org.eclipse.hawkbit.mgmt.client; import org.eclipse.hawkbit.feign.core.client.FeignClientConfiguration; +import org.eclipse.hawkbit.feign.core.client.IgnoreMultipleConsumersProducersSpringMvcContract; import org.eclipse.hawkbit.mgmt.client.resource.MgmtDistributionSetClientResource; import org.eclipse.hawkbit.mgmt.client.resource.MgmtRolloutClientResource; import org.eclipse.hawkbit.mgmt.client.resource.MgmtSoftwareModuleClientResource; import org.eclipse.hawkbit.mgmt.client.resource.MgmtTargetClientResource; import org.eclipse.hawkbit.mgmt.client.scenarios.ConfigurableScenario; import org.eclipse.hawkbit.mgmt.client.scenarios.CreateStartedRolloutExample; +import org.eclipse.hawkbit.mgmt.client.scenarios.upload.FeignMultipartEncoder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.Banner.Mode; import org.springframework.boot.CommandLineRunner; @@ -23,12 +25,20 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.netflix.feign.EnableFeignClients; +import org.springframework.cloud.netflix.feign.support.ResponseEntityDecoder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; +import org.springframework.hateoas.hal.Jackson2HalModule; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; + +import feign.Feign; import feign.Logger; import feign.auth.BasicAuthRequestInterceptor; +import feign.jackson.JacksonDecoder; +import feign.slf4j.Slf4jLogger; @SpringBootApplication @EnableFeignClients("org.eclipse.hawkbit.mgmt.client.resource") @@ -69,8 +79,9 @@ public class Application implements CommandLineRunner { final MgmtSoftwareModuleClientResource softwareModuleResource, final MgmtTargetClientResource targetResource, final MgmtRolloutClientResource rolloutResource, final ClientConfigurationProperties clientConfigurationProperties) { - return new ConfigurableScenario(distributionSetResource, softwareModuleResource, targetResource, - rolloutResource, clientConfigurationProperties); + return new ConfigurableScenario(distributionSetResource, softwareModuleResource, + uploadSoftwareModule(clientConfigurationProperties), targetResource, rolloutResource, + clientConfigurationProperties); } @Bean @@ -78,6 +89,19 @@ public class Application implements CommandLineRunner { return new CreateStartedRolloutExample(); } + @Bean + public MgmtSoftwareModuleClientResource uploadSoftwareModule(final ClientConfigurationProperties configuration) { + final ObjectMapper mapper = new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .registerModule(new Jackson2HalModule()); + return Feign.builder().contract(new IgnoreMultipleConsumersProducersSpringMvcContract()) + .requestInterceptor( + new BasicAuthRequestInterceptor(configuration.getUsername(), configuration.getPassword())) + .logger(new Slf4jLogger()).encoder(new FeignMultipartEncoder()) + .decoder(new ResponseEntityDecoder(new JacksonDecoder(mapper))) + .target(MgmtSoftwareModuleClientResource.class, configuration.getUrl()); + } + @Bean public Logger.Level feignLoggerLevel() { return Logger.Level.FULL; diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/ConfigurableScenario.java b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/ConfigurableScenario.java index 1b461b178..388516897 100644 --- a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/ConfigurableScenario.java +++ b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/ConfigurableScenario.java @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.mgmt.client.scenarios; import java.util.List; +import java.util.Random; import java.util.concurrent.TimeUnit; import org.eclipse.hawkbit.mgmt.client.ClientConfigurationProperties; @@ -22,6 +23,7 @@ import org.eclipse.hawkbit.mgmt.client.resource.builder.RolloutBuilder; import org.eclipse.hawkbit.mgmt.client.resource.builder.SoftwareModuleAssigmentBuilder; import org.eclipse.hawkbit.mgmt.client.resource.builder.SoftwareModuleBuilder; import org.eclipse.hawkbit.mgmt.client.resource.builder.TargetBuilder; +import org.eclipse.hawkbit.mgmt.client.scenarios.upload.ArtifactFile; import org.eclipse.hawkbit.mgmt.json.model.PagedList; import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSet; import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutResponseBody; @@ -53,12 +55,16 @@ public class ConfigurableScenario { private final ClientConfigurationProperties clientConfigurationProperties; + private final MgmtSoftwareModuleClientResource uploadSoftwareModule; + public ConfigurableScenario(final MgmtDistributionSetClientResource distributionSetResource, final MgmtSoftwareModuleClientResource softwareModuleResource, - final MgmtTargetClientResource targetResource, final MgmtRolloutClientResource rolloutResource, + final MgmtSoftwareModuleClientResource uploadSoftwareModule, final MgmtTargetClientResource targetResource, + final MgmtRolloutClientResource rolloutResource, final ClientConfigurationProperties clientConfigurationProperties) { this.distributionSetResource = distributionSetResource; this.softwareModuleResource = softwareModuleResource; + this.uploadSoftwareModule = uploadSoftwareModule; this.targetResource = targetResource; this.rolloutResource = rolloutResource; this.clientConfigurationProperties = clientConfigurationProperties; @@ -158,11 +164,12 @@ public class ConfigurableScenario { private void createDistributionSets(final Scenario scenario) { LOGGER.info("Creating {} distribution sets", scenario.getDistributionSets()); + final byte[] artifact = generateArtifact(scenario); distributionSetResource.createDistributionSets(new DistributionSetBuilder().name(scenario.getDsName()) .type("os_app").version("1.0.").buildAsList(scenario.getDistributionSets())).getBody() .forEach(dsSet -> { - final List modules = addModules(scenario, dsSet); + final List modules = addModules(scenario, dsSet, artifact); final SoftwareModuleAssigmentBuilder assign = new SoftwareModuleAssigmentBuilder(); modules.forEach(module -> assign.id(module.getModuleId())); @@ -172,7 +179,8 @@ public class ConfigurableScenario { LOGGER.info("Creating {} distribution sets -> Done", scenario.getDistributionSets()); } - private List addModules(final Scenario scenario, final MgmtDistributionSet dsSet) { + private List addModules(final Scenario scenario, final MgmtDistributionSet dsSet, + final byte[] artifact) { final List modules = softwareModuleResource .createSoftwareModules(new SoftwareModuleBuilder().name(scenario.getSmFwName() + "-os") .version(dsSet.getVersion()).type("os").build()) @@ -182,6 +190,13 @@ public class ConfigurableScenario { .type("application").buildAsList(scenario.getAppModulesPerDistributionSet())) .getBody()); + for (int iArtifact = 0; iArtifact < scenario.getArtifactsPerSM(); iArtifact++) { + modules.forEach(module -> { + final ArtifactFile file = new ArtifactFile("dummyfile.dummy", null, "multipart/form-data", artifact); + uploadSoftwareModule.uploadArtifact(module.getModuleId(), file, null, null, null); + }); + } + return modules; } @@ -208,4 +223,19 @@ public class ConfigurableScenario { } return Integer.valueOf(size); } + + private static byte[] generateArtifact(final Scenario scenario) { + + // Exception squid:S2245 - not used for cryptographic function + @SuppressWarnings("squid:S2245") + final Random random = new Random(); + + // create byte array + final byte[] nbyte = new byte[parseSize(scenario.getArtifactSize())]; + + // put the next byte in the array + random.nextBytes(nbyte); + + return nbyte; + } } From 17e4415b26d6f23ab0176c25101f043c9b2f7414 Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Tue, 13 Sep 2016 10:07:24 +0200 Subject: [PATCH 10/10] Comment on indexToExpander line Signed-off-by: kaizimmerm --- .../IgnoreMultipleConsumersProducersSpringMvcContract.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java b/examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java index 2706af4a3..e2ca27077 100644 --- a/examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java +++ b/examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java @@ -40,6 +40,9 @@ public class IgnoreMultipleConsumersProducersSpringMvcContract extends SpringMvc // multiple consumers and produces, see // https://github.com/spring-cloud/spring-cloud-netflix/issues/808 LOGGER.trace(e.getMessage(), e); + + // This line from super is mandatory to avoid that access to the + // expander causes a nullpointer. data.indexToExpander(new LinkedHashMap()); } }